* [PATCH] input/misc: rotary-encoder: Set gpio direction
@ 2010-02-08 21:03 Andrew Clayton
2010-02-08 21:40 ` H Hartley Sweeten
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Andrew Clayton @ 2010-02-08 21:03 UTC (permalink / raw)
To: linux-input; +Cc: Daniel Mack, Mark Somerville
While trying to get a rotary encoder working under a beagle board using
the drivers/input/misc/rotary-encoder.c driver, we found that even with
the right pin mux settings configured through /sys/kernel/debug/omap_mux/*,
i.e INPUT_PULLUP and MODE4, the gpio_get_value() functions only ever
returned 1.
By explicitly calling gpio_direction_input() after each requested gpio,
the driver started working and started returning correct input events.
The following is the patch that works for us. What do you think?
Cheers,
Andrew
Set the gpio direction to input for each requested gpio.
Even with the correct pin mux settings, you still need to explicitly
set the gpio direction. Call gpio_direction_input() after each
requested gpio.
Signed-off-by: Andrew Clayton <andrew@digital-domain.net>
---
diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
index 3b9f588..4ae0793 100644
--- a/drivers/input/misc/rotary_encoder.c
+++ b/drivers/input/misc/rotary_encoder.c
@@ -152,6 +152,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
goto exit_unregister_input;
}
+ err = gpio_direction_input(pdata->gpio_a);
+ if (err) {
+ dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
+ pdata->gpio_a);
+ goto exit_unregister_input;
+ }
+
err = gpio_request(pdata->gpio_b, DRV_NAME);
if (err) {
dev_err(&pdev->dev, "unable to request GPIO %d\n",
@@ -159,6 +166,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
goto exit_free_gpio_a;
}
+ err = gpio_direction_input(pdata->gpio_b);
+ if (err) {
+ dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
+ pdata->gpio_b);
+ goto exit_free_gpio_a;
+ }
+
/* request the IRQs */
err = request_irq(encoder->irq_a, &rotary_encoder_irq,
IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH] input/misc: rotary-encoder: Set gpio direction
2010-02-08 21:03 [PATCH] input/misc: rotary-encoder: Set gpio direction Andrew Clayton
@ 2010-02-08 21:40 ` H Hartley Sweeten
2010-02-08 22:12 ` Daniel Mack
2010-02-09 0:39 ` Mark Somerville
2 siblings, 0 replies; 7+ messages in thread
From: H Hartley Sweeten @ 2010-02-08 21:40 UTC (permalink / raw)
To: Andrew Clayton, linux-input; +Cc: Daniel Mack, Mark Somerville
On Monday, February 08, 2010 2:04 PM, Andrew Clayton wrote:
> While trying to get a rotary encoder working under a beagle board using
> the drivers/input/misc/rotary-encoder.c driver, we found that even with
> the right pin mux settings configured through /sys/kernel/debug/omap_mux/*,
> i.e INPUT_PULLUP and MODE4, the gpio_get_value() functions only ever
> returned 1.
>
> By explicitly calling gpio_direction_input() after each requested gpio,
> the driver started working and started returning correct input events.
>
> The following is the patch that works for us. What do you think?
On the ep93xx the gpio's default as inputs. The gpio's must default as
outputs on the beagle board. I never noticed the missing direction set
call.
Tested-by: H Hartley Sweeten <hsweeten@visionengravers.com>
> Cheers,
> Andrew
>
>
> Set the gpio direction to input for each requested gpio.
>
> Even with the correct pin mux settings, you still need to explicitly
> set the gpio direction. Call gpio_direction_input() after each
> requested gpio.
>
> Signed-off-by: Andrew Clayton <andrew@digital-domain.net>
> ---
> diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
> index 3b9f588..4ae0793 100644
> --- a/drivers/input/misc/rotary_encoder.c
> +++ b/drivers/input/misc/rotary_encoder.c
> @@ -152,6 +152,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
> goto exit_unregister_input;
> }
>
> + err = gpio_direction_input(pdata->gpio_a);
> + if (err) {
> + dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
> + pdata->gpio_a);
> + goto exit_unregister_input;
> + }
> +
> err = gpio_request(pdata->gpio_b, DRV_NAME);
> if (err) {
> dev_err(&pdev->dev, "unable to request GPIO %d\n",
> @@ -159,6 +166,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
> goto exit_free_gpio_a;
> }
>
> + err = gpio_direction_input(pdata->gpio_b);
> + if (err) {
> + dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
> + pdata->gpio_b);
> + goto exit_free_gpio_a;
> + }
> +
> /* request the IRQs */
> err = request_irq(encoder->irq_a, &rotary_encoder_irq,
> IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] input/misc: rotary-encoder: Set gpio direction
2010-02-08 21:03 [PATCH] input/misc: rotary-encoder: Set gpio direction Andrew Clayton
2010-02-08 21:40 ` H Hartley Sweeten
@ 2010-02-08 22:12 ` Daniel Mack
2010-02-09 0:18 ` Dmitry Torokhov
2010-02-09 0:39 ` Mark Somerville
2 siblings, 1 reply; 7+ messages in thread
From: Daniel Mack @ 2010-02-08 22:12 UTC (permalink / raw)
To: Andrew Clayton; +Cc: linux-input, Mark Somerville
On Mon, Feb 08, 2010 at 09:03:50PM +0000, Andrew Clayton wrote:
> While trying to get a rotary encoder working under a beagle board using
> the drivers/input/misc/rotary-encoder.c driver, we found that even with
> the right pin mux settings configured through /sys/kernel/debug/omap_mux/*,
> i.e INPUT_PULLUP and MODE4, the gpio_get_value() functions only ever
> returned 1.
>
> By explicitly calling gpio_direction_input() after each requested gpio,
> the driver started working and started returning correct input events.
>
> The following is the patch that works for us. What do you think?
Yep, that looks good to me, thanks!
Acked-by: Daniel Mack <daniel@caiaq.de>
> Set the gpio direction to input for each requested gpio.
>
> Even with the correct pin mux settings, you still need to explicitly
> set the gpio direction. Call gpio_direction_input() after each
> requested gpio.
>
> Signed-off-by: Andrew Clayton <andrew@digital-domain.net>
> ---
> diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
> index 3b9f588..4ae0793 100644
> --- a/drivers/input/misc/rotary_encoder.c
> +++ b/drivers/input/misc/rotary_encoder.c
> @@ -152,6 +152,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
> goto exit_unregister_input;
> }
>
> + err = gpio_direction_input(pdata->gpio_a);
> + if (err) {
> + dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
> + pdata->gpio_a);
> + goto exit_unregister_input;
> + }
> +
> err = gpio_request(pdata->gpio_b, DRV_NAME);
> if (err) {
> dev_err(&pdev->dev, "unable to request GPIO %d\n",
> @@ -159,6 +166,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
> goto exit_free_gpio_a;
> }
>
> + err = gpio_direction_input(pdata->gpio_b);
> + if (err) {
> + dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
> + pdata->gpio_b);
> + goto exit_free_gpio_a;
> + }
> +
> /* request the IRQs */
> err = request_irq(encoder->irq_a, &rotary_encoder_irq,
> IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] input/misc: rotary-encoder: Set gpio direction
2010-02-08 22:12 ` Daniel Mack
@ 2010-02-09 0:18 ` Dmitry Torokhov
2010-02-09 1:30 ` Daniel Mack
0 siblings, 1 reply; 7+ messages in thread
From: Dmitry Torokhov @ 2010-02-09 0:18 UTC (permalink / raw)
To: Daniel Mack; +Cc: Andrew Clayton, linux-input, Mark Somerville
On Monday 08 February 2010 02:12:06 pm Daniel Mack wrote:
> On Mon, Feb 08, 2010 at 09:03:50PM +0000, Andrew Clayton wrote:
> > While trying to get a rotary encoder working under a beagle board using
> > the drivers/input/misc/rotary-encoder.c driver, we found that even with
> > the right pin mux settings configured through
> > /sys/kernel/debug/omap_mux/*, i.e INPUT_PULLUP and MODE4, the
> > gpio_get_value() functions only ever returned 1.
> >
> > By explicitly calling gpio_direction_input() after each requested gpio,
> > the driver started working and started returning correct input events.
> >
> > The following is the patch that works for us. What do you think?
>
> Yep, that looks good to me, thanks!
>
> Acked-by: Daniel Mack <daniel@caiaq.de>
.33 material or hold off till .34?
--
Dmitry
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] input/misc: rotary-encoder: Set gpio direction
2010-02-08 21:03 [PATCH] input/misc: rotary-encoder: Set gpio direction Andrew Clayton
2010-02-08 21:40 ` H Hartley Sweeten
2010-02-08 22:12 ` Daniel Mack
@ 2010-02-09 0:39 ` Mark Somerville
2 siblings, 0 replies; 7+ messages in thread
From: Mark Somerville @ 2010-02-09 0:39 UTC (permalink / raw)
To: Andrew Clayton; +Cc: linux-input, Daniel Mack
[-- Attachment #1: Type: text/plain, Size: 2177 bytes --]
On Mon, Feb 08, 2010 at 09:03:50PM +0000, Andrew Clayton wrote:
> While trying to get a rotary encoder working under a beagle board using
> the drivers/input/misc/rotary-encoder.c driver, we found that even with
> the right pin mux settings configured through /sys/kernel/debug/omap_mux/*,
> i.e INPUT_PULLUP and MODE4, the gpio_get_value() functions only ever
> returned 1.
>
> By explicitly calling gpio_direction_input() after each requested gpio,
> the driver started working and started returning correct input events.
>
> The following is the patch that works for us. What do you think?
Adding my Signed-off-by tag:
Signed-off-by: Mark Somerville <mark@scottishclimbs.com>
> Cheers,
> Andrew
>
>
> Set the gpio direction to input for each requested gpio.
>
> Even with the correct pin mux settings, you still need to explicitly
> set the gpio direction. Call gpio_direction_input() after each
> requested gpio.
>
> Signed-off-by: Andrew Clayton <andrew@digital-domain.net>
> ---
> diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
> index 3b9f588..4ae0793 100644
> --- a/drivers/input/misc/rotary_encoder.c
> +++ b/drivers/input/misc/rotary_encoder.c
> @@ -152,6 +152,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
> goto exit_unregister_input;
> }
>
> + err = gpio_direction_input(pdata->gpio_a);
> + if (err) {
> + dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
> + pdata->gpio_a);
> + goto exit_unregister_input;
> + }
> +
> err = gpio_request(pdata->gpio_b, DRV_NAME);
> if (err) {
> dev_err(&pdev->dev, "unable to request GPIO %d\n",
> @@ -159,6 +166,13 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
> goto exit_free_gpio_a;
> }
>
> + err = gpio_direction_input(pdata->gpio_b);
> + if (err) {
> + dev_err(&pdev->dev, "unable to set GPIO %d for input\n",
> + pdata->gpio_b);
> + goto exit_free_gpio_a;
> + }
> +
> /* request the IRQs */
> err = request_irq(encoder->irq_a, &rotary_encoder_irq,
> IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] input/misc: rotary-encoder: Set gpio direction
2010-02-09 0:18 ` Dmitry Torokhov
@ 2010-02-09 1:30 ` Daniel Mack
2010-02-11 7:19 ` Dmitry Torokhov
0 siblings, 1 reply; 7+ messages in thread
From: Daniel Mack @ 2010-02-09 1:30 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: Andrew Clayton, linux-input, Mark Somerville
On Mon, Feb 08, 2010 at 04:18:23PM -0800, Dmitry Torokhov wrote:
> On Monday 08 February 2010 02:12:06 pm Daniel Mack wrote:
> > On Mon, Feb 08, 2010 at 09:03:50PM +0000, Andrew Clayton wrote:
> > > While trying to get a rotary encoder working under a beagle board using
> > > the drivers/input/misc/rotary-encoder.c driver, we found that even with
> > > the right pin mux settings configured through
> > > /sys/kernel/debug/omap_mux/*, i.e INPUT_PULLUP and MODE4, the
> > > gpio_get_value() functions only ever returned 1.
> > >
> > > By explicitly calling gpio_direction_input() after each requested gpio,
> > > the driver started working and started returning correct input events.
> > >
> > > The following is the patch that works for us. What do you think?
> >
> > Yep, that looks good to me, thanks!
> >
> > Acked-by: Daniel Mack <daniel@caiaq.de>
>
> .33 material or hold off till .34?
Hmm, it doesn't fix any existing upstream platform, so I think it should
be fine for .34.
Thanks,
Daniel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] input/misc: rotary-encoder: Set gpio direction
2010-02-09 1:30 ` Daniel Mack
@ 2010-02-11 7:19 ` Dmitry Torokhov
0 siblings, 0 replies; 7+ messages in thread
From: Dmitry Torokhov @ 2010-02-11 7:19 UTC (permalink / raw)
To: Daniel Mack; +Cc: Andrew Clayton, linux-input, Mark Somerville
On Tue, Feb 09, 2010 at 02:30:29AM +0100, Daniel Mack wrote:
> On Mon, Feb 08, 2010 at 04:18:23PM -0800, Dmitry Torokhov wrote:
> > On Monday 08 February 2010 02:12:06 pm Daniel Mack wrote:
> > > On Mon, Feb 08, 2010 at 09:03:50PM +0000, Andrew Clayton wrote:
> > > > While trying to get a rotary encoder working under a beagle board using
> > > > the drivers/input/misc/rotary-encoder.c driver, we found that even with
> > > > the right pin mux settings configured through
> > > > /sys/kernel/debug/omap_mux/*, i.e INPUT_PULLUP and MODE4, the
> > > > gpio_get_value() functions only ever returned 1.
> > > >
> > > > By explicitly calling gpio_direction_input() after each requested gpio,
> > > > the driver started working and started returning correct input events.
> > > >
> > > > The following is the patch that works for us. What do you think?
> > >
> > > Yep, that looks good to me, thanks!
> > >
> > > Acked-by: Daniel Mack <daniel@caiaq.de>
> >
> > .33 material or hold off till .34?
>
> Hmm, it doesn't fix any existing upstream platform, so I think it should
> be fine for .34.
>
Applied to 'next' then, thank you.
--
Dmitry
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-02-11 7:19 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-02-08 21:03 [PATCH] input/misc: rotary-encoder: Set gpio direction Andrew Clayton
2010-02-08 21:40 ` H Hartley Sweeten
2010-02-08 22:12 ` Daniel Mack
2010-02-09 0:18 ` Dmitry Torokhov
2010-02-09 1:30 ` Daniel Mack
2010-02-11 7:19 ` Dmitry Torokhov
2010-02-09 0:39 ` Mark Somerville
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).