summaryrefslogtreecommitdiff
path: root/recipes/linux
diff options
context:
space:
mode:
authorOE Builder <oebuilder@waffle.bolloretelecom.eu>2009-10-30 12:18:56 +0100
committerOE Builder <oebuilder@waffle.bolloretelecom.eu>2009-10-30 12:18:56 +0100
commit4ab9ea946965be0b9dd3d15396dd70fea78b2aad (patch)
treee74a558c49043210f9276f0031e7c3b4c972554a /recipes/linux
parent11aa8fff676b86cec288737391375d73a1245a5a (diff)
linux-2.6.31: add driver for boc01 buttons
Diffstat (limited to 'recipes/linux')
-rw-r--r--recipes/linux/linux-2.6.31/boc01/014-091030-buttons.patch233
-rw-r--r--recipes/linux/linux-2.6.31/boc01/defconfig1
-rw-r--r--recipes/linux/linux_2.6.31.bb1
3 files changed, 235 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.31/boc01/014-091030-buttons.patch b/recipes/linux/linux-2.6.31/boc01/014-091030-buttons.patch
new file mode 100644
index 0000000000..9e56ad12b0
--- /dev/null
+++ b/recipes/linux/linux-2.6.31/boc01/014-091030-buttons.patch
@@ -0,0 +1,233 @@
+Index: linux-2.6.31/drivers/input/misc/Kconfig
+===================================================================
+--- linux-2.6.31.orig/drivers/input/misc/Kconfig 2009-10-30 11:08:24.000000000 +0100
++++ linux-2.6.31/drivers/input/misc/Kconfig 2009-10-30 11:08:32.000000000 +0100
+@@ -270,6 +270,13 @@
+ To compile this driver as a module, choose M here: the
+ module will be called dm355evm_keys.
+
++config INPUT_BOC_BTNS
++ tristate "BoC buttons interface"
++ select INPUT_POLLDEV
++ help
++ To compile this driver as a module, choose M here:
++ the module will be called boc-btns.
++
+ config INPUT_CAPSENSE_BTNS
+ tristate "CAPSENSE CY8C201xx buttons interface"
+ select INPUT_POLLDEV
+Index: linux-2.6.31/drivers/input/misc/Makefile
+===================================================================
+--- linux-2.6.31.orig/drivers/input/misc/Makefile 2009-10-30 11:08:51.000000000 +0100
++++ linux-2.6.31/drivers/input/misc/Makefile 2009-10-30 11:08:58.000000000 +0100
+@@ -26,4 +26,5 @@
+ obj-$(CONFIG_INPUT_UINPUT) += uinput.o
+ obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o
+ obj-$(CONFIG_INPUT_YEALINK) += yealink.o
++obj-$(CONFIG_INPUT_BOC_BTNS) += boc-btns.o
+ obj-$(CONFIG_INPUT_CAPSENSE_BTNS) += capsense-btns.o
+Index: linux-2.6.31/drivers/input/misc/boc-btns.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.31/drivers/input/misc/boc-btns.c 2009-10-30 11:57:13.000000000 +0100
+@@ -0,0 +1,200 @@
++/*
++ * Buttons for BoC
++ *
++ * Copyright (C) 2009, Bollore telecom (www.bolloretelecom.eu).
++ *
++ * Jeremy Lainé <jeremy.laine@bolloretelecom.eu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ */
++
++#include <linux/init.h>
++#include <linux/gpio.h>
++#include <linux/input-polldev.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#define BUTTONS_POLL_INTERVAL 30 /* msec */
++
++static unsigned char input_gpio[] = {
++ 231, // reset button
++};
++
++static unsigned short input_keymap[] = {
++ KEY_ESC,
++};
++
++struct buttons_dev {
++ struct input_polled_dev *poll_dev;
++ unsigned short keymap[ARRAY_SIZE(input_keymap)];
++ int state[ARRAY_SIZE(input_keymap)];
++};
++
++/*
++ * Buttons events handling
++ */
++
++static void handle_buttons(struct input_polled_dev *dev)
++{
++ int i, value;
++ struct buttons_dev *bdev = dev->private;
++ struct input_dev *input = dev->input;
++
++ // read GPIO
++ for (i = 0; i < ARRAY_SIZE(input_keymap); i++)
++ {
++ value = gpio_get_value(input_gpio[i]);
++ if (value != bdev->state[i])
++ {
++ input_event(input, EV_MSC, MSC_SCAN, i);
++ input_report_key(input, input_keymap[i], value);
++ input_sync(input);
++ bdev->state[i] = value;
++ }
++ }
++}
++
++/*
++ * Device initialisation
++ */
++
++static int __devinit boc_buttons_probe(struct platform_device *pdev)
++{
++ struct buttons_dev *bdev;
++ struct input_polled_dev *poll_dev;
++ struct input_dev *input;
++ int error, i;
++
++ for (i = 0; i < ARRAY_SIZE(input_keymap); i++)
++ {
++ if (gpio_request(input_gpio[i], NULL) < 0)
++ return -ENODEV;
++ }
++
++ bdev = kzalloc(sizeof(struct buttons_dev), GFP_KERNEL);
++ if (!bdev)
++ return -ENOMEM;
++
++ poll_dev = input_allocate_polled_device();
++ if (!poll_dev) {
++ error = -ENOMEM;
++ goto out_allocated;
++ }
++
++ memcpy(bdev->keymap, input_keymap, sizeof(bdev->keymap));
++
++ poll_dev->private = bdev;
++ poll_dev->poll = handle_buttons;
++ poll_dev->poll_interval = BUTTONS_POLL_INTERVAL;
++
++ input = poll_dev->input;
++ input->name = "BoC buttons";
++ input->phys = "boc/input0";
++ input->id.bustype = BUS_HOST;
++ input->dev.parent = &pdev->dev;
++
++ input->keycode = bdev->keymap;
++ input->keycodemax = ARRAY_SIZE(bdev->keymap);
++ input->keycodesize = sizeof(unsigned short);
++
++ input_set_capability(input, EV_MSC, MSC_SCAN);
++ set_bit(EV_KEY, input->evbit);
++
++ bdev->poll_dev = poll_dev;
++ dev_set_drvdata(&pdev->dev, bdev);
++
++ error = input_register_polled_device(poll_dev);
++ if (error < 0)
++ goto out_polled;
++
++ return 0;
++
++out_polled:
++ input_free_polled_device(poll_dev);
++out_allocated:
++ kfree(bdev);
++ return error;
++}
++
++static int __devexit boc_buttons_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct buttons_dev *bdev = dev_get_drvdata(dev);
++ int i;
++
++ input_unregister_polled_device(bdev->poll_dev);
++ input_free_polled_device(bdev->poll_dev);
++ kfree(bdev);
++ dev_set_drvdata(dev, NULL);
++
++ for (i = 0; i < ARRAY_SIZE(input_keymap); i++)
++ gpio_free(input_gpio[i]);
++
++ return 0;
++}
++
++/*
++ * Driver initialisation
++ */
++
++static struct platform_driver boc_buttons_driver = {
++ .probe = boc_buttons_probe,
++ .remove = __devexit_p(boc_buttons_remove),
++ .driver = {
++ .name = "boc-btns",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_device *boc_buttons_device;
++
++static int __init boc_buttons_init(void)
++{
++ int err;
++
++ err = platform_driver_register(&boc_buttons_driver);
++ if (err)
++ return err;
++
++ boc_buttons_device = platform_device_alloc("boc-btns", -1);
++ if (!boc_buttons_device) {
++ err = -ENOMEM;
++ goto err_unregister_driver;
++ }
++
++ err = platform_device_add(boc_buttons_device);
++ if (err)
++ goto err_free_device;
++
++ return 0;
++
++err_free_device:
++ platform_device_put(boc_buttons_device);
++err_unregister_driver:
++ platform_driver_unregister(&boc_buttons_driver);
++ return err;
++}
++
++static void __exit boc_buttons_exit(void)
++{
++ platform_device_unregister(boc_buttons_device);
++ platform_driver_unregister(&boc_buttons_driver);
++}
++
++MODULE_AUTHOR("Jeremy Laine <jeremy.laine@m4x.org>");
++MODULE_DESCRIPTION("BoC input driver");
++MODULE_LICENSE("GPL");
++module_init(boc_buttons_init);
++module_exit(boc_buttons_exit);
diff --git a/recipes/linux/linux-2.6.31/boc01/defconfig b/recipes/linux/linux-2.6.31/boc01/defconfig
index ad7856ce85..56e10a04a0 100644
--- a/recipes/linux/linux-2.6.31/boc01/defconfig
+++ b/recipes/linux/linux-2.6.31/boc01/defconfig
@@ -1089,6 +1089,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_CM109 is not set
# CONFIG_INPUT_UINPUT is not set
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+CONFIG_INPUT_BOC_BTNS=y
CONFIG_INPUT_CAPSENSE_BTNS=y
#
diff --git a/recipes/linux/linux_2.6.31.bb b/recipes/linux/linux_2.6.31.bb
index 0956afdf75..d908326016 100644
--- a/recipes/linux/linux_2.6.31.bb
+++ b/recipes/linux/linux_2.6.31.bb
@@ -30,6 +30,7 @@ SRC_URI_append_boc01 = "\
file://011-091028-gpio.patch;patch=1 \
file://012-091019-capsense.patch;patch=1 \
file://013-091015-lcd.patch;patch=1 \
+ file://014-091030-buttons.patch;patch=1 \
"
SRC_URI_append_collie = "\