diff options
author | John Crispin <blogic@openwrt.org> | 2012-10-11 11:58:09 +0000 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2012-10-11 11:58:09 +0000 |
commit | 44090b37e4d39ed3f093610ea3b2dc5b649467b9 (patch) | |
tree | f085577e3586c3f135b1a383104e0d4755a98cc5 /target/linux/generic | |
parent | f202215a282b80861055fbc068a8525f079cc8c4 (diff) | |
download | master-187ad058-44090b37e4d39ed3f093610ea3b2dc5b649467b9.tar.gz master-187ad058-44090b37e4d39ed3f093610ea3b2dc5b649467b9.tar.bz2 master-187ad058-44090b37e4d39ed3f093610ea3b2dc5b649467b9.zip |
[kernel] gpiodev/gpioctl RIP
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33725 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic')
-rw-r--r-- | target/linux/generic/config-3.3 | 1 | ||||
-rw-r--r-- | target/linux/generic/files/drivers/char/gpio_dev.c | 181 | ||||
-rw-r--r-- | target/linux/generic/files/include/linux/gpio_dev.h | 42 | ||||
-rw-r--r-- | target/linux/generic/patches-3.3/835-gpiodev.patch | 27 |
4 files changed, 0 insertions, 251 deletions
diff --git a/target/linux/generic/config-3.3 b/target/linux/generic/config-3.3 index e21e17f70d..d52a3a542e 100644 --- a/target/linux/generic/config-3.3 +++ b/target/linux/generic/config-3.3 @@ -801,7 +801,6 @@ CONFIG_GENERIC_TIME=y # CONFIG_GPIO_ADP5588 is not set # CONFIG_GPIO_BT8XX is not set # CONFIG_GPIO_CS5535 is not set -# CONFIG_GPIO_DEVICE is not set # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_IT8761E is not set # CONFIG_GPIO_LANGWELL is not set diff --git a/target/linux/generic/files/drivers/char/gpio_dev.c b/target/linux/generic/files/drivers/char/gpio_dev.c deleted file mode 100644 index c741573026..0000000000 --- a/target/linux/generic/files/drivers/char/gpio_dev.c +++ /dev/null @@ -1,181 +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 - * - * dpg 20100106 - */ - -#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> -#include <linux/fs.h> - -#define DRVNAME "gpiodev" -#define DEVNAME "gpio" - -static int dev_major; -static struct class *gpiodev_class; - - -/* third argument of user space ioctl ('arg' here) contains the <pin> */ -static int -gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -{ - int retval = 0; - - 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: - retval = gpio_direction_input(arg); - break; - case GPIO_DIR_OUT: - retval = gpio_direction_output(arg, 0); - break; - case GPIO_DIR_HIGH: - retval = gpio_direction_output(arg, 1); - break; - case GPIO_REQUEST: - /* should be first ioctl operation on <pin> */ - retval = gpio_request(arg, DRVNAME); - break; - case GPIO_FREE: - /* should be last ioctl operation on <pin> */ - /* may be needed first if previous user missed this ioctl */ - gpio_free(arg); - break; - case GPIO_CAN_SLEEP: - retval = gpio_cansleep(arg); - break; - default: - retval = -EINVAL; - /* = -ENOTTY; // correct return but ... */ - break; - } - return retval; -} - -/* Allow co-incident opens */ -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; - } -out: - return result; -} - -static int -gpio_close(struct inode * inode, struct file * file) -{ - /* could track all <pin>s requested by this fd and gpio_free() - * them here - */ - return 0; -} - -struct file_operations gpio_fops = { - unlocked_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; - } - gpiodev_class = class_create(THIS_MODULE, DRVNAME); - device_create(gpiodev_class, NULL, MKDEV(dev_major, 0), dev, DEVNAME); - printk(KERN_INFO DRVNAME ": gpio device registered with major %d\n", dev_major); -out: - return result; -} - -static int -gpio_remove(struct platform_device *dev) -{ - device_destroy(gpiodev_class, MKDEV(dev_major, 0)); - class_destroy(gpiodev_class); - 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!\n"); - - 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/files/include/linux/gpio_dev.h b/target/linux/generic/files/include/linux/gpio_dev.h deleted file mode 100644 index a2a4b51c78..0000000000 --- a/target/linux/generic/files/include/linux/gpio_dev.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _GPIO_DEV_H__ -#define _GPIO_DEV_H__ - -/********************************************************************* - * - * This Linux kernel header is expanded from the original driver - * (gpio_dev) by John Crispin. It provides an ioctl based interface to - * GPIO pins via the /dev/gpio char device and gpiolib within the kernel. - * The third argument to each ioctl is the GPIO pin number. - * - * This driver has been tested with lk 2.6.31 and works. The original - * driver fails quietly with this version. The protocol is now a bit - * different: the ioctl(fd, GPIO_REQUEST, <pin>) should be called - * after the open("/dev/gpio", O_RDWR) to determine if the <pin> is - * already in use. If the ioctl is successful (i.e. returns 0 for not - * in use) then the <pin> is claimed by this driver and - * ioctl(fd, GPIO_FREE, <pin>) should be called prior to close(fd) . - * - * See <kernel_source>/Documentation/gpio.txt - * Note that kernel designers prefer the use of the sysfs gpio interface. - * This char driver is easier to use from code and faster. - ********************************************************************/ - -/* This header can be included in both the user and kernel spaces */ -/* The _IO macro is defined in sys/ioctl.h */ - -#define IOC_GPIODEV_MAGIC 'B' - -#define GPIO_GET _IO(IOC_GPIODEV_MAGIC, 10) -#define GPIO_SET _IO(IOC_GPIODEV_MAGIC, 11) -#define GPIO_CLEAR _IO(IOC_GPIODEV_MAGIC, 12) -#define GPIO_DIR_IN _IO(IOC_GPIODEV_MAGIC, 13) -#define GPIO_DIR_OUT _IO(IOC_GPIODEV_MAGIC, 14) - /* Sets the direction out and clears the <pin> (low) */ - -#define GPIO_DIR_HIGH _IO(IOC_GPIODEV_MAGIC, 15) - /* Sets the direction out and sets the <pin> (high) */ -#define GPIO_REQUEST _IO(IOC_GPIODEV_MAGIC, 16) -#define GPIO_FREE _IO(IOC_GPIODEV_MAGIC, 17) -#define GPIO_CAN_SLEEP _IO(IOC_GPIODEV_MAGIC, 18) - -#endif diff --git a/target/linux/generic/patches-3.3/835-gpiodev.patch b/target/linux/generic/patches-3.3/835-gpiodev.patch deleted file mode 100644 index f41d5a6850..0000000000 --- a/target/linux/generic/patches-3.3/835-gpiodev.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- a/drivers/char/Kconfig -+++ b/drivers/char/Kconfig -@@ -511,6 +511,14 @@ config NSC_GPIO - pc8736x_gpio drivers. If those drivers are built as - modules, this one will be too, named nsc_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 RAW_DRIVER - tristate "RAW driver (/dev/raw/rawN)" - depends on BLOCK ---- a/drivers/char/Makefile -+++ b/drivers/char/Makefile -@@ -47,6 +47,7 @@ obj-$(CONFIG_NWFLASH) += nwflash.o - obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o - obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o - obj-$(CONFIG_NSC_GPIO) += nsc_gpio.o -+obj-$(CONFIG_GPIO_DEVICE) += gpio_dev.o - obj-$(CONFIG_GPIO_TB0219) += tb0219.o - obj-$(CONFIG_TELCLOCK) += tlclk.o - |