summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorDongwoo Lee <dwoo08.lee@samsung.com>2016-08-16 11:44:16 +0900
committerSeung-Woo Kim <sw0312.kim@samsung.com>2016-12-14 13:52:28 +0900
commit6baf177a4751a9928c41fd7cb36d0e78e2b79b8e (patch)
treeccec6c65e9423fcae56de13556c71876f3ee02d5 /drivers/power
parentd883d3221625f7193a7b21890b11de764778f749 (diff)
power: max77843_charger: fix to unregister extcon interest
The extcon interest should be unregistered when probe fails or the driver is removed. This patch fixes to call extcon_unregister_interest() on both cases. Change-Id: I6639d7a4685c11985d08e642ebb32eb031b3326d Signed-off-by: Dongwoo Lee <dwoo08.lee@samsung.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/max77843_charger.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/drivers/power/max77843_charger.c b/drivers/power/max77843_charger.c
index ed8df6fb9fd1..2c596723b51c 100644
--- a/drivers/power/max77843_charger.c
+++ b/drivers/power/max77843_charger.c
@@ -496,11 +496,21 @@ static int max77843_extcon_register(struct max77843_charger *charger)
dev_err(charger->dev, "Cannot register OTG notifier\n");
return ret;
}
+
+ charger->edev = edev;
}
return 0;
}
+static void max77843_extcon_unregister(struct max77843_charger *charger)
+{
+ if (charger->edev) {
+ extcon_unregister_interest(&charger->otg_cable_nb);
+ charger->edev = NULL;
+ }
+}
+
static const struct power_supply_desc max77843_charger_desc = {
.name = "max77843-charger",
.type = POWER_SUPPLY_TYPE_MAINS,
@@ -533,23 +543,28 @@ static int max77843_charger_probe(struct platform_device *pdev)
return ret;
charger->info = max77843_charger_dt_init(pdev);
- if (IS_ERR(charger->info))
- return PTR_ERR(charger->info);
-
+ if (IS_ERR(charger->info)) {
+ ret = PTR_ERR(charger->info);
+ goto err_extcon;
+ }
ret = max77843_charger_init(charger);
if (ret)
- return ret;
+ goto err_extcon;
charger->psy = power_supply_register(&pdev->dev, &max77843_charger_desc, &psy_cfg);
if (IS_ERR(charger->psy)) {
ret = PTR_ERR(charger->psy);
dev_err(&pdev->dev,
"Failed to register power supply %d\n", ret);
- return ret;
+ goto err_extcon;
}
return 0;
+
+err_extcon:
+ max77843_extcon_unregister(charger);
+ return ret;
}
static int max77843_charger_remove(struct platform_device *pdev)
@@ -557,7 +572,7 @@ static int max77843_charger_remove(struct platform_device *pdev)
struct max77843_charger *charger = platform_get_drvdata(pdev);
power_supply_unregister(charger->psy);
-
+ max77843_extcon_unregister(charger);
return 0;
}