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