power: supply: axp288_charger: Register extcon notifers after power_supply
The extcon notifier work calls power_supply_changed on the power_supply we register, so the extcon notifiers should be registered after we register the power_supply. While touching this code anyways, refactor the code for the 3 cable types into a loop to avoid code repetition. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sebastian Reichel <sre@kernel.org>
This commit is contained in:
parent
e3668e37f9
commit
42e2008a66
@ -815,6 +815,8 @@ static int axp288_charger_probe(struct platform_device *pdev)
|
|||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
|
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
|
||||||
struct power_supply_config charger_cfg = {};
|
struct power_supply_config charger_cfg = {};
|
||||||
|
unsigned int cable_ids[] = { EXTCON_CHG_USB_SDP, EXTCON_CHG_USB_CDP,
|
||||||
|
EXTCON_CHG_USB_DCP };
|
||||||
|
|
||||||
info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
|
info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
|
||||||
if (!info)
|
if (!info)
|
||||||
@ -831,33 +833,6 @@ static int axp288_charger_probe(struct platform_device *pdev)
|
|||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register for extcon notification */
|
|
||||||
INIT_WORK(&info->cable.work, axp288_charger_extcon_evt_worker);
|
|
||||||
info->cable.nb.notifier_call = axp288_charger_handle_cable_evt;
|
|
||||||
ret = devm_extcon_register_notifier(&pdev->dev, info->cable.edev,
|
|
||||||
EXTCON_CHG_USB_SDP, &info->cable.nb);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&info->pdev->dev,
|
|
||||||
"failed to register extcon notifier for SDP %d\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = devm_extcon_register_notifier(&pdev->dev, info->cable.edev,
|
|
||||||
EXTCON_CHG_USB_CDP, &info->cable.nb);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&info->pdev->dev,
|
|
||||||
"failed to register extcon notifier for CDP %d\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = devm_extcon_register_notifier(&pdev->dev, info->cable.edev,
|
|
||||||
EXTCON_CHG_USB_DCP, &info->cable.nb);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&info->pdev->dev,
|
|
||||||
"failed to register extcon notifier for DCP %d\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, info);
|
platform_set_drvdata(pdev, info);
|
||||||
mutex_init(&info->lock);
|
mutex_init(&info->lock);
|
||||||
|
|
||||||
@ -871,6 +846,19 @@ static int axp288_charger_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Register for extcon notification */
|
||||||
|
INIT_WORK(&info->cable.work, axp288_charger_extcon_evt_worker);
|
||||||
|
info->cable.nb.notifier_call = axp288_charger_handle_cable_evt;
|
||||||
|
for (i = 0; i < ARRAY_SIZE(cable_ids); i++) {
|
||||||
|
ret = devm_extcon_register_notifier(dev, info->cable.edev,
|
||||||
|
cable_ids[i], &info->cable.nb);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "failed to register extcon notifier for %u: %d\n",
|
||||||
|
cable_ids[i], ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Register for OTG notification */
|
/* Register for OTG notification */
|
||||||
INIT_WORK(&info->otg.work, axp288_charger_otg_evt_worker);
|
INIT_WORK(&info->otg.work, axp288_charger_otg_evt_worker);
|
||||||
info->otg.id_nb.notifier_call = axp288_charger_handle_otg_evt;
|
info->otg.id_nb.notifier_call = axp288_charger_handle_otg_evt;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user