* [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state
@ 2019-01-27 14:50 Chen-Yu Tsai
2019-01-28 10:38 ` Maxime Ripard
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Chen-Yu Tsai @ 2019-01-27 14:50 UTC (permalink / raw)
To: Thierry Reding, Lee Jones, Daniel Thompson, Jingoo Han
Cc: Chen-Yu Tsai, linux-pwm, dri-devel, linux-kernel, Maxime Ripard,
linux-arm-kernel
gpiod_get_value() gives out a warning if access to the underlying gpiochip
requires sleeping, which is common for I2C based chips:
WARNING: CPU: 0 PID: 77 at drivers/gpio/gpiolib.c:2500 gpiod_get_value+0xd0/0x100
Modules linked in:
CPU: 0 PID: 77 Comm: kworker/0:2 Not tainted 4.14.0-rc3-00589-gf32897915d48-dirty #90
Hardware name: Allwinner sun4i/sun5i Families
Workqueue: events deferred_probe_work_func
[<c010ec50>] (unwind_backtrace) from [<c010b784>] (show_stack+0x10/0x14)
[<c010b784>] (show_stack) from [<c0797224>] (dump_stack+0x88/0x9c)
[<c0797224>] (dump_stack) from [<c0125b08>] (__warn+0xe8/0x100)
[<c0125b08>] (__warn) from [<c0125bd0>] (warn_slowpath_null+0x20/0x28)
[<c0125bd0>] (warn_slowpath_null) from [<c037069c>] (gpiod_get_value+0xd0/0x100)
[<c037069c>] (gpiod_get_value) from [<c03778d0>] (pwm_backlight_probe+0x238/0x508)
[<c03778d0>] (pwm_backlight_probe) from [<c0411a2c>] (platform_drv_probe+0x50/0xac)
[<c0411a2c>] (platform_drv_probe) from [<c0410224>] (driver_probe_device+0x238/0x2e8)
[<c0410224>] (driver_probe_device) from [<c040e820>] (bus_for_each_drv+0x44/0x94)
[<c040e820>] (bus_for_each_drv) from [<c040ff0c>] (__device_attach+0xb0/0x114)
[<c040ff0c>] (__device_attach) from [<c040f4f8>] (bus_probe_device+0x84/0x8c)
[<c040f4f8>] (bus_probe_device) from [<c040f944>] (deferred_probe_work_func+0x50/0x14c)
[<c040f944>] (deferred_probe_work_func) from [<c013be84>] (process_one_work+0x1ec/0x414)
[<c013be84>] (process_one_work) from [<c013ce5c>] (worker_thread+0x2b0/0x5a0)
[<c013ce5c>] (worker_thread) from [<c0141908>] (kthread+0x14c/0x154)
[<c0141908>] (kthread) from [<c0107ab0>] (ret_from_fork+0x14/0x24)
This was missed in commit 0c9501f823a4 ("backlight: pwm_bl: Handle gpio
that can sleep"). The code was then moved to a separate function in
commit 7613c922315e ("backlight: pwm_bl: Move the checks for initial power
state to a separate function").
The only usage of gpiod_get_value() is during the probe stage, which is
safe to sleep in. Switch to gpiod_get_value_cansleep().
Fixes: 0c9501f823a4 ("backlight: pwm_bl: Handle gpio that can sleep")
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
---
drivers/video/backlight/pwm_bl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index feb90764a811..53b8ceea9bde 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -435,7 +435,7 @@ static int pwm_backlight_initial_power_state(const struct pwm_bl_data *pb)
*/
/* if the enable GPIO is disabled, do not enable the backlight */
- if (pb->enable_gpio && gpiod_get_value(pb->enable_gpio) == 0)
+ if (pb->enable_gpio && gpiod_get_value_cansleep(pb->enable_gpio) == 0)
return FB_BLANK_POWERDOWN;
/* The regulator is disabled, do not enable the backlight */
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state
2019-01-27 14:50 [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state Chen-Yu Tsai
@ 2019-01-28 10:38 ` Maxime Ripard
2019-01-28 11:05 ` Daniel Thompson
2019-01-30 13:36 ` Lee Jones
2 siblings, 0 replies; 4+ messages in thread
From: Maxime Ripard @ 2019-01-28 10:38 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: Thierry Reding, Lee Jones, Daniel Thompson, Jingoo Han,
linux-pwm, dri-devel, linux-kernel, linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 2548 bytes --]
On Sun, Jan 27, 2019 at 10:50:54PM +0800, Chen-Yu Tsai wrote:
> gpiod_get_value() gives out a warning if access to the underlying gpiochip
> requires sleeping, which is common for I2C based chips:
>
> WARNING: CPU: 0 PID: 77 at drivers/gpio/gpiolib.c:2500 gpiod_get_value+0xd0/0x100
> Modules linked in:
> CPU: 0 PID: 77 Comm: kworker/0:2 Not tainted 4.14.0-rc3-00589-gf32897915d48-dirty #90
> Hardware name: Allwinner sun4i/sun5i Families
> Workqueue: events deferred_probe_work_func
> [<c010ec50>] (unwind_backtrace) from [<c010b784>] (show_stack+0x10/0x14)
> [<c010b784>] (show_stack) from [<c0797224>] (dump_stack+0x88/0x9c)
> [<c0797224>] (dump_stack) from [<c0125b08>] (__warn+0xe8/0x100)
> [<c0125b08>] (__warn) from [<c0125bd0>] (warn_slowpath_null+0x20/0x28)
> [<c0125bd0>] (warn_slowpath_null) from [<c037069c>] (gpiod_get_value+0xd0/0x100)
> [<c037069c>] (gpiod_get_value) from [<c03778d0>] (pwm_backlight_probe+0x238/0x508)
> [<c03778d0>] (pwm_backlight_probe) from [<c0411a2c>] (platform_drv_probe+0x50/0xac)
> [<c0411a2c>] (platform_drv_probe) from [<c0410224>] (driver_probe_device+0x238/0x2e8)
> [<c0410224>] (driver_probe_device) from [<c040e820>] (bus_for_each_drv+0x44/0x94)
> [<c040e820>] (bus_for_each_drv) from [<c040ff0c>] (__device_attach+0xb0/0x114)
> [<c040ff0c>] (__device_attach) from [<c040f4f8>] (bus_probe_device+0x84/0x8c)
> [<c040f4f8>] (bus_probe_device) from [<c040f944>] (deferred_probe_work_func+0x50/0x14c)
> [<c040f944>] (deferred_probe_work_func) from [<c013be84>] (process_one_work+0x1ec/0x414)
> [<c013be84>] (process_one_work) from [<c013ce5c>] (worker_thread+0x2b0/0x5a0)
> [<c013ce5c>] (worker_thread) from [<c0141908>] (kthread+0x14c/0x154)
> [<c0141908>] (kthread) from [<c0107ab0>] (ret_from_fork+0x14/0x24)
>
> This was missed in commit 0c9501f823a4 ("backlight: pwm_bl: Handle gpio
> that can sleep"). The code was then moved to a separate function in
> commit 7613c922315e ("backlight: pwm_bl: Move the checks for initial power
> state to a separate function").
>
> The only usage of gpiod_get_value() is during the probe stage, which is
> safe to sleep in. Switch to gpiod_get_value_cansleep().
>
> Fixes: 0c9501f823a4 ("backlight: pwm_bl: Handle gpio that can sleep")
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Acked-by: Maxime Ripard <maxime.ripard@bootlin.com>
Maxime
--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state
2019-01-27 14:50 [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state Chen-Yu Tsai
2019-01-28 10:38 ` Maxime Ripard
@ 2019-01-28 11:05 ` Daniel Thompson
2019-01-30 13:36 ` Lee Jones
2 siblings, 0 replies; 4+ messages in thread
From: Daniel Thompson @ 2019-01-28 11:05 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: Thierry Reding, Lee Jones, Jingoo Han, linux-pwm, dri-devel,
linux-kernel, Maxime Ripard, linux-arm-kernel
On Sun, Jan 27, 2019 at 10:50:54PM +0800, Chen-Yu Tsai wrote:
> gpiod_get_value() gives out a warning if access to the underlying gpiochip
> requires sleeping, which is common for I2C based chips:
>
> WARNING: CPU: 0 PID: 77 at drivers/gpio/gpiolib.c:2500 gpiod_get_value+0xd0/0x100
> Modules linked in:
> CPU: 0 PID: 77 Comm: kworker/0:2 Not tainted 4.14.0-rc3-00589-gf32897915d48-dirty #90
> Hardware name: Allwinner sun4i/sun5i Families
> Workqueue: events deferred_probe_work_func
> [<c010ec50>] (unwind_backtrace) from [<c010b784>] (show_stack+0x10/0x14)
> [<c010b784>] (show_stack) from [<c0797224>] (dump_stack+0x88/0x9c)
> [<c0797224>] (dump_stack) from [<c0125b08>] (__warn+0xe8/0x100)
> [<c0125b08>] (__warn) from [<c0125bd0>] (warn_slowpath_null+0x20/0x28)
> [<c0125bd0>] (warn_slowpath_null) from [<c037069c>] (gpiod_get_value+0xd0/0x100)
> [<c037069c>] (gpiod_get_value) from [<c03778d0>] (pwm_backlight_probe+0x238/0x508)
> [<c03778d0>] (pwm_backlight_probe) from [<c0411a2c>] (platform_drv_probe+0x50/0xac)
> [<c0411a2c>] (platform_drv_probe) from [<c0410224>] (driver_probe_device+0x238/0x2e8)
> [<c0410224>] (driver_probe_device) from [<c040e820>] (bus_for_each_drv+0x44/0x94)
> [<c040e820>] (bus_for_each_drv) from [<c040ff0c>] (__device_attach+0xb0/0x114)
> [<c040ff0c>] (__device_attach) from [<c040f4f8>] (bus_probe_device+0x84/0x8c)
> [<c040f4f8>] (bus_probe_device) from [<c040f944>] (deferred_probe_work_func+0x50/0x14c)
> [<c040f944>] (deferred_probe_work_func) from [<c013be84>] (process_one_work+0x1ec/0x414)
> [<c013be84>] (process_one_work) from [<c013ce5c>] (worker_thread+0x2b0/0x5a0)
> [<c013ce5c>] (worker_thread) from [<c0141908>] (kthread+0x14c/0x154)
> [<c0141908>] (kthread) from [<c0107ab0>] (ret_from_fork+0x14/0x24)
>
> This was missed in commit 0c9501f823a4 ("backlight: pwm_bl: Handle gpio
> that can sleep"). The code was then moved to a separate function in
> commit 7613c922315e ("backlight: pwm_bl: Move the checks for initial power
> state to a separate function").
>
> The only usage of gpiod_get_value() is during the probe stage, which is
> safe to sleep in. Switch to gpiod_get_value_cansleep().
>
> Fixes: 0c9501f823a4 ("backlight: pwm_bl: Handle gpio that can sleep")
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
Daniel.
> ---
> drivers/video/backlight/pwm_bl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
> index feb90764a811..53b8ceea9bde 100644
> --- a/drivers/video/backlight/pwm_bl.c
> +++ b/drivers/video/backlight/pwm_bl.c
> @@ -435,7 +435,7 @@ static int pwm_backlight_initial_power_state(const struct pwm_bl_data *pb)
> */
>
> /* if the enable GPIO is disabled, do not enable the backlight */
> - if (pb->enable_gpio && gpiod_get_value(pb->enable_gpio) == 0)
> + if (pb->enable_gpio && gpiod_get_value_cansleep(pb->enable_gpio) == 0)
> return FB_BLANK_POWERDOWN;
>
> /* The regulator is disabled, do not enable the backlight */
> --
> 2.20.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state
2019-01-27 14:50 [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state Chen-Yu Tsai
2019-01-28 10:38 ` Maxime Ripard
2019-01-28 11:05 ` Daniel Thompson
@ 2019-01-30 13:36 ` Lee Jones
2 siblings, 0 replies; 4+ messages in thread
From: Lee Jones @ 2019-01-30 13:36 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: Thierry Reding, Daniel Thompson, Jingoo Han, linux-pwm,
dri-devel, linux-kernel, Maxime Ripard, linux-arm-kernel
On Sun, 27 Jan 2019, Chen-Yu Tsai wrote:
> gpiod_get_value() gives out a warning if access to the underlying gpiochip
> requires sleeping, which is common for I2C based chips:
>
> WARNING: CPU: 0 PID: 77 at drivers/gpio/gpiolib.c:2500 gpiod_get_value+0xd0/0x100
> Modules linked in:
> CPU: 0 PID: 77 Comm: kworker/0:2 Not tainted 4.14.0-rc3-00589-gf32897915d48-dirty #90
> Hardware name: Allwinner sun4i/sun5i Families
> Workqueue: events deferred_probe_work_func
> [<c010ec50>] (unwind_backtrace) from [<c010b784>] (show_stack+0x10/0x14)
> [<c010b784>] (show_stack) from [<c0797224>] (dump_stack+0x88/0x9c)
> [<c0797224>] (dump_stack) from [<c0125b08>] (__warn+0xe8/0x100)
> [<c0125b08>] (__warn) from [<c0125bd0>] (warn_slowpath_null+0x20/0x28)
> [<c0125bd0>] (warn_slowpath_null) from [<c037069c>] (gpiod_get_value+0xd0/0x100)
> [<c037069c>] (gpiod_get_value) from [<c03778d0>] (pwm_backlight_probe+0x238/0x508)
> [<c03778d0>] (pwm_backlight_probe) from [<c0411a2c>] (platform_drv_probe+0x50/0xac)
> [<c0411a2c>] (platform_drv_probe) from [<c0410224>] (driver_probe_device+0x238/0x2e8)
> [<c0410224>] (driver_probe_device) from [<c040e820>] (bus_for_each_drv+0x44/0x94)
> [<c040e820>] (bus_for_each_drv) from [<c040ff0c>] (__device_attach+0xb0/0x114)
> [<c040ff0c>] (__device_attach) from [<c040f4f8>] (bus_probe_device+0x84/0x8c)
> [<c040f4f8>] (bus_probe_device) from [<c040f944>] (deferred_probe_work_func+0x50/0x14c)
> [<c040f944>] (deferred_probe_work_func) from [<c013be84>] (process_one_work+0x1ec/0x414)
> [<c013be84>] (process_one_work) from [<c013ce5c>] (worker_thread+0x2b0/0x5a0)
> [<c013ce5c>] (worker_thread) from [<c0141908>] (kthread+0x14c/0x154)
> [<c0141908>] (kthread) from [<c0107ab0>] (ret_from_fork+0x14/0x24)
>
> This was missed in commit 0c9501f823a4 ("backlight: pwm_bl: Handle gpio
> that can sleep"). The code was then moved to a separate function in
> commit 7613c922315e ("backlight: pwm_bl: Move the checks for initial power
> state to a separate function").
>
> The only usage of gpiod_get_value() is during the probe stage, which is
> safe to sleep in. Switch to gpiod_get_value_cansleep().
>
> Fixes: 0c9501f823a4 ("backlight: pwm_bl: Handle gpio that can sleep")
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
> ---
> drivers/video/backlight/pwm_bl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
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] 4+ messages in thread
end of thread, other threads:[~2019-01-30 13:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-27 14:50 [PATCH] backlight: pwm_bl: Use gpiod_get_value_cansleep() to get initial state Chen-Yu Tsai
2019-01-28 10:38 ` Maxime Ripard
2019-01-28 11:05 ` Daniel Thompson
2019-01-30 13:36 ` 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).