Move sysfs_notify and i2c_transfer calls from bq2415x_notifier_call
to bq2415x_timer_work to avoid sleeping in atomic context.
This fixes the following bug:
[ 7.667449] Workqueue: events power_supply_changed_work
[ 7.673034] [<
c0015c28>] (unwind_backtrace+0x0/0xe0) from [<
c0011e1c>] (show_stack+0x10/0x14)
[ 7.682098] [<
c0011e1c>] (show_stack+0x10/0x14) from [<
c052cdd0>] (dump_stack+0x78/0xac)
[ 7.690704] [<
c052cdd0>] (dump_stack+0x78/0xac) from [<
c052a044>] (__schedule_bug+0x48/0x60)
[ 7.699645] [<
c052a044>] (__schedule_bug+0x48/0x60) from [<
c053071c>] (__schedule+0x74/0x638)
[ 7.708618] [<
c053071c>] (__schedule+0x74/0x638) from [<
c05301fc>] (schedule_timeout+0x1dc/0x24c)
[ 7.718017] [<
c05301fc>] (schedule_timeout+0x1dc/0x24c) from [<
c05316ec>] (wait_for_common+0x138/0x17c)
[ 7.727966] [<
c05316ec>] (wait_for_common+0x138/0x17c) from [<
c0362a70>] (omap_i2c_xfer+0x340/0x4a0)
[ 7.737640] [<
c0362a70>] (omap_i2c_xfer+0x340/0x4a0) from [<
c035d928>] (__i2c_transfer+0x40/0x74)
[ 7.747039] [<
c035d928>] (__i2c_transfer+0x40/0x74) from [<
c035e22c>] (i2c_transfer+0x6c/0x90)
[ 7.756195] [<
c035e22c>] (i2c_transfer+0x6c/0x90) from [<
c037ad24>] (bq2415x_i2c_write+0x48/0x78)
[ 7.765563] [<
c037ad24>] (bq2415x_i2c_write+0x48/0x78) from [<
c037ae60>] (bq2415x_set_weak_battery_voltage+0x4c/0x50)
[ 7.776824] [<
c037ae60>] (bq2415x_set_weak_battery_voltage+0x4c/0x50) from [<
c037bce8>] (bq2415x_set_mode+0xdc/0x14c)
[ 7.788085] [<
c037bce8>] (bq2415x_set_mode+0xdc/0x14c) from [<
c037bfb8>] (bq2415x_notifier_call+0xa8/0xb4)
[ 7.798309] [<
c037bfb8>] (bq2415x_notifier_call+0xa8/0xb4) from [<
c005f228>] (notifier_call_chain+0x38/0x68)
[ 7.808715] [<
c005f228>] (notifier_call_chain+0x38/0x68) from [<
c005f284>] (__atomic_notifier_call_chain+0x2c/0x3c)
[ 7.819732] [<
c005f284>] (__atomic_notifier_call_chain+0x2c/0x3c) from [<
c005f2a8>] (atomic_notifier_call_chain+0x14/0x18)
[ 7.831420] [<
c005f2a8>] (atomic_notifier_call_chain+0x14/0x18) from [<
c0378078>] (power_supply_changed_work+0x6c/0xb8)
[ 7.842864] [<
c0378078>] (power_supply_changed_work+0x6c/0xb8) from [<
c00556c0>] (process_one_work+0x248/0x440)
[ 7.853546] [<
c00556c0>] (process_one_work+0x248/0x440) from [<
c0055d6c>] (worker_thread+0x208/0x350)
[ 7.863372] [<
c0055d6c>] (worker_thread+0x208/0x350) from [<
c005b0ac>] (kthread+0xc8/0xdc)
[ 7.872131] [<
c005b0ac>] (kthread+0xc8/0xdc) from [<
c000e138>] (ret_from_fork+0x14/0x3c)
Fixes:
32260308b4ca ("bq2415x_charger: Use power_supply notifier for automode")
Cc: <stable@vger.kernel.org>
Signed-off-by: Sebastian Reichel <sre@kernel.org>