Patch "power: supply: bq24190_charger: Install irq_handler_thread() at end of probe()" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
power: supply: bq24190_charger: Install irq_handler_thread() at end of probe()
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
power-supply-bq24190_charger-install-irq_handler_thread-at-end-of-probe.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d62acc5ef0621463446091ebd7a345e06e9ab80cMon Sep 17 00:00:00 2001
From: Liam Breck <[email protected]>
Date: Wed, 18 Jan 2017 09:26:50 -0800
Subject: power: supply: bq24190_charger: Install irq_handler_thread() at end of probe()
From: Liam Breck <[email protected]>
commit d62acc5ef0621463446091ebd7a345e06e9ab80c upstream.
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.
--- drivers/power/bq24190_charger.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-)
drivers/power/bq24190_charger.c +16 -15
@@ -1392,22 +1392,13 @@ static int bq24190_probe(struct i2c_cliereturn -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_clieif (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,24 +1418,34 @@ static int bq24190_probe(struct i2c_clieif (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);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/power-supply-bq24190_charger-handle-fault-before-status-on-interrupt.patch queue-4.4/power-supply-bq24190_charger-call-power_supply_changed-for-relevant-component.patch queue-4.4/power-supply-bq24190_charger-install-irq_handler_thread-at-end-of-probe.patch queue-4.4/power-supply-bq24190_charger-call-set_mode_host-on-pm_resume.patch queue-4.4/power-supply-bq24190_charger-don-t-read-fault-register-outside-irq_handle_thread.patch queue-4.4/power-supply-bq24190_charger-fix-irq-trigger-to-irqf_trigger_falling.patch