Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-19 Thread Lee Jones
 If the GPIO for the backlight is on an I2C chip, we currently
 get nasty warnings like this during the boot:
 
 WARNING: CPU: 0 PID: 6 at drivers/gpio/gpiolib.c:2364 
 gpiod_set_raw_value+0x40/0x4c()
 Modules linked in:
 CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 3.15.0-rc4-12393-gcde9f4e #400
 Workqueue: deferwq deferred_probe_work_func
 [c0014cbc] (unwind_backtrace) from [c001191c] (show_stack+0x10/0x14)
 [c001191c] (show_stack) from [c0566ae0] (dump_stack+0x80/0x9c)
 [c0566ae0] (dump_stack) from [c003f61c] (warn_slowpath_common+0x68/0x8c)
 [c003f61c] (warn_slowpath_common) from [c003f65c] 
 (warn_slowpath_null+0x1c/0x24)
 [c003f65c] (warn_slowpath_null) from [c02f7e10] 
 (gpiod_set_raw_value+0x40/0x4c)
 [c02f7e10] (gpiod_set_raw_value) from [c0308fbc] 
 (gpio_backlight_update_status+0x4c/0x74)
 [c0308fbc] (gpio_backlight_update_status) from [c030914c] 
 (gpio_backlight_probe+0x168/0x254)
 [c030914c] (gpio_backlight_probe) from [c0378fa8] 
 (platform_drv_probe+0x18/0x48)
 [c0378fa8] (platform_drv_probe) from [c0377c40] 
 (driver_probe_device+0x10c/0x238)
 [c0377c40] (driver_probe_device) from [c0376330] 
 (bus_for_each_drv+0x44/0x8c)
 [c0376330] (bus_for_each_drv) from [c0377afc] (device_attach+0x74/0x8c)
 [c0377afc] (device_attach) from [c03771c4] (bus_probe_device+0x88/0xb0)
 [c03771c4] (bus_probe_device) from [c03775c8] 
 (deferred_probe_work_func+0x64/0x94)
 [c03775c8] (deferred_probe_work_func) from [c00572e8] 
 (process_one_work+0x1b4/0x4bc)
 [c00572e8] (process_one_work) from [c00579d0] (worker_thread+0x11c/0x398)
 [c00579d0] (worker_thread) from [c005dfd8] (kthread+0xc8/0xe4)
 [c005dfd8] (kthread) from [c000e768] (ret_from_fork+0x14/0x2c)
 
 Fix this by using gpio_set_value_cansleep() as suggested in
 drivers/gpio/gpiolib.c:2364. This is what the other backlight drivers
 are also doing.
 
 Signed-off-by: Tony Lindgren t...@atomide.com

Applied, thanks.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-12 Thread Jingoo Han
On Friday, May 09, 2014 10:25 AM, Tony Lindgren wrote:
 
 If the GPIO for the backlight is on an I2C chip, we currently
 get nasty warnings like this during the boot:
 
 WARNING: CPU: 0 PID: 6 at drivers/gpio/gpiolib.c:2364 
 gpiod_set_raw_value+0x40/0x4c()
 Modules linked in:
 CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 3.15.0-rc4-12393-gcde9f4e #400
 Workqueue: deferwq deferred_probe_work_func
 [c0014cbc] (unwind_backtrace) from [c001191c] (show_stack+0x10/0x14)
 [c001191c] (show_stack) from [c0566ae0] (dump_stack+0x80/0x9c)
 [c0566ae0] (dump_stack) from [c003f61c] (warn_slowpath_common+0x68/0x8c)
 [c003f61c] (warn_slowpath_common) from [c003f65c] 
 (warn_slowpath_null+0x1c/0x24)
 [c003f65c] (warn_slowpath_null) from [c02f7e10] 
 (gpiod_set_raw_value+0x40/0x4c)
 [c02f7e10] (gpiod_set_raw_value) from [c0308fbc] 
 (gpio_backlight_update_status+0x4c/0x74)
 [c0308fbc] (gpio_backlight_update_status) from [c030914c] 
 (gpio_backlight_probe+0x168/0x254)
 [c030914c] (gpio_backlight_probe) from [c0378fa8] 
 (platform_drv_probe+0x18/0x48)
 [c0378fa8] (platform_drv_probe) from [c0377c40] 
 (driver_probe_device+0x10c/0x238)
 [c0377c40] (driver_probe_device) from [c0376330] 
 (bus_for_each_drv+0x44/0x8c)
 [c0376330] (bus_for_each_drv) from [c0377afc] (device_attach+0x74/0x8c)
 [c0377afc] (device_attach) from [c03771c4] (bus_probe_device+0x88/0xb0)
 [c03771c4] (bus_probe_device) from [c03775c8] 
 (deferred_probe_work_func+0x64/0x94)
 [c03775c8] (deferred_probe_work_func) from [c00572e8] 
 (process_one_work+0x1b4/0x4bc)
 [c00572e8] (process_one_work) from [c00579d0] (worker_thread+0x11c/0x398)
 [c00579d0] (worker_thread) from [c005dfd8] (kthread+0xc8/0xe4)
 [c005dfd8] (kthread) from [c000e768] (ret_from_fork+0x14/0x2c)
 
 Fix this by using gpio_set_value_cansleep() as suggested in
 drivers/gpio/gpiolib.c:2364. This is what the other backlight drivers
 are also doing.
 
 Signed-off-by: Tony Lindgren t...@atomide.com

(+cc Linus Walleij, Alexandre Courbot, Russell King)

Hi Lee Jones,

Would you apply this patch into backlight git tree?
If you have other opinions, please let us know. :-)
Thank you.

Acked-by: Jingoo Han jg1@samsung.com

Best regards,
Jingoo Han

 
 --- a/drivers/video/backlight/gpio_backlight.c
 +++ b/drivers/video/backlight/gpio_backlight.c
 @@ -38,7 +38,8 @@ static int gpio_backlight_update_status(struct 
 backlight_device *bl)
   bl-props.state  (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))
   brightness = 0;
 
 - gpio_set_value(gbl-gpio, brightness ? gbl-active : !gbl-active);
 + gpio_set_value_cansleep(gbl-gpio,
 + brightness ? gbl-active : !gbl-active);
 
   return 0;
  }

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-09 Thread Linus Walleij
On Fri, May 9, 2014 at 5:42 AM, Jingoo Han jg1@samsung.com wrote:

 Linus Walleij,
 Is there any reason to keep these two functions such as
 gpiod_set_raw_value_cansleep() and gpiod_set_raw_value()?

Yes, the former can *not* be called from interrupt context,
and thus erroneous usage can be detected with runtime checks.

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-08 Thread Tony Lindgren
If the GPIO for the backlight is on an I2C chip, we currently
get nasty warnings like this during the boot:

WARNING: CPU: 0 PID: 6 at drivers/gpio/gpiolib.c:2364 
gpiod_set_raw_value+0x40/0x4c()
Modules linked in:
CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 3.15.0-rc4-12393-gcde9f4e #400
Workqueue: deferwq deferred_probe_work_func
[c0014cbc] (unwind_backtrace) from [c001191c] (show_stack+0x10/0x14)
[c001191c] (show_stack) from [c0566ae0] (dump_stack+0x80/0x9c)
[c0566ae0] (dump_stack) from [c003f61c] (warn_slowpath_common+0x68/0x8c)
[c003f61c] (warn_slowpath_common) from [c003f65c] 
(warn_slowpath_null+0x1c/0x24)
[c003f65c] (warn_slowpath_null) from [c02f7e10] 
(gpiod_set_raw_value+0x40/0x4c)
[c02f7e10] (gpiod_set_raw_value) from [c0308fbc] 
(gpio_backlight_update_status+0x4c/0x74)
[c0308fbc] (gpio_backlight_update_status) from [c030914c] 
(gpio_backlight_probe+0x168/0x254)
[c030914c] (gpio_backlight_probe) from [c0378fa8] 
(platform_drv_probe+0x18/0x48)
[c0378fa8] (platform_drv_probe) from [c0377c40] 
(driver_probe_device+0x10c/0x238)
[c0377c40] (driver_probe_device) from [c0376330] 
(bus_for_each_drv+0x44/0x8c)
[c0376330] (bus_for_each_drv) from [c0377afc] (device_attach+0x74/0x8c)
[c0377afc] (device_attach) from [c03771c4] (bus_probe_device+0x88/0xb0)
[c03771c4] (bus_probe_device) from [c03775c8] 
(deferred_probe_work_func+0x64/0x94)
[c03775c8] (deferred_probe_work_func) from [c00572e8] 
(process_one_work+0x1b4/0x4bc)
[c00572e8] (process_one_work) from [c00579d0] (worker_thread+0x11c/0x398)
[c00579d0] (worker_thread) from [c005dfd8] (kthread+0xc8/0xe4)
[c005dfd8] (kthread) from [c000e768] (ret_from_fork+0x14/0x2c)

Fix this by using gpio_set_value_cansleep() as suggested in
drivers/gpio/gpiolib.c:2364. This is what the other backlight drivers
are also doing.

Signed-off-by: Tony Lindgren t...@atomide.com

--- a/drivers/video/backlight/gpio_backlight.c
+++ b/drivers/video/backlight/gpio_backlight.c
@@ -38,7 +38,8 @@ static int gpio_backlight_update_status(struct 
backlight_device *bl)
bl-props.state  (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))
brightness = 0;
 
-   gpio_set_value(gbl-gpio, brightness ? gbl-active : !gbl-active);
+   gpio_set_value_cansleep(gbl-gpio,
+   brightness ? gbl-active : !gbl-active);
 
return 0;
 }
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-08 Thread Jingoo Han
On Friday, May 09, 2014 10:25 AM, Lee Jones wrote:
 
 If the GPIO for the backlight is on an I2C chip, we currently
 get nasty warnings like this during the boot:
 
 WARNING: CPU: 0 PID: 6 at drivers/gpio/gpiolib.c:2364 
 gpiod_set_raw_value+0x40/0x4c()
 Modules linked in:
 CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 3.15.0-rc4-12393-gcde9f4e #400
 Workqueue: deferwq deferred_probe_work_func
 [c0014cbc] (unwind_backtrace) from [c001191c] (show_stack+0x10/0x14)
 [c001191c] (show_stack) from [c0566ae0] (dump_stack+0x80/0x9c)
 [c0566ae0] (dump_stack) from [c003f61c] (warn_slowpath_common+0x68/0x8c)
 [c003f61c] (warn_slowpath_common) from [c003f65c] 
 (warn_slowpath_null+0x1c/0x24)
 [c003f65c] (warn_slowpath_null) from [c02f7e10] 
 (gpiod_set_raw_value+0x40/0x4c)
 [c02f7e10] (gpiod_set_raw_value) from [c0308fbc] 
 (gpio_backlight_update_status+0x4c/0x74)
 [c0308fbc] (gpio_backlight_update_status) from [c030914c] 
 (gpio_backlight_probe+0x168/0x254)
 [c030914c] (gpio_backlight_probe) from [c0378fa8] 
 (platform_drv_probe+0x18/0x48)
 [c0378fa8] (platform_drv_probe) from [c0377c40] 
 (driver_probe_device+0x10c/0x238)
 [c0377c40] (driver_probe_device) from [c0376330] 
 (bus_for_each_drv+0x44/0x8c)
 [c0376330] (bus_for_each_drv) from [c0377afc] (device_attach+0x74/0x8c)
 [c0377afc] (device_attach) from [c03771c4] (bus_probe_device+0x88/0xb0)
 [c03771c4] (bus_probe_device) from [c03775c8] 
 (deferred_probe_work_func+0x64/0x94)
 [c03775c8] (deferred_probe_work_func) from [c00572e8] 
 (process_one_work+0x1b4/0x4bc)
 [c00572e8] (process_one_work) from [c00579d0] (worker_thread+0x11c/0x398)
 [c00579d0] (worker_thread) from [c005dfd8] (kthread+0xc8/0xe4)
 [c005dfd8] (kthread) from [c000e768] (ret_from_fork+0x14/0x2c)
 
 Fix this by using gpio_set_value_cansleep() as suggested in
 drivers/gpio/gpiolib.c:2364. This is what the other backlight drivers
 are also doing.

OK, I see.
However, gpio_backlight drive can be used by a lot of gpio drivers.
In some cases, 'can_sleep' is 'false' and gpio_set_value_cansleep()
is unnecessary.

In my opinion, gpio_set_value_cansleep() or gpio_set_value() can be
called selectively by 'can_sleep' value.

How about the following?

-   gpio_set_value(gbl-gpio, brightness ? gbl-active : !gbl-active);
+   if (gpio_cansleep(gbl-gpio))
+   gpio_set_value_cansleep(gbl-gpio,
+   brightness ? gbl-active : 
!gbl-active);
+   else
+   gpio_set_value(gbl-gpio, brightness ? gbl-active : 
!gbl-active);

Best regards,
Jingoo Han

 
 Signed-off-by: Tony Lindgren t...@atomide.com
 
 --- a/drivers/video/backlight/gpio_backlight.c
 +++ b/drivers/video/backlight/gpio_backlight.c
 @@ -38,7 +38,8 @@ static int gpio_backlight_update_status(struct 
 backlight_device *bl)
   bl-props.state  (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))
   brightness = 0;
 
 - gpio_set_value(gbl-gpio, brightness ? gbl-active : !gbl-active);
 + gpio_set_value_cansleep(gbl-gpio,
 + brightness ? gbl-active : !gbl-active);
 
   return 0;
  }
 --

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-08 Thread Tony Lindgren
* Jingoo Han jg1@samsung.com [140508 19:25]:
 On Friday, May 09, 2014 10:25 AM, Lee Jones wrote:
  
  If the GPIO for the backlight is on an I2C chip, we currently
  get nasty warnings like this during the boot:
  
  WARNING: CPU: 0 PID: 6 at drivers/gpio/gpiolib.c:2364 
  gpiod_set_raw_value+0x40/0x4c()
  Modules linked in:
  CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 3.15.0-rc4-12393-gcde9f4e #400
  Workqueue: deferwq deferred_probe_work_func
  [c0014cbc] (unwind_backtrace) from [c001191c] (show_stack+0x10/0x14)
  [c001191c] (show_stack) from [c0566ae0] (dump_stack+0x80/0x9c)
  [c0566ae0] (dump_stack) from [c003f61c] (warn_slowpath_common+0x68/0x8c)
  [c003f61c] (warn_slowpath_common) from [c003f65c] 
  (warn_slowpath_null+0x1c/0x24)
  [c003f65c] (warn_slowpath_null) from [c02f7e10] 
  (gpiod_set_raw_value+0x40/0x4c)
  [c02f7e10] (gpiod_set_raw_value) from [c0308fbc] 
  (gpio_backlight_update_status+0x4c/0x74)
  [c0308fbc] (gpio_backlight_update_status) from [c030914c] 
  (gpio_backlight_probe+0x168/0x254)
  [c030914c] (gpio_backlight_probe) from [c0378fa8] 
  (platform_drv_probe+0x18/0x48)
  [c0378fa8] (platform_drv_probe) from [c0377c40] 
  (driver_probe_device+0x10c/0x238)
  [c0377c40] (driver_probe_device) from [c0376330] 
  (bus_for_each_drv+0x44/0x8c)
  [c0376330] (bus_for_each_drv) from [c0377afc] (device_attach+0x74/0x8c)
  [c0377afc] (device_attach) from [c03771c4] (bus_probe_device+0x88/0xb0)
  [c03771c4] (bus_probe_device) from [c03775c8] 
  (deferred_probe_work_func+0x64/0x94)
  [c03775c8] (deferred_probe_work_func) from [c00572e8] 
  (process_one_work+0x1b4/0x4bc)
  [c00572e8] (process_one_work) from [c00579d0] 
  (worker_thread+0x11c/0x398)
  [c00579d0] (worker_thread) from [c005dfd8] (kthread+0xc8/0xe4)
  [c005dfd8] (kthread) from [c000e768] (ret_from_fork+0x14/0x2c)
  
  Fix this by using gpio_set_value_cansleep() as suggested in
  drivers/gpio/gpiolib.c:2364. This is what the other backlight drivers
  are also doing.
 
 OK, I see.
 However, gpio_backlight drive can be used by a lot of gpio drivers.
 In some cases, 'can_sleep' is 'false' and gpio_set_value_cansleep()
 is unnecessary.
 
 In my opinion, gpio_set_value_cansleep() or gpio_set_value() can be
 called selectively by 'can_sleep' value.
 
 How about the following?
 
 -   gpio_set_value(gbl-gpio, brightness ? gbl-active : !gbl-active);
 +   if (gpio_cansleep(gbl-gpio))
 +   gpio_set_value_cansleep(gbl-gpio,
 +   brightness ? gbl-active : 
 !gbl-active);
 +   else
 +   gpio_set_value(gbl-gpio, brightness ? gbl-active : 
 !gbl-active);

It should be always fine to use gpio_set_value_cansleep(), see your
old thread from few years ago related to another backlight driver:

https://lkml.org/lkml/2012/12/5/343

Regards,

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip

2014-05-08 Thread Jingoo Han
On Friday, May 09, 2014 12:09 PM, Tony Lindgren wrote:
 On Friday, May 09, 2014 11:25 AM, Jingoo Han wrote:
  On Friday, May 09, 2014 10:25 AM, Lee Jones wrote:
  
   If the GPIO for the backlight is on an I2C chip, we currently
   get nasty warnings like this during the boot:
  
   WARNING: CPU: 0 PID: 6 at drivers/gpio/gpiolib.c:2364 
   gpiod_set_raw_value+0x40/0x4c()
   Modules linked in:
   CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 3.15.0-rc4-12393-gcde9f4e 
   #400
   Workqueue: deferwq deferred_probe_work_func
   [c0014cbc] (unwind_backtrace) from [c001191c] (show_stack+0x10/0x14)
   [c001191c] (show_stack) from [c0566ae0] (dump_stack+0x80/0x9c)
   [c0566ae0] (dump_stack) from [c003f61c] 
   (warn_slowpath_common+0x68/0x8c)
   [c003f61c] (warn_slowpath_common) from [c003f65c] 
   (warn_slowpath_null+0x1c/0x24)
   [c003f65c] (warn_slowpath_null) from [c02f7e10] 
   (gpiod_set_raw_value+0x40/0x4c)
   [c02f7e10] (gpiod_set_raw_value) from [c0308fbc] 
   (gpio_backlight_update_status+0x4c/0x74)
   [c0308fbc] (gpio_backlight_update_status) from [c030914c] 
   (gpio_backlight_probe+0x168/0x254)
   [c030914c] (gpio_backlight_probe) from [c0378fa8] 
   (platform_drv_probe+0x18/0x48)
   [c0378fa8] (platform_drv_probe) from [c0377c40] 
   (driver_probe_device+0x10c/0x238)
   [c0377c40] (driver_probe_device) from [c0376330] 
   (bus_for_each_drv+0x44/0x8c)
   [c0376330] (bus_for_each_drv) from [c0377afc] 
   (device_attach+0x74/0x8c)
   [c0377afc] (device_attach) from [c03771c4] 
   (bus_probe_device+0x88/0xb0)
   [c03771c4] (bus_probe_device) from [c03775c8] 
   (deferred_probe_work_func+0x64/0x94)
   [c03775c8] (deferred_probe_work_func) from [c00572e8] 
   (process_one_work+0x1b4/0x4bc)
   [c00572e8] (process_one_work) from [c00579d0] 
   (worker_thread+0x11c/0x398)
   [c00579d0] (worker_thread) from [c005dfd8] (kthread+0xc8/0xe4)
   [c005dfd8] (kthread) from [c000e768] (ret_from_fork+0x14/0x2c)
  
   Fix this by using gpio_set_value_cansleep() as suggested in
   drivers/gpio/gpiolib.c:2364. This is what the other backlight drivers
   are also doing.
 
  OK, I see.
  However, gpio_backlight drive can be used by a lot of gpio drivers.
  In some cases, 'can_sleep' is 'false' and gpio_set_value_cansleep()
  is unnecessary.
 
  In my opinion, gpio_set_value_cansleep() or gpio_set_value() can be
  called selectively by 'can_sleep' value.
 
  How about the following?
 
  -   gpio_set_value(gbl-gpio, brightness ? gbl-active : !gbl-active);
  +   if (gpio_cansleep(gbl-gpio))
  +   gpio_set_value_cansleep(gbl-gpio,
  +   brightness ? gbl-active : 
  !gbl-active);
  +   else
  +   gpio_set_value(gbl-gpio, brightness ? gbl-active : 
  !gbl-active);
 
 It should be always fine to use gpio_set_value_cansleep(), see your
 old thread from few years ago related to another backlight driver:
 
 https://lkml.org/lkml/2012/12/5/343

(+cc Linus Walleij, Alexandre Courbot, Russell King)

OK, I see.

gpio_set_value_cansleep() calls gpiod_set_raw_value_cansleep(),
and gpio_set_value() calls gpiod_set_raw_value() as below.

./drivers/gpio/gpiolib.c
void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)
{
might_sleep_if(extra_checks);
if (!desc)
return;
_gpiod_set_raw_value(desc, value);
}
EXPORT_SYMBOL_GPL(gpiod_set_raw_value_cansleep);

./drivers/gpio/gpiolib.c
void gpiod_set_raw_value(struct gpio_desc *desc, int value)
{
if (!desc)
return;
/* Should be using gpio_set_value_cansleep() */
WARN_ON(desc-chip-can_sleep);
_gpiod_set_raw_value(desc, value);
}
EXPORT_SYMBOL_GPL(gpiod_set_raw_value);

Then, the difference between gpio_set_value_cansleep() or
gpio_set_value() is whether might_sleep_if(extra_checks) is
called or not.

So, you said that It should be always fine to use 
gpio_set_value_cansleep(), right?

Linus Walleij,
Is there any reason to keep these two functions such as
gpiod_set_raw_value_cansleep() and gpiod_set_raw_value()?

Best regards,
Jingoo Han

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html