forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
extcon: extcon-max8997: Simplify driver using devm
Simplify driver by switching to use the resource managed IRQ requesting and resource managed work-queue initialization. Signed-off-by: Matti Vaittinen <[email protected]> Reviewed-by: Hans de Goede <[email protected]> Acked-by: Chanwoo Choi <[email protected]> Link: https://lore.kernel.org/r/61190cc280a63baeb05ec570282bb3677bee8e7b.1623146580.git.matti.vaittinen@fi.rohmeurope.com Signed-off-by: Hans de Goede <[email protected]>
- Loading branch information
1 parent
610bdc0
commit 87ee8de
Showing
1 changed file
with
16 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
// Copyright (C) 2012 Samsung Electronics | ||
// Donggeun Kim <[email protected]> | ||
|
||
#include <linux/devm-helpers.h> | ||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/i2c.h> | ||
|
@@ -650,42 +651,44 @@ static int max8997_muic_probe(struct platform_device *pdev) | |
mutex_init(&info->mutex); | ||
|
||
INIT_WORK(&info->irq_work, max8997_muic_irq_work); | ||
ret = devm_work_autocancel(&pdev->dev, &info->irq_work, | ||
max8997_muic_irq_work); | ||
if (ret) | ||
return ret; | ||
|
||
for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) { | ||
struct max8997_muic_irq *muic_irq = &muic_irqs[i]; | ||
unsigned int virq = 0; | ||
|
||
virq = irq_create_mapping(max8997->irq_domain, muic_irq->irq); | ||
if (!virq) { | ||
ret = -EINVAL; | ||
goto err_irq; | ||
} | ||
if (!virq) | ||
return -EINVAL; | ||
|
||
muic_irq->virq = virq; | ||
|
||
ret = request_threaded_irq(virq, NULL, | ||
max8997_muic_irq_handler, | ||
IRQF_NO_SUSPEND, | ||
muic_irq->name, info); | ||
ret = devm_request_threaded_irq(&pdev->dev, virq, NULL, | ||
max8997_muic_irq_handler, | ||
IRQF_NO_SUSPEND, | ||
muic_irq->name, info); | ||
if (ret) { | ||
dev_err(&pdev->dev, | ||
"failed: irq request (IRQ: %d, error :%d)\n", | ||
muic_irq->irq, ret); | ||
goto err_irq; | ||
return ret; | ||
} | ||
} | ||
|
||
/* External connector */ | ||
info->edev = devm_extcon_dev_allocate(&pdev->dev, max8997_extcon_cable); | ||
if (IS_ERR(info->edev)) { | ||
dev_err(&pdev->dev, "failed to allocate memory for extcon\n"); | ||
ret = PTR_ERR(info->edev); | ||
goto err_irq; | ||
return PTR_ERR(info->edev); | ||
} | ||
|
||
ret = devm_extcon_dev_register(&pdev->dev, info->edev); | ||
if (ret) { | ||
dev_err(&pdev->dev, "failed to register extcon device\n"); | ||
goto err_irq; | ||
return ret; | ||
} | ||
|
||
if (pdata && pdata->muic_pdata) { | ||
|
@@ -733,7 +736,7 @@ static int max8997_muic_probe(struct platform_device *pdev) | |
2, info->status); | ||
if (ret) { | ||
dev_err(info->dev, "failed to read MUIC register\n"); | ||
goto err_irq; | ||
return ret; | ||
} | ||
cable_type = max8997_muic_get_cable_type(info, | ||
MAX8997_CABLE_GROUP_ADC, &attached); | ||
|
@@ -756,31 +759,13 @@ static int max8997_muic_probe(struct platform_device *pdev) | |
delay_jiffies); | ||
|
||
return 0; | ||
|
||
err_irq: | ||
while (--i >= 0) | ||
free_irq(muic_irqs[i].virq, info); | ||
return ret; | ||
} | ||
|
||
static int max8997_muic_remove(struct platform_device *pdev) | ||
{ | ||
struct max8997_muic_info *info = platform_get_drvdata(pdev); | ||
int i; | ||
|
||
for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) | ||
free_irq(muic_irqs[i].virq, info); | ||
cancel_work_sync(&info->irq_work); | ||
|
||
return 0; | ||
} | ||
|
||
static struct platform_driver max8997_muic_driver = { | ||
.driver = { | ||
.name = DEV_NAME, | ||
}, | ||
.probe = max8997_muic_probe, | ||
.remove = max8997_muic_remove, | ||
}; | ||
|
||
module_platform_driver(max8997_muic_driver); | ||
|