linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys
@ 2016-11-16 11:54 Sudeep Holla
  2016-11-16 12:43 ` kbuild test robot
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Sudeep Holla @ 2016-11-16 11:54 UTC (permalink / raw)
  To: linux-input, Dmitry Torokhov
  Cc: Sudeep Holla, linux-kernel, Linus Walleij, Geert Uytterhoeven,
	Mika Westerberg

Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
properties") switched to use generic device properties for GPIO keys and
commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
switched from legacy GPIO numbers to GPIO descriptors.

Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
to set the GPIO direction as input. However devm_get_gpiod_from_child
doesn't have such provisions and hence fwnode_get_named_gpiod can't set
it as input.

This breaks few platforms with the following error:
" gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
  unable to lock HW IRQ <n> for IRQ
  genirq: Failed to request resources for POWER (irq <x>) on irqchip
  gpio_keys: Unable to claim irq <x>; error -22
  gpio-keys: probe failed with error -22 "

This patch fixes the issue by setting input direction explicitly for
gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
for the legacy gpios and merges into single gpiod_direction_input call.

Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/input/keyboard/gpio_keys.c        | 5 +++--
 drivers/input/keyboard/gpio_keys_polled.c | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

Hi Dmitry,

The other option would be to pass the flag explicitly and add support to
handle it in the path devm_get_gpiod_from_child would take.

Let me know your opinion.

Regards,
Sudeep

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 5576f2ae0b71..238b7be9ca98 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -502,8 +502,6 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 		 * Legacy GPIO number, so request the GPIO here and
 		 * convert it to descriptor.
 		 */
-		unsigned flags = GPIOF_IN;
-
 		if (button->active_low)
 			flags |= GPIOF_ACTIVE_LOW;

@@ -521,6 +519,9 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 	}

 	if (bdata->gpiod) {
+		/* set the GPIO direction to input */
+		gpiod_direction_input(bdata->gpiod);
+
 		if (button->debounce_interval) {
 			error = gpiod_set_debounce(bdata->gpiod,
 					button->debounce_interval * 1000);
diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
index 72b350315d43..2edff18f0758 100644
--- a/drivers/input/keyboard/gpio_keys_polled.c
+++ b/drivers/input/keyboard/gpio_keys_polled.c
@@ -319,8 +319,6 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 			 * Legacy GPIO number so request the GPIO here and
 			 * convert it to descriptor.
 			 */
-			unsigned flags = GPIOF_IN;
-
 			if (button->active_low)
 				flags |= GPIOF_ACTIVE_LOW;

@@ -342,6 +340,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 			}
 		}

+		/* set the GPIO direction to input */
+		gpiod_direction_input(bdata->gpiod);
+
 		bdata->last_state = -1;
 		bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
 						pdata->poll_interval);
--
2.7.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 11:54 [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys Sudeep Holla
@ 2016-11-16 12:43 ` kbuild test robot
  2016-11-16 12:48 ` kbuild test robot
  2016-11-16 13:42 ` [PATCH v2 " Sudeep Holla
  2 siblings, 0 replies; 11+ messages in thread
From: kbuild test robot @ 2016-11-16 12:43 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: kbuild-all, linux-input, Dmitry Torokhov, Sudeep Holla,
	linux-kernel, Linus Walleij, Geert Uytterhoeven, Mika Westerberg

[-- Attachment #1: Type: text/plain, Size: 2022 bytes --]

Hi Sudeep,

[auto build test ERROR on next-20161116]

url:    https://github.com/0day-ci/linux/commits/Sudeep-Holla/Input-gpio_keys-set-input-direction-explicitly-for-gpio-keys/20161116-202319
config: x86_64-randconfig-x001-201646 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/input/keyboard/gpio_keys_polled.c: In function 'gpio_keys_polled_probe':
>> drivers/input/keyboard/gpio_keys_polled.c:323:5: error: 'flags' undeclared (first use in this function)
        flags |= GPIOF_ACTIVE_LOW;
        ^~~~~
   drivers/input/keyboard/gpio_keys_polled.c:323:5: note: each undeclared identifier is reported only once for each function it appears in

vim +/flags +323 drivers/input/keyboard/gpio_keys_polled.c

0f78ba96 Dmitry Torokhov 2016-02-23  317  		} else if (gpio_is_valid(button->gpio)) {
633a21d8 Aaron Lu        2014-10-21  318  			/*
633a21d8 Aaron Lu        2014-10-21  319  			 * Legacy GPIO number so request the GPIO here and
633a21d8 Aaron Lu        2014-10-21  320  			 * convert it to descriptor.
633a21d8 Aaron Lu        2014-10-21  321  			 */
633a21d8 Aaron Lu        2014-10-21  322  			if (button->active_low)
633a21d8 Aaron Lu        2014-10-21 @323  				flags |= GPIOF_ACTIVE_LOW;
633a21d8 Aaron Lu        2014-10-21  324  
633a21d8 Aaron Lu        2014-10-21  325  			error = devm_gpio_request_one(&pdev->dev, button->gpio,
633a21d8 Aaron Lu        2014-10-21  326  					flags, button->desc ? : DRV_NAME);

:::::: The code at line 323 was first introduced by commit
:::::: 633a21d80b4a2cd648aa2dacdb22494ffb2f28f0 input: gpio_keys_polled: Add support for GPIO descriptors

:::::: TO: Aaron Lu <aaron.lu@intel.com>
:::::: CC: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26031 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 11:54 [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys Sudeep Holla
  2016-11-16 12:43 ` kbuild test robot
@ 2016-11-16 12:48 ` kbuild test robot
  2016-11-16 13:42 ` [PATCH v2 " Sudeep Holla
  2 siblings, 0 replies; 11+ messages in thread
From: kbuild test robot @ 2016-11-16 12:48 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: kbuild-all, linux-input, Dmitry Torokhov, Sudeep Holla,
	linux-kernel, Linus Walleij, Geert Uytterhoeven, Mika Westerberg

[-- Attachment #1: Type: text/plain, Size: 2003 bytes --]

Hi Sudeep,

[auto build test ERROR on next-20161116]

url:    https://github.com/0day-ci/linux/commits/Sudeep-Holla/Input-gpio_keys-set-input-direction-explicitly-for-gpio-keys/20161116-202319
config: x86_64-randconfig-x017-201646 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/input/keyboard/gpio_keys.c: In function 'gpio_keys_setup_key':
>> drivers/input/keyboard/gpio_keys.c:506:4: error: 'flags' undeclared (first use in this function)
       flags |= GPIOF_ACTIVE_LOW;
       ^~~~~
   drivers/input/keyboard/gpio_keys.c:506:4: note: each undeclared identifier is reported only once for each function it appears in

vim +/flags +506 drivers/input/keyboard/gpio_keys.c

700a38b2 Dmitry Torokhov    2016-10-19  500  	} else if (gpio_is_valid(button->gpio)) {
5feeca3c Geert Uytterhoeven 2016-10-19  501  		/*
5feeca3c Geert Uytterhoeven 2016-10-19  502  		 * Legacy GPIO number, so request the GPIO here and
5feeca3c Geert Uytterhoeven 2016-10-19  503  		 * convert it to descriptor.
5feeca3c Geert Uytterhoeven 2016-10-19  504  		 */
5feeca3c Geert Uytterhoeven 2016-10-19  505  		if (button->active_low)
5feeca3c Geert Uytterhoeven 2016-10-19 @506  			flags |= GPIOF_ACTIVE_LOW;
bc8f1eaf Ben Dooks          2009-11-10  507  
5feeca3c Geert Uytterhoeven 2016-10-19  508  		error = devm_gpio_request_one(&pdev->dev, button->gpio, flags,
5feeca3c Geert Uytterhoeven 2016-10-19  509  					      desc);

:::::: The code at line 506 was first introduced by commit
:::::: 5feeca3c1e39c01f9ef5abc94dea94021ccf94fc Input: gpio_keys - add support for GPIO descriptors

:::::: TO: Geert Uytterhoeven <geert+renesas@glider.be>
:::::: CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 27800 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 11:54 [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys Sudeep Holla
  2016-11-16 12:43 ` kbuild test robot
  2016-11-16 12:48 ` kbuild test robot
@ 2016-11-16 13:42 ` Sudeep Holla
  2016-11-16 17:36   ` Dmitry Torokhov
  2016-11-16 18:38   ` [PATCH v3 " Sudeep Holla
  2 siblings, 2 replies; 11+ messages in thread
From: Sudeep Holla @ 2016-11-16 13:42 UTC (permalink / raw)
  To: linux-input, Dmitry Torokhov
  Cc: Sudeep Holla, linux-kernel, Linus Walleij, Geert Uytterhoeven,
	Mika Westerberg

Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
properties") switched to use generic device properties for GPIO keys and
commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
switched from legacy GPIO numbers to GPIO descriptors.

Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
to set the GPIO direction as input. However devm_get_gpiod_from_child
doesn't have such provisions and hence fwnode_get_named_gpiod can't set
it as input.

This breaks few platforms with the following error:
" gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
  unable to lock HW IRQ <n> for IRQ
  genirq: Failed to request resources for POWER (irq <x>) on irqchip
  gpio_keys: Unable to claim irq <x>; error -22
  gpio-keys: probe failed with error -22 "

This patch fixes the issue by setting input direction explicitly for
gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
for the legacy gpios and merges into single gpiod_direction_input call.

Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/input/keyboard/gpio_keys.c        | 5 ++++-
 drivers/input/keyboard/gpio_keys_polled.c | 5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

v1->v2:
	- Fix the build(had sent a wrong version by accident)

Hi Dmitry,

The other option would be to pass the flag explicitly and add support to
handle it in the path devm_get_gpiod_from_child would take.

Let me know your opinion.

Regards,
Sudeep

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 5576f2ae0b71..f5e2d377f5c1 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -502,7 +502,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 		 * Legacy GPIO number, so request the GPIO here and
 		 * convert it to descriptor.
 		 */
-		unsigned flags = GPIOF_IN;
+		unsigned flags = 0;

 		if (button->active_low)
 			flags |= GPIOF_ACTIVE_LOW;
@@ -521,6 +521,9 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 	}

 	if (bdata->gpiod) {
+		/* set the GPIO direction to input */
+		gpiod_direction_input(bdata->gpiod);
+
 		if (button->debounce_interval) {
 			error = gpiod_set_debounce(bdata->gpiod,
 					button->debounce_interval * 1000);
diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
index 72b350315d43..56bf0dc5e2e4 100644
--- a/drivers/input/keyboard/gpio_keys_polled.c
+++ b/drivers/input/keyboard/gpio_keys_polled.c
@@ -319,7 +319,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 			 * Legacy GPIO number so request the GPIO here and
 			 * convert it to descriptor.
 			 */
-			unsigned flags = GPIOF_IN;
+			unsigned flags = 0;

 			if (button->active_low)
 				flags |= GPIOF_ACTIVE_LOW;
@@ -342,6 +342,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 			}
 		}

+		/* set the GPIO direction to input */
+		gpiod_direction_input(bdata->gpiod);
+
 		bdata->last_state = -1;
 		bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
 						pdata->poll_interval);
--
2.7.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 13:42 ` [PATCH v2 " Sudeep Holla
@ 2016-11-16 17:36   ` Dmitry Torokhov
  2016-11-16 17:42     ` Sudeep Holla
  2016-11-16 18:38   ` [PATCH v3 " Sudeep Holla
  1 sibling, 1 reply; 11+ messages in thread
From: Dmitry Torokhov @ 2016-11-16 17:36 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: linux-input, linux-kernel, Linus Walleij, Geert Uytterhoeven,
	Mika Westerberg

On Wed, Nov 16, 2016 at 01:42:14PM +0000, Sudeep Holla wrote:
> Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
> properties") switched to use generic device properties for GPIO keys and
> commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
> switched from legacy GPIO numbers to GPIO descriptors.
> 
> Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
> to set the GPIO direction as input. However devm_get_gpiod_from_child
> doesn't have such provisions and hence fwnode_get_named_gpiod can't set
> it as input.
> 
> This breaks few platforms with the following error:
> " gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
>   unable to lock HW IRQ <n> for IRQ
>   genirq: Failed to request resources for POWER (irq <x>) on irqchip
>   gpio_keys: Unable to claim irq <x>; error -22
>   gpio-keys: probe failed with error -22 "
> 
> This patch fixes the issue by setting input direction explicitly for
> gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
> for the legacy gpios and merges into single gpiod_direction_input call.
> 
> Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/input/keyboard/gpio_keys.c        | 5 ++++-
>  drivers/input/keyboard/gpio_keys_polled.c | 5 ++++-
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> v1->v2:
> 	- Fix the build(had sent a wrong version by accident)
> 
> Hi Dmitry,
> 
> The other option would be to pass the flag explicitly and add support to
> handle it in the path devm_get_gpiod_from_child would take.

Hi Sudeep,

No, I think explicitly configuring it for input is good (at least for
now), but we need error handling.

Thanks!

> 
> Let me know your opinion.
> 
> Regards,
> Sudeep
> 
> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
> index 5576f2ae0b71..f5e2d377f5c1 100644
> --- a/drivers/input/keyboard/gpio_keys.c
> +++ b/drivers/input/keyboard/gpio_keys.c
> @@ -502,7 +502,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
>  		 * Legacy GPIO number, so request the GPIO here and
>  		 * convert it to descriptor.
>  		 */
> -		unsigned flags = GPIOF_IN;
> +		unsigned flags = 0;
> 
>  		if (button->active_low)
>  			flags |= GPIOF_ACTIVE_LOW;
> @@ -521,6 +521,9 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
>  	}
> 
>  	if (bdata->gpiod) {
> +		/* set the GPIO direction to input */
> +		gpiod_direction_input(bdata->gpiod);
> +
>  		if (button->debounce_interval) {
>  			error = gpiod_set_debounce(bdata->gpiod,
>  					button->debounce_interval * 1000);
> diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
> index 72b350315d43..56bf0dc5e2e4 100644
> --- a/drivers/input/keyboard/gpio_keys_polled.c
> +++ b/drivers/input/keyboard/gpio_keys_polled.c
> @@ -319,7 +319,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
>  			 * Legacy GPIO number so request the GPIO here and
>  			 * convert it to descriptor.
>  			 */
> -			unsigned flags = GPIOF_IN;
> +			unsigned flags = 0;
> 
>  			if (button->active_low)
>  				flags |= GPIOF_ACTIVE_LOW;
> @@ -342,6 +342,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
>  			}
>  		}
> 
> +		/* set the GPIO direction to input */
> +		gpiod_direction_input(bdata->gpiod);
> +
>  		bdata->last_state = -1;
>  		bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
>  						pdata->poll_interval);
> --
> 2.7.4
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 17:36   ` Dmitry Torokhov
@ 2016-11-16 17:42     ` Sudeep Holla
  2016-11-16 18:34       ` Dmitry Torokhov
  0 siblings, 1 reply; 11+ messages in thread
From: Sudeep Holla @ 2016-11-16 17:42 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Sudeep Holla, linux-input, linux-kernel, Linus Walleij,
	Geert Uytterhoeven, Mika Westerberg



On 16/11/16 17:36, Dmitry Torokhov wrote:
> On Wed, Nov 16, 2016 at 01:42:14PM +0000, Sudeep Holla wrote:
>> Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
>> properties") switched to use generic device properties for GPIO keys and
>> commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
>> switched from legacy GPIO numbers to GPIO descriptors.
>>
>> Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
>> to set the GPIO direction as input. However devm_get_gpiod_from_child
>> doesn't have such provisions and hence fwnode_get_named_gpiod can't set
>> it as input.
>>
>> This breaks few platforms with the following error:
>> " gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
>>   unable to lock HW IRQ <n> for IRQ
>>   genirq: Failed to request resources for POWER (irq <x>) on irqchip
>>   gpio_keys: Unable to claim irq <x>; error -22
>>   gpio-keys: probe failed with error -22 "
>>
>> This patch fixes the issue by setting input direction explicitly for
>> gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
>> for the legacy gpios and merges into single gpiod_direction_input call.
>>
>> Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
>> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Cc: Linus Walleij <linus.walleij@linaro.org>
>> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
>> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>> ---
>>  drivers/input/keyboard/gpio_keys.c        | 5 ++++-
>>  drivers/input/keyboard/gpio_keys_polled.c | 5 ++++-
>>  2 files changed, 8 insertions(+), 2 deletions(-)
>>
>> v1->v2:
>> 	- Fix the build(had sent a wrong version by accident)
>>
>> Hi Dmitry,
>>
>> The other option would be to pass the flag explicitly and add support to
>> handle it in the path devm_get_gpiod_from_child would take.
>
> Hi Sudeep,
>
> No, I think explicitly configuring it for input is good (at least for
> now), but we need error handling.
>

Sure, a quick glance makes me think: all I need is to return the error
as everything is handled by devm_* APIs. If so I will respin with that
change, otherwise please let me know if I am missing anything here.

-- 
Regards,
Sudeep

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 17:42     ` Sudeep Holla
@ 2016-11-16 18:34       ` Dmitry Torokhov
  2016-11-16 18:39         ` Sudeep Holla
  0 siblings, 1 reply; 11+ messages in thread
From: Dmitry Torokhov @ 2016-11-16 18:34 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: linux-input, linux-kernel, Linus Walleij, Geert Uytterhoeven,
	Mika Westerberg

On Wed, Nov 16, 2016 at 05:42:15PM +0000, Sudeep Holla wrote:
> 
> 
> On 16/11/16 17:36, Dmitry Torokhov wrote:
> >On Wed, Nov 16, 2016 at 01:42:14PM +0000, Sudeep Holla wrote:
> >>Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
> >>properties") switched to use generic device properties for GPIO keys and
> >>commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
> >>switched from legacy GPIO numbers to GPIO descriptors.
> >>
> >>Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
> >>to set the GPIO direction as input. However devm_get_gpiod_from_child
> >>doesn't have such provisions and hence fwnode_get_named_gpiod can't set
> >>it as input.
> >>
> >>This breaks few platforms with the following error:
> >>" gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
> >>  unable to lock HW IRQ <n> for IRQ
> >>  genirq: Failed to request resources for POWER (irq <x>) on irqchip
> >>  gpio_keys: Unable to claim irq <x>; error -22
> >>  gpio-keys: probe failed with error -22 "
> >>
> >>This patch fixes the issue by setting input direction explicitly for
> >>gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
> >>for the legacy gpios and merges into single gpiod_direction_input call.
> >>
> >>Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
> >>Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> >>Cc: Linus Walleij <linus.walleij@linaro.org>
> >>Cc: Geert Uytterhoeven <geert+renesas@glider.be>
> >>Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> >>Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> >>---
> >> drivers/input/keyboard/gpio_keys.c        | 5 ++++-
> >> drivers/input/keyboard/gpio_keys_polled.c | 5 ++++-
> >> 2 files changed, 8 insertions(+), 2 deletions(-)
> >>
> >>v1->v2:
> >>	- Fix the build(had sent a wrong version by accident)
> >>
> >>Hi Dmitry,
> >>
> >>The other option would be to pass the flag explicitly and add support to
> >>handle it in the path devm_get_gpiod_from_child would take.
> >
> >Hi Sudeep,
> >
> >No, I think explicitly configuring it for input is good (at least for
> >now), but we need error handling.
> >
> 
> Sure, a quick glance makes me think: all I need is to return the error
> as everything is handled by devm_* APIs. If so I will respin with that
> change, otherwise please let me know if I am missing anything here.

No, I think that is it.

Thanks.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 13:42 ` [PATCH v2 " Sudeep Holla
  2016-11-16 17:36   ` Dmitry Torokhov
@ 2016-11-16 18:38   ` Sudeep Holla
  2016-11-17  1:18     ` Dmitry Torokhov
  1 sibling, 1 reply; 11+ messages in thread
From: Sudeep Holla @ 2016-11-16 18:38 UTC (permalink / raw)
  To: linux-input, Dmitry Torokhov
  Cc: Sudeep Holla, linux-kernel, Linus Walleij, Geert Uytterhoeven,
	Mika Westerberg

Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
properties") switched to use generic device properties for GPIO keys and
commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
switched from legacy GPIO numbers to GPIO descriptors.

Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
to set the GPIO direction as input. However devm_get_gpiod_from_child
doesn't have such provisions and hence fwnode_get_named_gpiod can't set
it as input.

This breaks few platforms with the following error:
" gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
  unable to lock HW IRQ <n> for IRQ
  genirq: Failed to request resources for POWER (irq <x>) on irqchip
  gpio_keys: Unable to claim irq <x>; error -22
  gpio-keys: probe failed with error -22 "

This patch fixes the issue by setting input direction explicitly for
gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
for the legacy gpios and merges into single gpiod_direction_input call.

Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/input/keyboard/gpio_keys.c        | 10 +++++++++-
 drivers/input/keyboard/gpio_keys_polled.c | 10 +++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

v2->v3:
	- Added error handling and error message

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 5576f2ae0b71..ed38a05b3039 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -502,7 +502,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 		 * Legacy GPIO number, so request the GPIO here and
 		 * convert it to descriptor.
 		 */
-		unsigned flags = GPIOF_IN;
+		unsigned flags = 0;

 		if (button->active_low)
 			flags |= GPIOF_ACTIVE_LOW;
@@ -521,6 +521,14 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 	}

 	if (bdata->gpiod) {
+		/* set the GPIO direction to input */
+		error = gpiod_direction_input(bdata->gpiod);
+		if (error) {
+			dev_err(dev, "Failed to configure GPIO %d as input, error %d\n",
+				desc_to_gpio(bdata->gpiod), error);
+			return error;
+		}
+
 		if (button->debounce_interval) {
 			error = gpiod_set_debounce(bdata->gpiod,
 					button->debounce_interval * 1000);
diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
index 72b350315d43..4bd8a015cf5f 100644
--- a/drivers/input/keyboard/gpio_keys_polled.c
+++ b/drivers/input/keyboard/gpio_keys_polled.c
@@ -319,7 +319,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 			 * Legacy GPIO number so request the GPIO here and
 			 * convert it to descriptor.
 			 */
-			unsigned flags = GPIOF_IN;
+			unsigned flags = 0;

 			if (button->active_low)
 				flags |= GPIOF_ACTIVE_LOW;
@@ -342,6 +342,14 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 			}
 		}

+		/* set the GPIO direction to input */
+		error = gpiod_direction_input(bdata->gpiod);
+		if (error) {
+			dev_err(dev, "Failed to configure GPIO %d as input, error %d\n",
+				desc_to_gpio(bdata->gpiod), error);
+			return error;
+		}
+
 		bdata->last_state = -1;
 		bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
 						pdata->poll_interval);
--
2.7.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 18:34       ` Dmitry Torokhov
@ 2016-11-16 18:39         ` Sudeep Holla
  0 siblings, 0 replies; 11+ messages in thread
From: Sudeep Holla @ 2016-11-16 18:39 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Sudeep Holla, linux-input, linux-kernel, Linus Walleij,
	Geert Uytterhoeven, Mika Westerberg



On 16/11/16 18:34, Dmitry Torokhov wrote:
> On Wed, Nov 16, 2016 at 05:42:15PM +0000, Sudeep Holla wrote:
>>
>>
>> On 16/11/16 17:36, Dmitry Torokhov wrote:
>>> On Wed, Nov 16, 2016 at 01:42:14PM +0000, Sudeep Holla wrote:
>>>> Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
>>>> properties") switched to use generic device properties for GPIO keys and
>>>> commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
>>>> switched from legacy GPIO numbers to GPIO descriptors.
>>>>
>>>> Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
>>>> to set the GPIO direction as input. However devm_get_gpiod_from_child
>>>> doesn't have such provisions and hence fwnode_get_named_gpiod can't set
>>>> it as input.
>>>>
>>>> This breaks few platforms with the following error:
>>>> " gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
>>>>  unable to lock HW IRQ <n> for IRQ
>>>>  genirq: Failed to request resources for POWER (irq <x>) on irqchip
>>>>  gpio_keys: Unable to claim irq <x>; error -22
>>>>  gpio-keys: probe failed with error -22 "
>>>>
>>>> This patch fixes the issue by setting input direction explicitly for
>>>> gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
>>>> for the legacy gpios and merges into single gpiod_direction_input call.
>>>>
>>>> Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
>>>> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>>>> Cc: Linus Walleij <linus.walleij@linaro.org>
>>>> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
>>>> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
>>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>>>> ---
>>>> drivers/input/keyboard/gpio_keys.c        | 5 ++++-
>>>> drivers/input/keyboard/gpio_keys_polled.c | 5 ++++-
>>>> 2 files changed, 8 insertions(+), 2 deletions(-)
>>>>
>>>> v1->v2:
>>>> 	- Fix the build(had sent a wrong version by accident)
>>>>
>>>> Hi Dmitry,
>>>>
>>>> The other option would be to pass the flag explicitly and add support to
>>>> handle it in the path devm_get_gpiod_from_child would take.
>>>
>>> Hi Sudeep,
>>>
>>> No, I think explicitly configuring it for input is good (at least for
>>> now), but we need error handling.
>>>
>>
>> Sure, a quick glance makes me think: all I need is to return the error
>> as everything is handled by devm_* APIs. If so I will respin with that
>> change, otherwise please let me know if I am missing anything here.
>
> No, I think that is it.
>

Thanks for the confirmation, fixed and sent v3.

-- 
Regards,
Sudeep

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-16 18:38   ` [PATCH v3 " Sudeep Holla
@ 2016-11-17  1:18     ` Dmitry Torokhov
  2016-11-17  9:48       ` Sudeep Holla
  0 siblings, 1 reply; 11+ messages in thread
From: Dmitry Torokhov @ 2016-11-17  1:18 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: linux-input, linux-kernel, Linus Walleij, Geert Uytterhoeven,
	Mika Westerberg

On Wed, Nov 16, 2016 at 06:38:22PM +0000, Sudeep Holla wrote:
> Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
> properties") switched to use generic device properties for GPIO keys and
> commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
> switched from legacy GPIO numbers to GPIO descriptors.
> 
> Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
> to set the GPIO direction as input. However devm_get_gpiod_from_child
> doesn't have such provisions and hence fwnode_get_named_gpiod can't set
> it as input.
> 
> This breaks few platforms with the following error:
> " gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
>   unable to lock HW IRQ <n> for IRQ
>   genirq: Failed to request resources for POWER (irq <x>) on irqchip
>   gpio_keys: Unable to claim irq <x>; error -22
>   gpio-keys: probe failed with error -22 "
> 
> This patch fixes the issue by setting input direction explicitly for
> gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
> for the legacy gpios and merges into single gpiod_direction_input call.
> 
> Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/input/keyboard/gpio_keys.c        | 10 +++++++++-
>  drivers/input/keyboard/gpio_keys_polled.c | 10 +++++++++-
>  2 files changed, 18 insertions(+), 2 deletions(-)
> 
> v2->v3:
> 	- Added error handling and error message
> 
> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
> index 5576f2ae0b71..ed38a05b3039 100644
> --- a/drivers/input/keyboard/gpio_keys.c
> +++ b/drivers/input/keyboard/gpio_keys.c
> @@ -502,7 +502,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
>  		 * Legacy GPIO number, so request the GPIO here and
>  		 * convert it to descriptor.
>  		 */
> -		unsigned flags = GPIOF_IN;
> +		unsigned flags = 0;
> 
>  		if (button->active_low)
>  			flags |= GPIOF_ACTIVE_LOW;

Sudeep, I looked into this aa bit deeper, and I have issue with this
part: in absence of GPIOF_IN devm_gpio_request_one() will attempt to
configure GPIO line as output, which may not work. Because of this I
think we should move gpiod_direction_input() call into the "modern"
branch and leave legacy branch as is.

Does the version below work for you?

Thanks!

-- 
Dmitry


Input: gpio_keys - set input direction explicitly for gpio keys

From: Sudeep Holla <sudeep.holla@arm.com>

Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
properties") switched to use generic device properties for GPIO keys and
commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
switched from legacy GPIO numbers to GPIO descriptors.

Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
to set the GPIO direction as input. However devm_get_gpiod_from_child
doesn't have such provisions and hence fwnode_get_named_gpiod can't set
it as input.

This breaks few platforms with the following error:
" gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
  unable to lock HW IRQ <n> for IRQ
  genirq: Failed to request resources for POWER (irq <x>) on irqchip
  gpio_keys: Unable to claim irq <x>; error -22
  gpio-keys: probe failed with error -22 "

This patch fixes the issue by setting input direction explicitly for
gpio lines described by generic properties.

Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/keyboard/gpio_keys.c        |    7 +++++++
 drivers/input/keyboard/gpio_keys_polled.c |    8 ++++++++
 2 files changed, 15 insertions(+)

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 5576f2a..582462d 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -496,6 +496,13 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
 						error);
 				return error;
 			}
+		} else {
+			error = gpiod_direction_input(bdata->gpiod);
+			if (error) {
+				dev_err(dev, "Failed to configure GPIO %d as input: %d\n",
+					desc_to_gpio(bdata->gpiod), error);
+				return error;
+			}
 		}
 	} else if (gpio_is_valid(button->gpio)) {
 		/*
diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
index 72b3503..bed4f20 100644
--- a/drivers/input/keyboard/gpio_keys_polled.c
+++ b/drivers/input/keyboard/gpio_keys_polled.c
@@ -314,6 +314,14 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
 				fwnode_handle_put(child);
 				return error;
 			}
+
+			error = gpiod_direction_input(bdata->gpiod);
+			if (error) {
+				dev_err(dev, "Failed to configure GPIO %d as input: %d\n",
+					desc_to_gpio(bdata->gpiod), error);
+				fwnode_handle_put(child);
+				return error;
+			}
 		} else if (gpio_is_valid(button->gpio)) {
 			/*
 			 * Legacy GPIO number so request the GPIO here and

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 -next] Input: gpio_keys: set input direction explicitly for gpio keys
  2016-11-17  1:18     ` Dmitry Torokhov
@ 2016-11-17  9:48       ` Sudeep Holla
  0 siblings, 0 replies; 11+ messages in thread
From: Sudeep Holla @ 2016-11-17  9:48 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Sudeep Holla, linux-input, linux-kernel, Linus Walleij,
	Geert Uytterhoeven, Mika Westerberg



On 17/11/16 01:18, Dmitry Torokhov wrote:
> On Wed, Nov 16, 2016 at 06:38:22PM +0000, Sudeep Holla wrote:
>> Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device
>> properties") switched to use generic device properties for GPIO keys and
>> commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors")
>> switched from legacy GPIO numbers to GPIO descriptors.
>>
>> Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag
>> to set the GPIO direction as input. However devm_get_gpiod_from_child
>> doesn't have such provisions and hence fwnode_get_named_gpiod can't set
>> it as input.
>>
>> This breaks few platforms with the following error:
>> " gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
>>   unable to lock HW IRQ <n> for IRQ
>>   genirq: Failed to request resources for POWER (irq <x>) on irqchip
>>   gpio_keys: Unable to claim irq <x>; error -22
>>   gpio-keys: probe failed with error -22 "
>>
>> This patch fixes the issue by setting input direction explicitly for
>> gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting
>> for the legacy gpios and merges into single gpiod_direction_input call.
>>
>> Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties")
>> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Cc: Linus Walleij <linus.walleij@linaro.org>
>> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
>> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>> ---
>>  drivers/input/keyboard/gpio_keys.c        | 10 +++++++++-
>>  drivers/input/keyboard/gpio_keys_polled.c | 10 +++++++++-
>>  2 files changed, 18 insertions(+), 2 deletions(-)
>>
>> v2->v3:
>> 	- Added error handling and error message
>>
>> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
>> index 5576f2ae0b71..ed38a05b3039 100644
>> --- a/drivers/input/keyboard/gpio_keys.c
>> +++ b/drivers/input/keyboard/gpio_keys.c
>> @@ -502,7 +502,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
>>  		 * Legacy GPIO number, so request the GPIO here and
>>  		 * convert it to descriptor.
>>  		 */
>> -		unsigned flags = GPIOF_IN;
>> +		unsigned flags = 0;
>>
>>  		if (button->active_low)
>>  			flags |= GPIOF_ACTIVE_LOW;
>
> Sudeep, I looked into this aa bit deeper, and I have issue with this
> part: in absence of GPIOF_IN devm_gpio_request_one() will attempt to
> configure GPIO line as output, which may not work. Because of this I
> think we should move gpiod_direction_input() call into the "modern"
> branch and leave legacy branch as is.
>
> Does the version below work for you?
>

Yes it does and in fact I started with something similar and then saw
that I can make it common between legacy and new branch conditions. So I
am fine with the modified version you sent.

-- 
Regards,
Sudeep

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-11-17  9:48 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-16 11:54 [PATCH -next] Input: gpio_keys: set input direction explicitly for gpio keys Sudeep Holla
2016-11-16 12:43 ` kbuild test robot
2016-11-16 12:48 ` kbuild test robot
2016-11-16 13:42 ` [PATCH v2 " Sudeep Holla
2016-11-16 17:36   ` Dmitry Torokhov
2016-11-16 17:42     ` Sudeep Holla
2016-11-16 18:34       ` Dmitry Torokhov
2016-11-16 18:39         ` Sudeep Holla
2016-11-16 18:38   ` [PATCH v3 " Sudeep Holla
2016-11-17  1:18     ` Dmitry Torokhov
2016-11-17  9:48       ` Sudeep Holla

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).