* [PATCH] backlight: lp855x: Ensure regulators are disabled on probe failure
@ 2020-02-24 14:07 Jon Hunter
2020-02-24 14:37 ` Daniel Thompson
[not found] ` <20200224140748.2182-1-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
0 siblings, 2 replies; 6+ messages in thread
From: Jon Hunter @ 2020-02-24 14:07 UTC (permalink / raw)
To: Milo Kim, Lee Jones, Daniel Thompson, Jingoo Han
Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-tegra-u79uwXL29TY76Z2rM5mHXA, Jon Hunter
If probing the LP885x backlight fails after the regulators have been
enabled, then the following warning is seen when releasing the
regulators ...
WARNING: CPU: 1 PID: 289 at drivers/regulator/core.c:2051 _regulator_put.part.28+0x158/0x160
Modules linked in: tegra_xudc lp855x_bl(+) host1x pwm_tegra ip_tables x_tables ipv6 nf_defrag_ipv6
CPU: 1 PID: 289 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200224 #1
Hardware name: NVIDIA Jetson TX1 Developer Kit (DT)
...
Call trace:
_regulator_put.part.28+0x158/0x160
regulator_put+0x34/0x50
devm_regulator_release+0x10/0x18
release_nodes+0x12c/0x230
devres_release_all+0x34/0x50
really_probe+0x1c0/0x370
driver_probe_device+0x58/0x100
device_driver_attach+0x6c/0x78
__driver_attach+0xb0/0xf0
bus_for_each_dev+0x68/0xc8
driver_attach+0x20/0x28
bus_add_driver+0x160/0x1f0
driver_register+0x60/0x110
i2c_register_driver+0x40/0x80
lp855x_driver_init+0x20/0x1000 [lp855x_bl]
do_one_initcall+0x58/0x1a0
do_init_module+0x54/0x1d0
load_module+0x1d80/0x21c8
__do_sys_finit_module+0xe8/0x100
__arm64_sys_finit_module+0x18/0x20
el0_svc_common.constprop.3+0xb0/0x168
do_el0_svc+0x20/0x98
el0_sync_handler+0xf4/0x1b0
el0_sync+0x140/0x180
Fix this by ensuring that the regulators are disabled, if enabled, on
probe failure.
Finally, ensure that the vddio regulator is disabled in the driver
remove handler.
Signed-off-by: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
drivers/video/backlight/lp855x_bl.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c
index f68920131a4a..e94932c69f54 100644
--- a/drivers/video/backlight/lp855x_bl.c
+++ b/drivers/video/backlight/lp855x_bl.c
@@ -456,7 +456,7 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
ret = regulator_enable(lp->enable);
if (ret < 0) {
dev_err(lp->dev, "failed to enable vddio: %d\n", ret);
- return ret;
+ goto disable_supply;
}
/*
@@ -471,24 +471,34 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
ret = lp855x_configure(lp);
if (ret) {
dev_err(lp->dev, "device config err: %d", ret);
- return ret;
+ goto disable_vddio;
}
ret = lp855x_backlight_register(lp);
if (ret) {
dev_err(lp->dev,
"failed to register backlight. err: %d\n", ret);
- return ret;
+ goto disable_vddio;
}
ret = sysfs_create_group(&lp->dev->kobj, &lp855x_attr_group);
if (ret) {
dev_err(lp->dev, "failed to register sysfs. err: %d\n", ret);
- return ret;
+ goto disable_vddio;
}
backlight_update_status(lp->bl);
+
return 0;
+
+disable_vddio:
+ if (lp->enable)
+ regulator_disable(lp->enable);
+disable_supply:
+ if (lp->supply)
+ regulator_disable(lp->supply);
+
+ return ret;
}
static int lp855x_remove(struct i2c_client *cl)
@@ -497,6 +507,8 @@ static int lp855x_remove(struct i2c_client *cl)
lp->bl->props.brightness = 0;
backlight_update_status(lp->bl);
+ if (lp->enable)
+ regulator_disable(lp->enable);
if (lp->supply)
regulator_disable(lp->supply);
sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] backlight: lp855x: Ensure regulators are disabled on probe failure
2020-02-24 14:07 [PATCH] backlight: lp855x: Ensure regulators are disabled on probe failure Jon Hunter
@ 2020-02-24 14:37 ` Daniel Thompson
[not found] ` <20200224143732.rreev3ypou26hvx3-SoAo7ar8mTX/PtFMR13I2A@public.gmane.org>
[not found] ` <20200224140748.2182-1-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
1 sibling, 1 reply; 6+ messages in thread
From: Daniel Thompson @ 2020-02-24 14:37 UTC (permalink / raw)
To: Jon Hunter
Cc: Milo Kim, Lee Jones, Jingoo Han, dri-devel, linux-kernel,
linux-tegra
On Mon, Feb 24, 2020 at 02:07:48PM +0000, Jon Hunter wrote:
> If probing the LP885x backlight fails after the regulators have been
> enabled, then the following warning is seen when releasing the
> regulators ...
>
> WARNING: CPU: 1 PID: 289 at drivers/regulator/core.c:2051 _regulator_put.part.28+0x158/0x160
> Modules linked in: tegra_xudc lp855x_bl(+) host1x pwm_tegra ip_tables x_tables ipv6 nf_defrag_ipv6
> CPU: 1 PID: 289 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200224 #1
> Hardware name: NVIDIA Jetson TX1 Developer Kit (DT)
>
> ...
>
> Call trace:
> _regulator_put.part.28+0x158/0x160
> regulator_put+0x34/0x50
> devm_regulator_release+0x10/0x18
> release_nodes+0x12c/0x230
> devres_release_all+0x34/0x50
> really_probe+0x1c0/0x370
> driver_probe_device+0x58/0x100
> device_driver_attach+0x6c/0x78
> __driver_attach+0xb0/0xf0
> bus_for_each_dev+0x68/0xc8
> driver_attach+0x20/0x28
> bus_add_driver+0x160/0x1f0
> driver_register+0x60/0x110
> i2c_register_driver+0x40/0x80
> lp855x_driver_init+0x20/0x1000 [lp855x_bl]
> do_one_initcall+0x58/0x1a0
> do_init_module+0x54/0x1d0
> load_module+0x1d80/0x21c8
> __do_sys_finit_module+0xe8/0x100
> __arm64_sys_finit_module+0x18/0x20
> el0_svc_common.constprop.3+0xb0/0x168
> do_el0_svc+0x20/0x98
> el0_sync_handler+0xf4/0x1b0
> el0_sync+0x140/0x180
>
> Fix this by ensuring that the regulators are disabled, if enabled, on
> probe failure.
>
> Finally, ensure that the vddio regulator is disabled in the driver
> remove handler.
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> ---
> drivers/video/backlight/lp855x_bl.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c
> index f68920131a4a..e94932c69f54 100644
> --- a/drivers/video/backlight/lp855x_bl.c
> +++ b/drivers/video/backlight/lp855x_bl.c
> @@ -456,7 +456,7 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
> ret = regulator_enable(lp->enable);
> if (ret < 0) {
> dev_err(lp->dev, "failed to enable vddio: %d\n", ret);
> - return ret;
> + goto disable_supply;
> }
>
> /*
> @@ -471,24 +471,34 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
> ret = lp855x_configure(lp);
> if (ret) {
> dev_err(lp->dev, "device config err: %d", ret);
> - return ret;
> + goto disable_vddio;
> }
>
> ret = lp855x_backlight_register(lp);
> if (ret) {
> dev_err(lp->dev,
> "failed to register backlight. err: %d\n", ret);
> - return ret;
> + goto disable_vddio;
> }
>
> ret = sysfs_create_group(&lp->dev->kobj, &lp855x_attr_group);
> if (ret) {
> dev_err(lp->dev, "failed to register sysfs. err: %d\n", ret);
> - return ret;
> + goto disable_vddio;
> }
>
> backlight_update_status(lp->bl);
> +
> return 0;
> +
> +disable_vddio:
> + if (lp->enable)
> + regulator_disable(lp->enable);
> +disable_supply:
> + if (lp->supply)
> + regulator_disable(lp->supply);
> +
> + return ret;
> }
>
> static int lp855x_remove(struct i2c_client *cl)
> @@ -497,6 +507,8 @@ static int lp855x_remove(struct i2c_client *cl)
>
> lp->bl->props.brightness = 0;
> backlight_update_status(lp->bl);
> + if (lp->enable)
> + regulator_disable(lp->enable);
> if (lp->supply)
> regulator_disable(lp->supply);
> sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread[parent not found: <20200224140748.2182-1-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH] backlight: lp855x: Ensure regulators are disabled on probe failure
[not found] ` <20200224140748.2182-1-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2020-04-28 7:09 ` Lee Jones
0 siblings, 0 replies; 6+ messages in thread
From: Lee Jones @ 2020-04-28 7:09 UTC (permalink / raw)
To: Jon Hunter
Cc: Milo Kim, Daniel Thompson, Jingoo Han,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-tegra-u79uwXL29TY76Z2rM5mHXA
On Mon, 24 Feb 2020, Jon Hunter wrote:
> If probing the LP885x backlight fails after the regulators have been
> enabled, then the following warning is seen when releasing the
> regulators ...
>
> WARNING: CPU: 1 PID: 289 at drivers/regulator/core.c:2051 _regulator_put.part.28+0x158/0x160
> Modules linked in: tegra_xudc lp855x_bl(+) host1x pwm_tegra ip_tables x_tables ipv6 nf_defrag_ipv6
> CPU: 1 PID: 289 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200224 #1
> Hardware name: NVIDIA Jetson TX1 Developer Kit (DT)
>
> ...
>
> Call trace:
> _regulator_put.part.28+0x158/0x160
> regulator_put+0x34/0x50
> devm_regulator_release+0x10/0x18
> release_nodes+0x12c/0x230
> devres_release_all+0x34/0x50
> really_probe+0x1c0/0x370
> driver_probe_device+0x58/0x100
> device_driver_attach+0x6c/0x78
> __driver_attach+0xb0/0xf0
> bus_for_each_dev+0x68/0xc8
> driver_attach+0x20/0x28
> bus_add_driver+0x160/0x1f0
> driver_register+0x60/0x110
> i2c_register_driver+0x40/0x80
> lp855x_driver_init+0x20/0x1000 [lp855x_bl]
> do_one_initcall+0x58/0x1a0
> do_init_module+0x54/0x1d0
> load_module+0x1d80/0x21c8
> __do_sys_finit_module+0xe8/0x100
> __arm64_sys_finit_module+0x18/0x20
> el0_svc_common.constprop.3+0xb0/0x168
> do_el0_svc+0x20/0x98
> el0_sync_handler+0xf4/0x1b0
> el0_sync+0x140/0x180
>
> Fix this by ensuring that the regulators are disabled, if enabled, on
> probe failure.
>
> Finally, ensure that the vddio regulator is disabled in the driver
> remove handler.
>
> Signed-off-by: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> drivers/video/backlight/lp855x_bl.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
Applied, thanks.
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-04-28 7:09 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-24 14:07 [PATCH] backlight: lp855x: Ensure regulators are disabled on probe failure Jon Hunter
2020-02-24 14:37 ` Daniel Thompson
[not found] ` <20200224143732.rreev3ypou26hvx3-SoAo7ar8mTX/PtFMR13I2A@public.gmane.org>
2020-03-13 14:16 ` Jon Hunter
[not found] ` <6ec74817-968b-ab5e-6566-56bbb9b67599-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-03-16 9:05 ` Daniel Thompson
2020-04-27 13:17 ` Jon Hunter
[not found] ` <20200224140748.2182-1-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-04-28 7:09 ` Lee Jones
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).