/* * 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 #include #define SYSCTL_MOD_CTL0 (volatile unsigned int *)0xBC04A008 #define SYSCTL_MOD_CTL1 (volatile unsigned int *)0xBC04A00C #define SYSCTL_IOMUX_CFG0 (volatile unsigned int *)0xBC04A0B0 #define SYSCTL_IOMUX_CFG1 (volatile unsigned int *)0xBC04A0B4 #define GPIO79 79 #define MEMDEV_IOC_MAGIC 'k' #define GPIO79_HI _IO(MEMDEV_IOC_MAGIC,1) #define GPIO79_LO _IO(MEMDEV_IOC_MAGIC,2) //gpio初始化 void ant_gpio_init(void) { //GPIO模块使能 writel(readl(SYSCTL_MOD_CTL0) | (1<<27), SYSCTL_MOD_CTL0); gpio_request(GPIO79, "GPIO79"); gpio_direction_output(GPIO79,1); } static int ant_open(struct inode *inode, struct file *file) { printk(KERN_ALERT"GPIO OPEN OK\n"); return 0; } static int ant_close(struct inode *inode, struct file *file) { return 0; } static ssize_t ant_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) { return 0; } static long ant_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { //int ret = 0; switch(cmd) { case GPIO79_HI: gpio_set_value(GPIO79,1); break; case GPIO79_LO: gpio_set_value(GPIO79,0); break; default: printk(KERN_ALERT"cmd error!\n"); return -EINVAL; } return -1; } static const struct file_operations ant_ops = { .owner = THIS_MODULE, .open = ant_open, .release = ant_close, .read = ant_read, .unlocked_ioctl = ant_ioctl, }; static struct miscdevice ant_miscdev = { .minor = MISC_DYNAMIC_MINOR, .name = "ant_gpio", .fops = &ant_ops, }; static int __init ant_init(void) { ant_gpio_init(); if (misc_register(&ant_miscdev)) { printk(KERN_ALERT"#######: Couldn't register device 0, %d.\n", 255); return -EBUSY; } return 0; } static void __exit ant_exit(void) { misc_deregister(&ant_miscdev); } module_init(ant_init); module_exit(ant_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Linss");