aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/supply
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2021-01-24 09:24:21 -0600
committerSebastian Reichel <sebastian.reichel@collabora.com>2021-01-25 00:25:26 +0100
commitb5e8642ed95ff6ecc20cc6038fe831affa9d098c (patch)
treef5537ae285a22677e1ab8c466f6e7dd6b2160b29 /drivers/power/supply
parentpower: supply: fix sbs-charger build, needs REGMAP_I2C (diff)
downloadlinux-dev-b5e8642ed95ff6ecc20cc6038fe831affa9d098c.tar.xz
linux-dev-b5e8642ed95ff6ecc20cc6038fe831affa9d098c.zip
power: supply: axp20x_usb_power: Init work before enabling IRQs
The IRQ handler calls mod_delayed_work() on power->vbus_detect. However, that work item is not initialized until after the IRQs are enabled. If an IRQ is already pending when the driver is probed, the driver calls mod_delayed_work() on an uninitialized work item, which causes an oops. Fixes: bcfb7ae3f50b ("power: supply: axp20x_usb_power: Only poll while offline") Signed-off-by: Samuel Holland <samuel@sholland.org> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Diffstat (limited to 'drivers/power/supply')
-rw-r--r--drivers/power/supply/axp20x_usb_power.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/power/supply/axp20x_usb_power.c b/drivers/power/supply/axp20x_usb_power.c
index 70b28b699a80..8933ae26c3d6 100644
--- a/drivers/power/supply/axp20x_usb_power.c
+++ b/drivers/power/supply/axp20x_usb_power.c
@@ -593,6 +593,7 @@ static int axp20x_usb_power_probe(struct platform_device *pdev)
power->axp20x_id = axp_data->axp20x_id;
power->regmap = axp20x->regmap;
power->num_irqs = axp_data->num_irq_names;
+ INIT_DELAYED_WORK(&power->vbus_detect, axp20x_usb_power_poll_vbus);
if (power->axp20x_id == AXP202_ID) {
/* Enable vbus valid checking */
@@ -645,7 +646,6 @@ static int axp20x_usb_power_probe(struct platform_device *pdev)
}
}
- INIT_DELAYED_WORK(&power->vbus_detect, axp20x_usb_power_poll_vbus);
if (axp20x_usb_vbus_needs_polling(power))
queue_delayed_work(system_power_efficient_wq, &power->vbus_detect, 0);