| 
 
| static unsigned long led_table [] = {
 S3C2410_GPB(5),
 S3C2410_GPB(6),
 S3C2410_GPB(7),
 S3C2410_GPB(8),
 };
 
 static unsigned int led_cfg_table [] = {
 S3C2410_GPIO_OUTPUT,
 S3C2410_GPIO_OUTPUT,
 S3C2410_GPIO_OUTPUT,
 S3C2410_GPIO_OUTPUT,
 };
 
 static int sbc2440_leds_ioctl(
 struct inode *inode,
 struct file *file,
 unsigned int cmd,
 unsigned long arg)
 {
 switch(cmd) {
 case 0:
 case 1:
 if (arg > 4) {
 return -EINVAL;
 }
 s3c2410_gpio_setpin(led_table[arg], !cmd);
 return 0;
 default:
 return -EINVAL;
 }
 }
 
 static struct file_operations dev_fops = {
 .owner        =        THIS_MODULE,
 .ioctl        =        sbc2440_leds_ioctl,
 };
 
 static struct miscdevice misc = {
 .minor = MISC_DYNAMIC_MINOR,
 .name = DEVICE_NAME,
 .fops = &dev_fops,
 };
 
 static int __init led_test_dev_init(void)
 {
 int ret;
 
 int i;
 
 for (i = 0; i < 4; i++) {
 s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
 s3c2410_gpio_setpin(led_table[i], 0);
 }
 
 ret = misc_register(&misc);
 
 printk (DEVICE_NAME"\tinitialized\n");
 
 return ret;
 }
 
 static void __exit led_test_dev_exit(void)
 {
 misc_deregister(&misc);
 }
 
 module_init(led_test_dev_init);
 module_exit(led_test_dev_exit);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("FriendlyARM Inc.");
 一个例子中的LED驱动,看着和网络上大部分不同呢,也没有虚拟内存映射,也没有write函数
 | 
 |