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

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