* [PATCH v2 3/6] power: bq24190_charger: Install irq_handler_thread() at end of probe()
@ 2017-01-16 6:07 Liam Breck
2017-01-16 18:03 ` Mark Greer
0 siblings, 1 reply; 2+ messages in thread
From: Liam Breck @ 2017-01-16 6:07 UTC (permalink / raw)
To: linux-pm
Cc: Sebastian Reichel, Tony Lindgren, Mark A . Greer, Liam Breck,
Matt Ranostay
[-- Attachment #1: Type: text/plain, Size: 1 bytes --]
[-- Attachment #2: patch-v2-3of6.txt --]
[-- Type: text/plain, Size: 2667 bytes --]
The device specific data is not fully initialized on
request_threaded_irq(). This may cause a crash when the IRQ handler
tries to reference them.
Fix the issue by installing IRQ handler at the end of the probe.
Fixes: d7bf353fd0aa3 ("bq24190_charger: Add support for TI BQ24190 Battery Charger")
Cc: Mark A. Greer <mgreer@animalcreek.com>
Cc: Matt Ranostay <matt@ranostay.consulting>
Cc: Tony Lindgren <tony@atomide.com>
Signed-off-by: Liam Breck <kernel@networkimprov.net>
---
drivers/power/supply/bq24190_charger.c | 35 ++++++++++++++++---------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
index b51eac1..54c8952 100644
--- a/drivers/power/supply/bq24190_charger.c
+++ b/drivers/power/supply/bq24190_charger.c
@@ -1392,22 +1392,13 @@ static int bq24190_probe(struct i2c_client *client,
return -EINVAL;
}
- ret = devm_request_threaded_irq(dev, bdi->irq, NULL,
- bq24190_irq_handler_thread,
- IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
- "bq24190-charger", bdi);
- if (ret < 0) {
- dev_err(dev, "Can't set up irq handler\n");
- goto out1;
- }
-
pm_runtime_enable(dev);
pm_runtime_resume(dev);
ret = bq24190_hw_init(bdi);
if (ret < 0) {
dev_err(dev, "Hardware init failed\n");
- goto out2;
+ goto out1;
}
charger_cfg.drv_data = bdi;
@@ -1418,7 +1409,7 @@ static int bq24190_probe(struct i2c_client *client,
if (IS_ERR(bdi->charger)) {
dev_err(dev, "Can't register charger\n");
ret = PTR_ERR(bdi->charger);
- goto out2;
+ goto out1;
}
battery_cfg.drv_data = bdi;
@@ -1427,27 +1418,39 @@ static int bq24190_probe(struct i2c_client *client,
if (IS_ERR(bdi->battery)) {
dev_err(dev, "Can't register battery\n");
ret = PTR_ERR(bdi->battery);
- goto out3;
+ goto out2;
}
ret = bq24190_sysfs_create_group(bdi);
if (ret) {
dev_err(dev, "Can't create sysfs entries\n");
+ goto out3;
+ }
+
+ ret = devm_request_threaded_irq(dev, bdi->irq, NULL,
+ bq24190_irq_handler_thread,
+ IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+ "bq24190-charger", bdi);
+ if (ret < 0) {
+ dev_err(dev, "Can't set up irq handler\n");
goto out4;
}
return 0;
out4:
- power_supply_unregister(bdi->battery);
+ bq24190_sysfs_remove_group(bdi);
+
out3:
- power_supply_unregister(bdi->charger);
+ power_supply_unregister(bdi->battery);
+
out2:
- pm_runtime_disable(dev);
+ power_supply_unregister(bdi->charger);
+
out1:
+ pm_runtime_disable(dev);
if (bdi->gpio_int)
gpio_free(bdi->gpio_int);
-
return ret;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2 3/6] power: bq24190_charger: Install irq_handler_thread() at end of probe()
2017-01-16 6:07 [PATCH v2 3/6] power: bq24190_charger: Install irq_handler_thread() at end of probe() Liam Breck
@ 2017-01-16 18:03 ` Mark Greer
0 siblings, 0 replies; 2+ messages in thread
From: Mark Greer @ 2017-01-16 18:03 UTC (permalink / raw)
To: Liam Breck
Cc: linux-pm, Sebastian Reichel, Tony Lindgren, Liam Breck, Matt Ranostay
On Sun, Jan 15, 2017 at 10:07:48PM -0800, Liam Breck wrote:
>
> The device specific data is not fully initialized on
> request_threaded_irq(). This may cause a crash when the IRQ handler
> tries to reference them.
>
> Fix the issue by installing IRQ handler at the end of the probe.
>
> Fixes: d7bf353fd0aa3 ("bq24190_charger: Add support for TI BQ24190 Battery Charger")
> Cc: Mark A. Greer <mgreer@animalcreek.com>
> Cc: Matt Ranostay <matt@ranostay.consulting>
> Cc: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Liam Breck <kernel@networkimprov.net>
> ---
> drivers/power/supply/bq24190_charger.c | 35 ++++++++++++++++---------------
> 1 file changed, 19 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
> index b51eac1..54c8952 100644
> --- a/drivers/power/supply/bq24190_charger.c
> +++ b/drivers/power/supply/bq24190_charger.c
> out4:
> - power_supply_unregister(bdi->battery);
> + bq24190_sysfs_remove_group(bdi);
> +
> out3:
> - power_supply_unregister(bdi->charger);
> + power_supply_unregister(bdi->battery);
> +
> out2:
> - pm_runtime_disable(dev);
> + power_supply_unregister(bdi->charger);
> +
> out1:
> + pm_runtime_disable(dev);
> if (bdi->gpio_int)
> gpio_free(bdi->gpio_int);
> -
> return ret;
> }
I don't like the reformatting that you did here and even if I did, it
should be done in a separate patch. But, its minor so...
Acked-by: Mark Greer <mgreer@animalcreek.com>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-01-16 18:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-16 6:07 [PATCH v2 3/6] power: bq24190_charger: Install irq_handler_thread() at end of probe() Liam Breck
2017-01-16 18:03 ` Mark Greer
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.