[kernel] modules/gpio_dev: move to drivers/char/ on older kernels as well, and create...
authorGabor Juhos <juhosg@openwrt.org>
Tue, 5 Aug 2008 09:52:23 +0000 (09:52 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 5 Aug 2008 09:52:23 +0000 (09:52 +0000)
SVN-Revision: 12133

16 files changed:
package/kernel/modules/other.mk
target/linux/generic-2.6/config-2.6.23
target/linux/generic-2.6/config-2.6.24
target/linux/generic-2.6/config-2.6.25
target/linux/generic-2.6/config-2.6.26
target/linux/generic-2.6/config-default
target/linux/generic-2.6/files/drivers/char/gpio_dev.c [new file with mode: 0644]
target/linux/generic-2.6/files/drivers/gpio/Kconfig [deleted file]
target/linux/generic-2.6/files/drivers/gpio/Makefile [deleted file]
target/linux/generic-2.6/files/drivers/gpio/gpio_dev.c [deleted file]
target/linux/generic-2.6/patches-2.6.23/420-gpiodev.patch [new file with mode: 0644]
target/linux/generic-2.6/patches-2.6.23/920-gpio_dev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.24/420-gpiodev.patch [new file with mode: 0644]
target/linux/generic-2.6/patches-2.6.24/920-gpio_dev.patch [deleted file]
target/linux/generic-2.6/patches/420-gpiodev.patch [new file with mode: 0644]
target/linux/pxa/patches-2.6.21/011-proc-gpio.patch

index 925f87b..3b8a3b3 100644 (file)
@@ -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
index 2f479f1..0d9352b 100644 (file)
@@ -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
index c9036f9..f6d0a46 100644 (file)
@@ -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
index 097b5a6..41836c7 100644 (file)
@@ -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
index daffb98..7582e47 100644 (file)
@@ -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
index eb3e738..1908e5a 100644 (file)
@@ -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 (file)
index 0000000..48ef76f
--- /dev/null
@@ -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 <linux/module.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <asm/uaccess.h>
+#include <asm/io.h>
+#include <asm/gpio.h>
+#include <asm/atomic.h>
+#include <linux/init.h>
+#include <linux/genhd.h>
+#include <linux/device.h>
+#include <linux/platform_device.h>
+#include <linux/gpio_dev.h>
+
+#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 (file)
index d97fc1b..0000000
+++ /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 (file)
index 166c5c7..0000000
+++ /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 (file)
index 48ef76f..0000000
+++ /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 <linux/module.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
-#include <asm/gpio.h>
-#include <asm/atomic.h>
-#include <linux/init.h>
-#include <linux/genhd.h>
-#include <linux/device.h>
-#include <linux/platform_device.h>
-#include <linux/gpio_dev.h>
-
-#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 (file)
index 0000000..1508685
--- /dev/null
@@ -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 (file)
index dcbfaf5..0000000
+++ /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 (file)
index 0000000..9818741
--- /dev/null
@@ -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 (file)
index e0a8aa3..0000000
+++ /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 (file)
index 0000000..a4f2236
--- /dev/null
@@ -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
index 8b4383c..479a070 100644 (file)
@@ -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 @@
 +/*
 + *