To allow asking for the button states.

Signed-off-by: Sascha Hauer <[email protected]>
---
 drivers/input/gpio_keys.c | 64 +++++++++++++----------------------------------
 1 file changed, 17 insertions(+), 47 deletions(-)

diff --git a/drivers/input/gpio_keys.c b/drivers/input/gpio_keys.c
index acb9e07..38c0f11 100644
--- a/drivers/input/gpio_keys.c
+++ b/drivers/input/gpio_keys.c
@@ -12,7 +12,7 @@
 #include <poller.h>
 #include <gpio.h>
 #include <of_gpio.h>
-#include <input/keyboard.h>
+#include <input/input.h>
 
 struct gpio_key {
        int code;
@@ -30,12 +30,9 @@ struct gpio_keys {
        struct gpio_key *buttons;
        int nbuttons;
 
-       /* optional */
-       int fifo_size;
-
-       struct kfifo *recv_fifo;
        struct poller_struct poller;
-       struct console_device cdev;
+       struct input_device input;
+       struct device_d *dev;
 };
 
 static inline struct gpio_keys *
@@ -44,12 +41,6 @@ poller_to_gk_pdata(struct poller_struct *poller)
        return container_of(poller, struct gpio_keys, poller);
 }
 
-static inline struct gpio_keys *
-cdev_to_gk_pdata(struct console_device *cdev)
-{
-       return container_of(cdev, struct gpio_keys, cdev);
-}
-
 static void gpio_key_poller(struct poller_struct *poller)
 {
        struct gpio_keys *gk = poller_to_gk_pdata(poller);
@@ -65,33 +56,17 @@ static void gpio_key_poller(struct poller_struct *poller)
                        continue;
 
                if (val != gb->previous_state) {
+                       int pressed = val != gb->active_low;
+
                        gb->debounce_start = get_time_ns();
-                       if (val != gb->active_low) {
-                               kfifo_put(gk->recv_fifo, (u_char*)&gb->code, 
sizeof(int));
-                               debug("pressed gpio(%d) as %d\n", gb->gpio, 
gb->code);
-                       }
+                       input_report_key_event(&gk->input, gb->code, pressed);
+                       dev_dbg(gk->dev, "%s gpio(%d) as %d\n",
+                               pressed ? "pressed" : "released", gb->gpio, 
gb->code);
                        gb->previous_state = val;
                }
        }
 }
 
-static int gpio_keys_tstc(struct console_device *cdev)
-{
-       struct gpio_keys *gk = cdev_to_gk_pdata(cdev);
-
-       return (kfifo_len(gk->recv_fifo) == 0) ? 0 : 1;
-}
-
-static int gpio_keys_getc(struct console_device *cdev)
-{
-       int code = 0;
-       struct gpio_keys *gk = cdev_to_gk_pdata(cdev);
-
-       kfifo_get(gk->recv_fifo, (u_char*)&code, sizeof(int));
-
-       return keycode_bb_keys[code];
-}
-
 static int gpio_keys_probe_pdata(struct gpio_keys *gk, struct device_d *dev)
 {
        struct gpio_keys_platform_data *pdata;
@@ -105,9 +80,6 @@ static int gpio_keys_probe_pdata(struct gpio_keys *gk, 
struct device_d *dev)
                return -ENODEV;
        }
 
-       if (pdata->fifo_size)
-               gk->fifo_size = pdata->fifo_size;
-
        gk->buttons = xzalloc(pdata->nbuttons * sizeof(*gk->buttons));
        gk->nbuttons = pdata->nbuttons;
 
@@ -163,11 +135,11 @@ static int gpio_keys_probe_dt(struct gpio_keys *gk, 
struct device_d *dev)
 static int __init gpio_keys_probe(struct device_d *dev)
 {
        int ret, i, gpio;
-       struct console_device *cdev;
        struct gpio_keys *gk;
 
        gk = xzalloc(sizeof(*gk));
-       gk->fifo_size = 50;
+
+       gk->dev = dev;
 
        if (dev->device_node)
                ret = gpio_keys_probe_dt(gk, dev);
@@ -177,8 +149,6 @@ static int __init gpio_keys_probe(struct device_d *dev)
        if (ret)
                return ret;
 
-       gk->recv_fifo = kfifo_alloc(gk->fifo_size);
-
        for (i = 0; i < gk->nbuttons; i++) {
                gpio = gk->buttons[i].gpio;
                ret = gpio_request(gpio, "gpio_keys");
@@ -192,15 +162,15 @@ static int __init gpio_keys_probe(struct device_d *dev)
 
        gk->poller.func = gpio_key_poller;
 
-       cdev = &gk->cdev;
-       dev->type_data = cdev;
-       cdev->dev = dev;
-       cdev->tstc = gpio_keys_tstc;
-       cdev->getc = gpio_keys_getc;
+       ret = input_device_register(&gk->input);
+       if (ret)
+               return ret;
 
-       console_register(&gk->cdev);
+       ret = poller_register(&gk->poller);
+       if (ret)
+               return ret;
 
-       return poller_register(&gk->poller);
+       return 0;
 }
 
 static struct of_device_id key_gpio_of_ids[] = {
-- 
2.6.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to