/* * gsc3280_gpioparal.c - driver for Gpio Test * 8bits out, 4bits in * * Copyright (C) 2012 Loongson Corporation * * 2013-03-15 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define GPIOLED2 87 #define LED_ON 0 #define LED_OFF 1 static int sw_open(struct inode *inode, struct file *file) { //printk(KERN_ALERT"#####################sensor open ok!!!\n"); printk(KERN_ALERT"open ok\n"); //sysctl_iomux_disable(SYSCTL_IOMUX_SCI0); gpio_request(GPIOLED2,"GPIOLED2"); gpio_direction_output(GPIOLED2,0); return 0; } static int sw_close(struct inode *inode, struct file *file) { gpio_free(GPIOLED2); return 0; } static ssize_t sw_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) { return 0; } static ssize_t sw_write(struct file *file, const char __user *buf, size_t count, loff_t *ptr) { return 0; } static long sw_ioctl( struct file *file, unsigned int cmd, unsigned long arg) { switch(cmd){ case LED_ON:{ gpio_set_value(GPIOLED2, 1); } break; case LED_OFF:{ gpio_set_value(GPIOLED2, 0); } break; default: printk(KERN_ALERT"in ioctl default!\n"); } return 0; } static const struct file_operations sw_ops = { .owner = THIS_MODULE, .open = sw_open, .release = sw_close, .read = sw_read, .write = sw_write, .unlocked_ioctl = sw_ioctl }; static struct miscdevice sw_miscdev = { MISC_DYNAMIC_MINOR, "led2", &sw_ops, }; static int __init sw_init(void) { if (misc_register(&sw_miscdev)) { printk(KERN_ALERT"###############: Couldn't register device 0, %d.\n", 255); return -EBUSY; } return 0; } static void __exit sw_exit(void) { misc_deregister(&sw_miscdev); } module_init(sw_init); module_exit(sw_exit); MODULE_LICENSE("GPL");