该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1、驱动
/*
GPIO Driver driver for EasyARM-iMX283
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#include
#define DEVICE_NAME"imx28x_led"
#define LED_GPIOMXS_PIN_TO_GPIO(PINID_LCD_D23)//for 283 287A/B
//#define LED_GPIOMXS_PIN_TO_GPIO(PINID_SAIF0_MCLK)//for 280
/*--------------------------------------------------------------------------------------------------------
*/
static int gpio_open(struct inode *inode, struct file *filp);
static int gpio_release(struct inode *inode, struct file *filp);
ssize_t gpio_write(struct file *filp, const char __user *buf, size_t count,
loff_t *f_pos);
static long gpio_ioctl(struct file *file,unsigned int command, unsigned long arg);
static int gpio_init(void);
static void gpio_exit(void);
/*--------------------------------------------------------------------------------------------------------
*/
static int gpio_open(struct inode *inode, struct file *filp)
{
gpio_request(NUC970_PB5, "led");
return 0;
}
static int gpio_release(struct inode *inode, struct file *filp)
{
gpio_free(NUC970_PB5);
return 0;
}
ssize_t gpio_write(struct file *filp, const char __user *buf, size_t count,
loff_t *f_pos)
{
char data[2];
copy_from_user(data, buf, count);
gpio_direction_output(NUC970_PB5, data[0]);
return count;
}
static long gpio_ioctl(struct file *file,unsigned int command, unsigned long arg)
{
//int data=0;
switch (command) {
case 0:
gpio_direction_output(NUC970_PB5, 0);
break;
case 1:
gpio_direction_output(NUC970_PB5, 1);
break;
}
return 0;
}
static struct file_operations gpio_fops={
.owner= THIS_MODULE,
.open = gpio_open,
.write= gpio_write,
.release= gpio_release,
.unlocked_ioctl = gpio_ioctl,
};
static struct miscdevice gpio_miscdev = {
.minor = MISC_DYNAMIC_MINOR,
.name= DEVICE_NAME,
.fops= &gpio_fops,
};
static int __init gpio_init(void)
{
misc_register(&gpio_miscdev);
printk(DEVICE_NAME" up. \n");
return 0;
}
static void __exit gpio_exit(void)
{
misc_deregister(&gpio_miscdev);
printk(DEVICE_NAME " down.\n");
}
module_init(gpio_init);
module_exit(gpio_exit);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("zhuguojun, ZhiYuan Electronics Co, Ltd.");
MODULE_DESCRIPTION("GPIO DRIVER FOR EasyARM-i.MX28xx");