From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755206AbaEICZI (ORCPT ); Thu, 8 May 2014 22:25:08 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:16623 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751250AbaEICZF (ORCPT ); Thu, 8 May 2014 22:25:05 -0400 X-AuditID: cbfee690-b7fcd6d0000026e0-ec-536c3c7ea753 From: Jingoo Han To: "'Tony Lindgren'" Cc: "'Lee Jones'" , linux-kernel@vger.kernel.org, linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org, "'Bryan Wu'" , "'Jean-Christophe Plagniol-Villard'" , "'Tomi Valkeinen'" , "'Jingoo Han'" References: <20140509012454.GL2198@atomide.com> In-reply-to: <20140509012454.GL2198@atomide.com> Subject: Re: [PATCH] backlight: gpio-backlight: Fix warning when the GPIO is on a I2C chip Date: Fri, 09 May 2014 11:25:01 +0900 Message-id: <004701cf6b2d$e1a39c10$a4ead430$%han@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Thread-index: Ac9rJt5TfKiwEDkDS/iwMbK3nzGUeQABAHIw Content-language: ko X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrEIsWRmVeSWpSXmKPExsVy+t8zY906m5xgg+2bhSyO7pzIZHF54SVW i/tfjzJanOj7wGpxedccNovZS/pZLNY9fMFksX7+LTaL/Ve8HDg9vn2dxOKxc9Zddo9XF+6w eNy5tofNo2/LKkaP4ze2M3l83iQXwB7FZZOSmpNZllqkb5fAlbF98Vm2gqmSFYdaXjE2MM4X 7WLk4JAQMJHY+dyqi5ETyBSTuHBvPVsXIxeHkMAyRomujf/YIBImEsvWLmSHSCxilJj8uYsJ wvnNKHGrZTEzSBWbgJrEly+H2UFsESC7d9EMZpAiZoENTBKHzmwHSwgJ6Es8WdfCCGJzChhI vDzzlwnkDGGBGImXa91BwiwCqhL3P0xlBQnzCthKHFtfAxLmFRCU+DH5HguIzSygJbF+53Em CFteYvOat8wQz6hLPPqrC3GBkcTCHzOgSkQk9r14xwjxSy+HxLkOXYhNAhLfJh9igWiVldh0 gBmiRFLi4IobLBMYJWYhWTwLyeJZSBbPQrJhASPLKkbR1ILkguKk9CITveLE3OLSvHS95Pzc TYyQ+J6wg/HeAetDjMlA6ycyS4km5wPTQ15JvKGxmZGFqYmpsZG5pRlpwkrivGqPkoKEBNIT S1KzU1MLUovii0pzUosPMTJxcEo1MKpbs+lPXv6lKNfq3DnXW1Xrux71lbDouxdoTOQ+tEf4 ZMnW19ciGmLYS2du/c12Vk/29I/Cefd9RQz/p7w3iLwxMcBHbM3cMIm1b7bk3zxTc+TM7kmf k36ZTdn3e+MRd7VJbI951+2Jlvv88aai652O8zYyR+5UCR35PrVG9tmmS4b7rKoa/r1WYinO SDTUYi4qTgQAYZ1oqwUDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrIKsWRmVeSWpSXmKPExsVy+t9jAd06m5xgg4bnPBZHd05ksri88BKr xf2vRxktTvR9YLW4vGsOm8XsJf0sFusevmCyWD//FpvF/iteDpwe375OYvHYOesuu8erC3dY PO5c28Pm0bdlFaPH8RvbmTw+b5ILYI9qYLTJSE1MSS1SSM1Lzk/JzEu3VfIOjneONzUzMNQ1 tLQwV1LIS8xNtVVy8QnQdcvMATpNSaEsMacUKBSQWFyspG+HaUJoiJuuBUxjhK5vSBBcj5EB GkhYx5ixffFZtoKpkhWHWl4xNjDOF+1i5OSQEDCRWLZ2ITuELSZx4d56ti5GLg4hgUWMEpM/ dzFBOL8ZJW61LGYGqWITUJP48uUwWIcIkN27aAYzSBGzwAYmiUNntoMlhAT0JZ6sa2EEsTkF DCRenvkLNImDQ1ggRuLlWneQMIuAqsT9D1NZQcK8ArYSx9bXgIR5BQQlfky+xwJiMwtoSazf eZwJwpaX2LzmLTNIuYSAusSjv7oQFxhJLPwxA6pERGLfi3eMExiFZiGZNAvJpFlIJs1C0rKA kWUVo2hqQXJBcVJ6rqFecWJucWleul5yfu4mRnACeSa1g3Flg8UhRgEORiUe3hdTsoOFWBPL iitzDzFKcDArifDe0c8JFuJNSaysSi3Kjy8qzUktPsSYDPTnRGYp0eR8YHLLK4k3NDYxM7I0 MrMwMjE3J01YSZz3QKt1oJBAemJJanZqakFqEcwWJg5OqQbGzZkB7Narzmwq+nAg4OmxE0t6 f+z/zXTZ+i5HlazPRa6cKqvSqzfKH5efT3j1taBI4HuVxR+z9LbLWq9qJqvw5M9MWXZdxbX3 UFb6TDH1azWTrhw10DUwybiqkzDF5Vb3ep6N+1paGgJWfD+WsfjePUuVTray6vfhP8SuL7Q4 u0nf6ZWe8rrHSizFGYmGWsxFxYkAoSQW7GQDAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > [] (show_stack) from [] (dump_stack+0x80/0x9c) > [] (dump_stack) from [] (warn_slowpath_common+0x68/0x8c) > [] (warn_slowpath_common) from [] (warn_slowpath_null+0x1c/0x24) > [] (warn_slowpath_null) from [] (gpiod_set_raw_value+0x40/0x4c) > [] (gpiod_set_raw_value) from [] (gpio_backlight_update_status+0x4c/0x74) > [] (gpio_backlight_update_status) from [] (gpio_backlight_probe+0x168/0x254) > [] (gpio_backlight_probe) from [] (platform_drv_probe+0x18/0x48) > [] (platform_drv_probe) from [] (driver_probe_device+0x10c/0x238) > [] (driver_probe_device) from [] (bus_for_each_drv+0x44/0x8c) > [] (bus_for_each_drv) from [] (device_attach+0x74/0x8c) > [] (device_attach) from [] (bus_probe_device+0x88/0xb0) > [] (bus_probe_device) from [] (deferred_probe_work_func+0x64/0x94) > [] (deferred_probe_work_func) from [] (process_one_work+0x1b4/0x4bc) > [] (process_one_work) from [] (worker_thread+0x11c/0x398) > [] (worker_thread) from [] (kthread+0xc8/0xe4) > [] (kthread) from [] (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 > > --- 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; > } > --