1
0
Fork 0

mfd: max17135: fix kernel warning at boot time when max17135 is not detecteded

in 5451781dad commit, it added the check that
the regulator need to be disabled before calling regulator_put().
If not do so, the kernel will print warning message as below.

To fix this, need to disable regulator before probe function return if this
PMIC is not found. regulator_put() will be called when probe fails in this case
as devm_regulator_get() already called in probe function.

[    0.269916] i2c i2c-2: Max17135 PMIC not found!
[    0.270004] ------------[ cut here ]------------
[    0.270145] WARNING: CPU: 0 PID: 1 at drivers/regulator/core.c:2039 _regulator_put.part.4+0x100/0x120
[    0.270166] Modules linked in:
[    0.270196] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.3.0-rc3-next-20190809-02777-g23dc3ed #22
[    0.270214] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[    0.270250] [<c0112868>] (unwind_backtrace) from [<c010cd9c>] (show_stack+0x10/0x14)
[    0.270281] [<c010cd9c>] (show_stack) from [<c0d26ad4>] (dump_stack+0xd8/0x110)
[    0.270310] [<c0d26ad4>] (dump_stack) from [<c01362c4>] (__warn.part.3+0xa8/0xe8)
[    0.270335] [<c01362c4>] (__warn.part.3) from [<c013645c>] (warn_slowpath_null+0x40/0x4c)
[    0.270361] [<c013645c>] (warn_slowpath_null) from [<c05e6520>] (_regulator_put.part.4+0x100/0x120)
[    0.270385] [<c05e6520>] (_regulator_put.part.4) from [<c05e656c>] (regulator_put+0x2c/0x3c)
[    0.270414] [<c05e656c>] (regulator_put) from [<c06dce90>] (release_nodes+0x1ac/0x1f8)
[    0.270444] [<c06dce90>] (release_nodes) from [<c06d8968>] (really_probe+0x104/0x340)
[    0.270467] [<c06d8968>] (really_probe) from [<c06d8d50>] (driver_probe_device+0x84/0x194)
[    0.270492] [<c06d8d50>] (driver_probe_device) from [<c06d6e44>] (bus_for_each_drv+0x7c/0xc4)
[    0.270516] [<c06d6e44>] (bus_for_each_drv) from [<c06d87e8>] (__device_attach+0xcc/0x140)
[    0.270539] [<c06d87e8>] (__device_attach) from [<c06d7b00>] (bus_probe_device+0x88/0x90)
[    0.270563] [<c06d7b00>] (bus_probe_device) from [<c06d49d0>] (device_add+0x608/0x754)
[    0.270591] [<c06d49d0>] (device_add) from [<c088c4a0>] (i2c_new_client_device+0x12c/0x20c)
[    0.270615] [<c088c4a0>] (i2c_new_client_device) from [<c088c588>] (i2c_new_device+0x8/0x14)
[    0.270641] [<c088c588>] (i2c_new_device) from [<c088f5e0>] (of_i2c_register_devices+0x90/0x110)
[    0.270666] [<c088f5e0>] (of_i2c_register_devices) from [<c088c950>] (i2c_register_adapter+0x148/0x3ec)
[    0.270691] [<c088c950>] (i2c_register_adapter) from [<c0892b24>] (i2c_imx_probe+0x37c/0x830)
[    0.270719] [<c0892b24>] (i2c_imx_probe) from [<c06dac38>] (platform_drv_probe+0x48/0x98)
[    0.270747] [<c06dac38>] (platform_drv_probe) from [<c06d8a40>] (really_probe+0x1dc/0x340)
[    0.270773] [<c06d8a40>] (really_probe) from [<c06d8d50>] (driver_probe_device+0x84/0x194)
[    0.270797] [<c06d8d50>] (driver_probe_device) from [<c06d9044>] (device_driver_attach+0x58/0x60)
[    0.270821] [<c06d9044>] (device_driver_attach) from [<c06d90a4>] (__driver_attach+0x58/0xd0)
[    0.270844] [<c06d90a4>] (__driver_attach) from [<c06d6d70>] (bus_for_each_dev+0x70/0xb4)
[    0.270867] [<c06d6d70>] (bus_for_each_dev) from [<c06d7d9c>] (bus_add_driver+0x198/0x1d0)
[    0.270890] [<c06d7d9c>] (bus_add_driver) from [<c06d9d30>] (driver_register+0x74/0x108)
[    0.270916] [<c06d9d30>] (driver_register) from [<c0103078>] (do_one_initcall+0x80/0x338)
[    0.270946] [<c0103078>] (do_one_initcall) from [<c1301214>] (kernel_init_freeable+0x2fc/0x3d8)
[    0.270973] [<c1301214>] (kernel_init_freeable) from [<c0d3f59c>] (kernel_init+0x8/0x110)
[    0.270997] [<c0d3f59c>] (kernel_init) from [<c01010b4>] (ret_from_fork+0x14/0x20)
[    0.271015] Exception stack(0xec0e9fb0 to 0xec0e9ff8)
[    0.271038] 9fa0:                                     00000000 00000000 00000000 00000000
[    0.271059] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[    0.271077] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    0.271094] irq event stamp: 70901
[    0.271125] hardirqs last  enabled at (70909): [<c019be00>] console_unlock+0x418/0x5f4
[    0.271149] hardirqs last disabled at (70916): [<c019ba70>] console_unlock+0x88/0x5f4
[    0.271173] softirqs last  enabled at (69156): [<c01024e4>] __do_softirq+0x2c4/0x514
[    0.271198] softirqs last disabled at (68881): [<c013da4c>] irq_exit+0x100/0x188
[    0.271268] ---[ end trace 579e47ca40f2be36 ]---

Signed-off-by: Robby Cai <robby.cai@nxp.com>
5.4-rM2-2.2.x-imx-squashed
Robby Cai 2019-10-09 11:27:02 +08:00 committed by Dong Aisheng
parent f5c206b539
commit 32e5e6175b
1 changed files with 6 additions and 0 deletions

View File

@ -172,6 +172,8 @@ static int max17135_probe(struct i2c_client *client,
err2:
mfd_remove_devices(max17135->dev);
err1:
if (!IS_ERR(gpio_regulator))
regulator_disable(gpio_regulator);
kfree(max17135);
return ret;
@ -183,6 +185,10 @@ static int max17135_remove(struct i2c_client *i2c)
struct max17135 *max17135 = i2c_get_clientdata(i2c);
mfd_remove_devices(max17135->dev);
if (!IS_ERR(gpio_regulator))
regulator_disable(gpio_regulator);
return 0;
}