嵌入式Linux设备驱动开发之:GPIO驱动程序实例

嵌入式系统 时间:2013-09-13来源:网络

staticintgpio_ioctl(structinode*inode,structfile*file,

unsignedintcmd,unsignedlongarg)

{/*ioctl函数接口:主要接口的实现。对5个GPIO设备进行控制(发亮或发声)*/

unsignedintswt=(unsignedint)arg;

switch(cmd)

{

caseLED_D09_SWT:

{

switch_gpio(S3C2410_GPF7,swt);

}

break;

caseLED_D10_SWT:

{

switch_gpio(S3C2410_GPF6,swt);

}

break;

caseLED_D11_SWT:

{

switch_gpio(S3C2410_GPF5,swt);

}

break;

caseLED_D12_SWT:

{

switch_gpio(S3C2410_GPF4,swt);

}

break;

caseBEEP_SWT:

{

switch_gpio(S3C2410_GPB0,swt);

break;

}

default:

{

printk(Unsupportedcommandn);

break;

}

}

return0;

}

staticintgpio_release(structinode*node,structfile*file)

{/*release操作函数,熄灭所有灯和关闭蜂鸣器*/

switch_gpio(S3C2410_GPB0,BEEP_SWT_OFF);

switch_gpio(S3C2410_GPF4,LED_SWT_OFF);

switch_gpio(S3C2410_GPF5,LED_SWT_OFF);

switch_gpio(S3C2410_GPF6,LED_SWT_OFF);

switch_gpio(S3C2410_GPF7,LED_SWT_OFF);

return0;

}

staticvoidgpio_setup_cdev(structcdev*dev,intminor,

structfile_operations*fops)

{/*字符设备的创建和注册*/

interr,devno=MKDEV(major,minor);

cdev_init(dev,fops);

dev->owner=THIS_MODULE;

dev->ops=fops;

err=cdev_add(dev,devno,1);

if(err)

{

printk(KERN_NOTICEError%daddinggpio%d,err,minor);

}

}

staticstructfile_operationsgpio_fops=

{/*gpio设备的file_operations结构定义*/

.owner=THIS_MODULE,

.open=gpio_open,/*进行初始化配置*/

.release=gpio_release,/*关闭设备*/

.read=gpio_read,

.write=gpio_write,

.ioctl=gpio_ioctl,/*实现主要控制功能*/

};

staticstructcdevgpio_devs;

staticintgpio_init(void)

{

intresult;

dev_tdev=MKDEV(major,0);

if(major)

{/*设备号的动态分配*/

result=register_chrdev_region(dev,1,GPIO_DEVICE_NAME);

}

else

{/*设备号的动态分配*/

result=alloc_chrdev_region(dev,0,1,GPIO_DEVICE_NAME);

major=MAJOR(dev);

}

if(result0)

{

printk(KERN_WARNINGGpio:unabletogetmajor%dn,major);

returnresult;

}

gpio_setup_cdev(gpio_devs,0,gpio_fops);

printk(Themajorofthegpiodeviceis%dn,major);

return0;

}

1 2 3 4

关键词: 嵌入式Linux 设备驱动 GPIO驱动程序 操作系统

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版