[oe-commits] OE Builder : linux-2.6.31: add driver for boc01 buttons

git version control git at git.openembedded.org
Tue Nov 3 17:31:01 UTC 2009


Module: openembedded.git
Branch: rpurdie/work-in-progress
Commit: 4ab9ea946965be0b9dd3d15396dd70fea78b2aad
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=4ab9ea946965be0b9dd3d15396dd70fea78b2aad

Author: OE Builder <oebuilder at waffle.bolloretelecom.eu>
Date:   Fri Oct 30 12:18:56 2009 +0100

linux-2.6.31: add driver for boc01 buttons

---

 .../linux-2.6.31/boc01/014-091030-buttons.patch    |  233 ++++++++++++++++++++
 recipes/linux/linux-2.6.31/boc01/defconfig         |    1 +
 recipes/linux/linux_2.6.31.bb                      |    1 +
 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 0000000..9e56ad1
--- /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 at 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 at 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 ad7856c..56e10a0 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 0956afd..d908326 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 = "\





More information about the Openembedded-commits mailing list