From 677508fba07647c0b29f41434785383ebd6ea7f3 Mon Sep 17 00:00:00 2001 From: juhosg Date: Tue, 5 Aug 2008 09:52:23 +0000 Subject: [kernel] modules/gpio_dev: move to drivers/char/ on older kernels as well, and create a package for it git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12133 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/kernel/modules/other.mk | 16 ++ target/linux/generic-2.6/config-2.6.23 | 2 +- target/linux/generic-2.6/config-2.6.24 | 2 +- target/linux/generic-2.6/config-2.6.25 | 2 +- target/linux/generic-2.6/config-2.6.26 | 2 +- target/linux/generic-2.6/config-default | 1 + .../generic-2.6/files/drivers/char/gpio_dev.c | 201 +++++++++++++++++++++ .../linux/generic-2.6/files/drivers/gpio/Kconfig | 15 -- .../linux/generic-2.6/files/drivers/gpio/Makefile | 1 - .../generic-2.6/files/drivers/gpio/gpio_dev.c | 201 --------------------- .../generic-2.6/patches-2.6.23/420-gpiodev.patch | 26 +++ .../generic-2.6/patches-2.6.23/920-gpio_dev.patch | 29 --- .../generic-2.6/patches-2.6.24/420-gpiodev.patch | 26 +++ .../generic-2.6/patches-2.6.24/920-gpio_dev.patch | 29 --- target/linux/generic-2.6/patches/420-gpiodev.patch | 26 +++ .../linux/pxa/patches-2.6.21/011-proc-gpio.patch | 55 ++---- 16 files changed, 313 insertions(+), 321 deletions(-) create mode 100644 target/linux/generic-2.6/files/drivers/char/gpio_dev.c delete mode 100644 target/linux/generic-2.6/files/drivers/gpio/Kconfig delete mode 100644 target/linux/generic-2.6/files/drivers/gpio/Makefile delete mode 100644 target/linux/generic-2.6/files/drivers/gpio/gpio_dev.c create mode 100644 target/linux/generic-2.6/patches-2.6.23/420-gpiodev.patch delete mode 100644 target/linux/generic-2.6/patches-2.6.23/920-gpio_dev.patch create mode 100644 target/linux/generic-2.6/patches-2.6.24/420-gpiodev.patch delete mode 100644 target/linux/generic-2.6/patches-2.6.24/920-gpio_dev.patch create mode 100644 target/linux/generic-2.6/patches/420-gpiodev.patch diff --git a/package/kernel/modules/other.mk b/package/kernel/modules/other.mk index 925f87b9e7..3b8a3b3146 100644 --- a/package/kernel/modules/other.mk +++ b/package/kernel/modules/other.mk @@ -432,6 +432,22 @@ endef $(eval $(call KernelPackage,ledtrig-morse)) +define KernelPackage/gpio-dev + SUBMENU:=$(OTHER_MENU) + TITLE:=Generic GPIO char device support + DEPENDS:=@GPIO_SUPPORT + KCONFIG:=CONFIG_GPIO_DEVICE + FILES:=$(LINUX_DIR)/drivers/char/gpio_dev.$(LINUX_KMOD_SUFFIX) + AUTOLOAD:=$(call AutoLoad,40,gpio_dev) +endef + +define KernelPackage/gpio-dev/description + Kernel module to allows control of GPIO pins using a character device. +endef + +$(eval $(call KernelPackage,gpio-dev)) + + define KernelPackage/nsc-gpio SUBMENU:=$(OTHER_MENU) TITLE:=Natsemi GPIO support diff --git a/target/linux/generic-2.6/config-2.6.23 b/target/linux/generic-2.6/config-2.6.23 index 2f479f1ff3..0d9352b759 100644 --- a/target/linux/generic-2.6/config-2.6.23 +++ b/target/linux/generic-2.6/config-2.6.23 @@ -355,6 +355,7 @@ CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_TIME=y # CONFIG_GFS2_FS is not set +CONFIG_GPIO_DEVICE=m # CONFIG_HAMACHI is not set CONFIG_HAMRADIO=y # CONFIG_HAPPYMEAL is not set @@ -1754,4 +1755,3 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_ZLIB_INFLATE=y CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA_FLAG=1 -# CONFIG_GPIO_DEVICE is not set diff --git a/target/linux/generic-2.6/config-2.6.24 b/target/linux/generic-2.6/config-2.6.24 index c9036f97e3..f6d0a46c75 100644 --- a/target/linux/generic-2.6/config-2.6.24 +++ b/target/linux/generic-2.6/config-2.6.24 @@ -365,6 +365,7 @@ CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_TIME=y # CONFIG_GFS2_FS is not set +CONFIG_GPIO_DEVICE=m # CONFIG_HAMACHI is not set CONFIG_HAMRADIO=y # CONFIG_HAPPYMEAL is not set @@ -1806,4 +1807,3 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_ZLIB_INFLATE=y CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA_FLAG=1 -# CONFIG_GPIO_DEVICE is not set diff --git a/target/linux/generic-2.6/config-2.6.25 b/target/linux/generic-2.6/config-2.6.25 index 097b5a6750..41836c7d6b 100644 --- a/target/linux/generic-2.6/config-2.6.25 +++ b/target/linux/generic-2.6/config-2.6.25 @@ -375,6 +375,7 @@ CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_TIME=y # CONFIG_GFS2_FS is not set +CONFIG_GPIO_DEVICE=m # CONFIG_GROUP_SCHED is not set # CONFIG_HAMACHI is not set CONFIG_HAMRADIO=y @@ -1856,4 +1857,3 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_ZLIB_INFLATE=y CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA_FLAG=1 -# CONFIG_GPIO_DEVICE is not set diff --git a/target/linux/generic-2.6/config-2.6.26 b/target/linux/generic-2.6/config-2.6.26 index daffb987b0..7582e47d18 100644 --- a/target/linux/generic-2.6/config-2.6.26 +++ b/target/linux/generic-2.6/config-2.6.26 @@ -387,6 +387,7 @@ CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_TIME=y # CONFIG_GFS2_FS is not set +CONFIG_GPIO_DEVICE=m # CONFIG_GROUP_SCHED is not set # CONFIG_HAMACHI is not set CONFIG_HAMRADIO=y @@ -1900,4 +1901,3 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_ZLIB_INFLATE=y CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA_FLAG=1 -# CONFIG_GPIO_DEVICE is not set diff --git a/target/linux/generic-2.6/config-default b/target/linux/generic-2.6/config-default index eb3e738faf..1908e5aade 100644 --- a/target/linux/generic-2.6/config-default +++ b/target/linux/generic-2.6/config-default @@ -327,6 +327,7 @@ CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_TIME=y # CONFIG_GFS2_FS is not set +CONFIG_GPIO_DEVICE=m # CONFIG_HAMACHI is not set CONFIG_HAMRADIO=y # CONFIG_HAPPYMEAL is not set diff --git a/target/linux/generic-2.6/files/drivers/char/gpio_dev.c b/target/linux/generic-2.6/files/drivers/char/gpio_dev.c new file mode 100644 index 0000000000..48ef76f8a9 --- /dev/null +++ b/target/linux/generic-2.6/files/drivers/char/gpio_dev.c @@ -0,0 +1,201 @@ +/* + * character device wrapper for generic gpio layer + * + * 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., 59 Temple Place, Suite 330, Boston, MA02111-1307USA + * + * Feedback, Bugs... blogic@openwrt.org + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRVNAME "gpiodev" +#define DEVNAME "gpio" + +static int dev_major; +static unsigned int gpio_access_mask; +static struct class *gpio_class; + +/* Counter is 1, if the device is not opened and zero (or less) if opened. */ +static atomic_t gpio_open_cnt = ATOMIC_INIT(1); + +static int +gpio_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg) +{ + int retval = 0; + + if (((1 << arg) & gpio_access_mask) != (1 << arg)) + { + retval = -EINVAL; + goto out; + } + + switch (cmd) + { + case GPIO_GET: + retval = gpio_get_value(arg); + break; + + case GPIO_SET: + gpio_set_value(arg, 1); + break; + + case GPIO_CLEAR: + gpio_set_value(arg, 0); + break; + + case GPIO_DIR_IN: + gpio_direction_input(arg); + break; + + case GPIO_DIR_OUT: + gpio_direction_output(arg, 0); + break; + + default: + retval = -EINVAL; + break; + } + +out: + return retval; +} + +static int +gpio_open(struct inode *inode, struct file *file) +{ + int result = 0; + unsigned int dev_minor = MINOR(inode->i_rdev); + + if (dev_minor != 0) + { + printk(KERN_ERR DRVNAME ": trying to access unknown minor device -> %d\n", dev_minor); + result = -ENODEV; + goto out; + } + + /* FIXME: We should really allow multiple applications to open the device + * at the same time, as long as the apps access different IO pins. + * The generic gpio-registration functions can be used for that. + * Two new IOCTLs have to be introduced for that. Need to check userspace + * compatibility first. --mb */ + if (!atomic_dec_and_test(&gpio_open_cnt)) { + atomic_inc(&gpio_open_cnt); + printk(KERN_ERR DRVNAME ": Device with minor ID %d already in use\n", dev_minor); + result = -EBUSY; + goto out; + } + +out: + return result; +} + +static int +gpio_close(struct inode * inode, struct file * file) +{ + smp_mb__before_atomic_inc(); + atomic_inc(&gpio_open_cnt); + + return 0; +} + +struct file_operations gpio_fops = { + ioctl: gpio_ioctl, + open: gpio_open, + release: gpio_close +}; + +static int +gpio_probe(struct platform_device *dev) +{ + int result = 0; + + dev_major = register_chrdev(0, DEVNAME, &gpio_fops); + if (!dev_major) + { + printk(KERN_ERR DRVNAME ": Error whilst opening %s \n", DEVNAME); + result = -ENODEV; + goto out; + } + + gpio_class = class_create(THIS_MODULE, DEVNAME); + class_device_create(gpio_class, NULL, MKDEV(dev_major, 0), NULL, DEVNAME); + + printk(KERN_INFO DRVNAME ": gpio device registered with major %d\n", dev_major); + + if (dev->num_resources != 1) + { + printk(KERN_ERR DRVNAME ": device may only have 1 resource\n"); + result = -ENODEV; + goto out; + } + + gpio_access_mask = dev->resource[0].start; + + printk(KERN_INFO DRVNAME ": gpio platform device registered with access mask %08X\n", gpio_access_mask); +out: + return result; +} + +static int +gpio_remove(struct platform_device *dev) +{ + unregister_chrdev(dev_major, DEVNAME); + return 0; +} + +static struct +platform_driver gpio_driver = { + .probe = gpio_probe, + .remove = gpio_remove, + .driver = { + .name = "GPIODEV", + .owner = THIS_MODULE, + }, +}; + +static int __init +gpio_mod_init(void) +{ + int ret = platform_driver_register(&gpio_driver); + if (ret) + printk(KERN_INFO DRVNAME ": Error registering platfom driver!"); + + return ret; +} + +static void __exit +gpio_mod_exit(void) +{ + platform_driver_unregister(&gpio_driver); +} + +module_init (gpio_mod_init); +module_exit (gpio_mod_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("John Crispin / OpenWrt"); +MODULE_DESCRIPTION("Character device for for generic gpio api"); diff --git a/target/linux/generic-2.6/files/drivers/gpio/Kconfig b/target/linux/generic-2.6/files/drivers/gpio/Kconfig deleted file mode 100644 index d97fc1b4f1..0000000000 --- a/target/linux/generic-2.6/files/drivers/gpio/Kconfig +++ /dev/null @@ -1,15 +0,0 @@ -menuconfig NEW_GPIO - bool "GPIO Support" - depends on GENERIC_GPIO - help - Say Y to enable Linux GPIO device support. This allows control of - GPIO pins using a character device - -if NEW_GPIO - -config GPIO_DEVICE - tristate "GPIO device support" - help - This option enables the gpio character device - -endif # NEW_GPIO diff --git a/target/linux/generic-2.6/files/drivers/gpio/Makefile b/target/linux/generic-2.6/files/drivers/gpio/Makefile deleted file mode 100644 index 166c5c7434..0000000000 --- a/target/linux/generic-2.6/files/drivers/gpio/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_GPIO_DEVICE) += gpio_dev.o diff --git a/target/linux/generic-2.6/files/drivers/gpio/gpio_dev.c b/target/linux/generic-2.6/files/drivers/gpio/gpio_dev.c deleted file mode 100644 index 48ef76f8a9..0000000000 --- a/target/linux/generic-2.6/files/drivers/gpio/gpio_dev.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * character device wrapper for generic gpio layer - * - * 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., 59 Temple Place, Suite 330, Boston, MA02111-1307USA - * - * Feedback, Bugs... blogic@openwrt.org - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DRVNAME "gpiodev" -#define DEVNAME "gpio" - -static int dev_major; -static unsigned int gpio_access_mask; -static struct class *gpio_class; - -/* Counter is 1, if the device is not opened and zero (or less) if opened. */ -static atomic_t gpio_open_cnt = ATOMIC_INIT(1); - -static int -gpio_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg) -{ - int retval = 0; - - if (((1 << arg) & gpio_access_mask) != (1 << arg)) - { - retval = -EINVAL; - goto out; - } - - switch (cmd) - { - case GPIO_GET: - retval = gpio_get_value(arg); - break; - - case GPIO_SET: - gpio_set_value(arg, 1); - break; - - case GPIO_CLEAR: - gpio_set_value(arg, 0); - break; - - case GPIO_DIR_IN: - gpio_direction_input(arg); - break; - - case GPIO_DIR_OUT: - gpio_direction_output(arg, 0); - break; - - default: - retval = -EINVAL; - break; - } - -out: - return retval; -} - -static int -gpio_open(struct inode *inode, struct file *file) -{ - int result = 0; - unsigned int dev_minor = MINOR(inode->i_rdev); - - if (dev_minor != 0) - { - printk(KERN_ERR DRVNAME ": trying to access unknown minor device -> %d\n", dev_minor); - result = -ENODEV; - goto out; - } - - /* FIXME: We should really allow multiple applications to open the device - * at the same time, as long as the apps access different IO pins. - * The generic gpio-registration functions can be used for that. - * Two new IOCTLs have to be introduced for that. Need to check userspace - * compatibility first. --mb */ - if (!atomic_dec_and_test(&gpio_open_cnt)) { - atomic_inc(&gpio_open_cnt); - printk(KERN_ERR DRVNAME ": Device with minor ID %d already in use\n", dev_minor); - result = -EBUSY; - goto out; - } - -out: - return result; -} - -static int -gpio_close(struct inode * inode, struct file * file) -{ - smp_mb__before_atomic_inc(); - atomic_inc(&gpio_open_cnt); - - return 0; -} - -struct file_operations gpio_fops = { - ioctl: gpio_ioctl, - open: gpio_open, - release: gpio_close -}; - -static int -gpio_probe(struct platform_device *dev) -{ - int result = 0; - - dev_major = register_chrdev(0, DEVNAME, &gpio_fops); - if (!dev_major) - { - printk(KERN_ERR DRVNAME ": Error whilst opening %s \n", DEVNAME); - result = -ENODEV; - goto out; - } - - gpio_class = class_create(THIS_MODULE, DEVNAME); - class_device_create(gpio_class, NULL, MKDEV(dev_major, 0), NULL, DEVNAME); - - printk(KERN_INFO DRVNAME ": gpio device registered with major %d\n", dev_major); - - if (dev->num_resources != 1) - { - printk(KERN_ERR DRVNAME ": device may only have 1 resource\n"); - result = -ENODEV; - goto out; - } - - gpio_access_mask = dev->resource[0].start; - - printk(KERN_INFO DRVNAME ": gpio platform device registered with access mask %08X\n", gpio_access_mask); -out: - return result; -} - -static int -gpio_remove(struct platform_device *dev) -{ - unregister_chrdev(dev_major, DEVNAME); - return 0; -} - -static struct -platform_driver gpio_driver = { - .probe = gpio_probe, - .remove = gpio_remove, - .driver = { - .name = "GPIODEV", - .owner = THIS_MODULE, - }, -}; - -static int __init -gpio_mod_init(void) -{ - int ret = platform_driver_register(&gpio_driver); - if (ret) - printk(KERN_INFO DRVNAME ": Error registering platfom driver!"); - - return ret; -} - -static void __exit -gpio_mod_exit(void) -{ - platform_driver_unregister(&gpio_driver); -} - -module_init (gpio_mod_init); -module_exit (gpio_mod_exit); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("John Crispin / OpenWrt"); -MODULE_DESCRIPTION("Character device for for generic gpio api"); diff --git a/target/linux/generic-2.6/patches-2.6.23/420-gpiodev.patch b/target/linux/generic-2.6/patches-2.6.23/420-gpiodev.patch new file mode 100644 index 0000000000..1508685b65 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.23/420-gpiodev.patch @@ -0,0 +1,26 @@ +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -970,6 +970,13 @@ + + If compiled as a module, it will be called cs5535_gpio. + ++config GPIO_DEVICE ++ tristate "GPIO device support" ++ depends on GENERIC_GPIO ++ help ++ Say Y to enable Linux GPIO device support. This allows control of ++ GPIO pins using a character device ++ + config GPIO_VR41XX + tristate "NEC VR4100 series General-purpose I/O Unit support" + depends on CPU_VR41XX +--- a/drivers/char/Makefile ++++ b/drivers/char/Makefile +@@ -93,6 +93,7 @@ + obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o + obj-$(CONFIG_NSC_GPIO) += nsc_gpio.o + obj-$(CONFIG_CS5535_GPIO) += cs5535_gpio.o ++obj-$(CONFIG_GPIO_DEVICE) += gpio_dev.o + obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o + obj-$(CONFIG_GPIO_TB0219) += tb0219.o + obj-$(CONFIG_TELCLOCK) += tlclk.o diff --git a/target/linux/generic-2.6/patches-2.6.23/920-gpio_dev.patch b/target/linux/generic-2.6/patches-2.6.23/920-gpio_dev.patch deleted file mode 100644 index dcbfaf588b..0000000000 --- a/target/linux/generic-2.6/patches-2.6.23/920-gpio_dev.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1039,6 +1039,8 @@ - - source "drivers/leds/Kconfig" - -+source "drivers/gpio/Kconfig" -+ - source "drivers/media/Kconfig" - - source "drivers/video/Kconfig" ---- a/drivers/Kconfig -+++ b/drivers/Kconfig -@@ -76,6 +76,8 @@ - - source "drivers/leds/Kconfig" - -+source "drivers/gpio/Kconfig" -+ - source "drivers/infiniband/Kconfig" - - source "drivers/edac/Kconfig" ---- a/drivers/Makefile -+++ b/drivers/Makefile -@@ -89,3 +89,4 @@ - obj-$(CONFIG_HID) += hid/ - obj-$(CONFIG_PPC_PS3) += ps3/ - obj-$(CONFIG_OF) += of/ -+obj-$(CONFIG_GPIO_DEVICE) += gpio/ diff --git a/target/linux/generic-2.6/patches-2.6.24/420-gpiodev.patch b/target/linux/generic-2.6/patches-2.6.24/420-gpiodev.patch new file mode 100644 index 0000000000..98187413b3 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.24/420-gpiodev.patch @@ -0,0 +1,26 @@ +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -946,6 +946,13 @@ + + If compiled as a module, it will be called cs5535_gpio. + ++config GPIO_DEVICE ++ tristate "GPIO device support" ++ depends on GENERIC_GPIO ++ help ++ Say Y to enable Linux GPIO device support. This allows control of ++ GPIO pins using a character device ++ + config GPIO_VR41XX + tristate "NEC VR4100 series General-purpose I/O Unit support" + depends on CPU_VR41XX +--- a/drivers/char/Makefile ++++ b/drivers/char/Makefile +@@ -93,6 +93,7 @@ + obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o + obj-$(CONFIG_NSC_GPIO) += nsc_gpio.o + obj-$(CONFIG_CS5535_GPIO) += cs5535_gpio.o ++obj-$(CONFIG_GPIO_DEVICE) += gpio_dev.o + obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o + obj-$(CONFIG_GPIO_TB0219) += tb0219.o + obj-$(CONFIG_TELCLOCK) += tlclk.o diff --git a/target/linux/generic-2.6/patches-2.6.24/920-gpio_dev.patch b/target/linux/generic-2.6/patches-2.6.24/920-gpio_dev.patch deleted file mode 100644 index e0a8aa3f55..0000000000 --- a/target/linux/generic-2.6/patches-2.6.24/920-gpio_dev.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1054,6 +1054,8 @@ - - source "drivers/mfd/Kconfig" - -+source "drivers/gpio/Kconfig" -+ - source "drivers/media/Kconfig" - - source "drivers/video/Kconfig" ---- a/drivers/Kconfig -+++ b/drivers/Kconfig -@@ -78,6 +78,8 @@ - - source "drivers/leds/Kconfig" - -+source "drivers/gpio/Kconfig" -+ - source "drivers/infiniband/Kconfig" - - source "drivers/edac/Kconfig" ---- a/drivers/Makefile -+++ b/drivers/Makefile -@@ -91,3 +91,4 @@ - obj-$(CONFIG_OF) += of/ - obj-$(CONFIG_SSB) += ssb/ - obj-$(CONFIG_VIRTIO) += virtio/ -+obj-$(CONFIG_GPIO_DEVICE) += gpio/ diff --git a/target/linux/generic-2.6/patches/420-gpiodev.patch b/target/linux/generic-2.6/patches/420-gpiodev.patch new file mode 100644 index 0000000000..a4f2236f70 --- /dev/null +++ b/target/linux/generic-2.6/patches/420-gpiodev.patch @@ -0,0 +1,26 @@ +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -984,6 +984,13 @@ + + If compiled as a module, it will be called cs5535_gpio. + ++config GPIO_DEVICE ++ tristate "GPIO device support" ++ depends on GENERIC_GPIO ++ help ++ Say Y to enable Linux GPIO device support. This allows control of ++ GPIO pins using a character device ++ + config GPIO_VR41XX + tristate "NEC VR4100 series General-purpose I/O Unit support" + depends on CPU_VR41XX +--- a/drivers/char/Makefile ++++ b/drivers/char/Makefile +@@ -90,6 +90,7 @@ + obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o + obj-$(CONFIG_NSC_GPIO) += nsc_gpio.o + obj-$(CONFIG_CS5535_GPIO) += cs5535_gpio.o ++obj-$(CONFIG_GPIO_DEVICE) += gpio_dev.o + obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o + obj-$(CONFIG_TANBAC_TB0219) += tb0219.o + obj-$(CONFIG_TELCLOCK) += tlclk.o diff --git a/target/linux/pxa/patches-2.6.21/011-proc-gpio.patch b/target/linux/pxa/patches-2.6.21/011-proc-gpio.patch index 8b4383cd51..479a070b55 100644 --- a/target/linux/pxa/patches-2.6.21/011-proc-gpio.patch +++ b/target/linux/pxa/patches-2.6.21/011-proc-gpio.patch @@ -1,8 +1,6 @@ -Index: linux-2.6.21.7/arch/arm/Kconfig -=================================================================== ---- linux-2.6.21.7.orig/arch/arm/Kconfig -+++ linux-2.6.21.7/arch/arm/Kconfig -@@ -505,6 +505,8 @@ config PCI_HOST_VIA82C505 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -505,6 +505,8 @@ depends on PCI && ARCH_SHARK default y @@ -11,38 +9,16 @@ Index: linux-2.6.21.7/arch/arm/Kconfig source "drivers/pci/Kconfig" source "drivers/pcmcia/Kconfig" -Index: linux-2.6.21.7/drivers/Makefile -=================================================================== ---- linux-2.6.21.7.orig/drivers/Makefile -+++ linux-2.6.21.7/drivers/Makefile -@@ -81,3 +81,4 @@ obj-$(CONFIG_GENERIC_TIME) += clocksourc +--- a/drivers/Makefile ++++ b/drivers/Makefile +@@ -81,3 +81,4 @@ obj-$(CONFIG_DMA_ENGINE) += dma/ obj-$(CONFIG_HID) += hid/ obj-$(CONFIG_PPC_PS3) += ps3/ +obj-$(CONFIG_PROC_GPIO) += gpio/ -Index: linux-2.6.21.7/drivers/gpio/Kconfig -=================================================================== ---- linux-2.6.21.7.orig/drivers/gpio/Kconfig -+++ linux-2.6.21.7/drivers/gpio/Kconfig -@@ -2,14 +2,27 @@ menuconfig NEW_GPIO - bool "GPIO Support" - depends on GENERIC_GPIO - help -- Say Y to enable Linux GPIO device support. This allows control of -- GPIO pins using a character device -+ Say Y to enable Linux GPIO device support. This allows control of -+ GPIO pins using a character device - - if NEW_GPIO - - config GPIO_DEVICE - tristate "GPIO device support" - help -- This option enables the gpio character device -+ This option enables the gpio character device - - endif # NEW_GPIO -+ +--- /dev/null ++++ b/drivers/gpio/Kconfig +@@ -0,0 +1,13 @@ +config PROC_GPIO + tristate "GPIO /proc interface" + depends on PXA25x || PXA27x @@ -55,19 +31,14 @@ Index: linux-2.6.21.7/drivers/gpio/Kconfig + depends on PROC_GPIO + help + This enables printk logging of activity done through /proc/gpio -Index: linux-2.6.21.7/drivers/gpio/Makefile -=================================================================== ---- linux-2.6.21.7.orig/drivers/gpio/Makefile -+++ linux-2.6.21.7/drivers/gpio/Makefile -@@ -1 +1,4 @@ - obj-$(CONFIG_GPIO_DEVICE) += gpio_dev.o + +--- /dev/null ++++ b/drivers/gpio/Makefile +@@ -0,0 +1,2 @@ +# Expose GPIOs under /proc +obj-$(CONFIG_PROC_GPIO) += proc_gpio.o -Index: linux-2.6.21.7/drivers/gpio/proc_gpio.c -=================================================================== --- /dev/null -+++ linux-2.6.21.7/drivers/gpio/proc_gpio.c ++++ b/drivers/gpio/proc_gpio.c @@ -0,0 +1,276 @@ +/* + * -- cgit v1.2.3