linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).