Linux_I2C设备驱动文件操作接口.doc

Linux_I2C设备驱动文件操作接口.doc

ID:49769339

大小:54.00 KB

页数:28页

时间:2020-03-04

Linux_I2C设备驱动文件操作接口.doc_第1页
Linux_I2C设备驱动文件操作接口.doc_第2页
Linux_I2C设备驱动文件操作接口.doc_第3页
Linux_I2C设备驱动文件操作接口.doc_第4页
Linux_I2C设备驱动文件操作接口.doc_第5页
资源描述:

《Linux_I2C设备驱动文件操作接口.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.I2C适配器驱动被作为一个单独的模块被加载进内核,在模块的加载和卸载函数中,只需注册和注销一个platform_driver结构体,如代码清单15.25。代码清单15.25S3C2410I2C总线驱动模块加载与卸载1staticint__initi2c_adap_s3c_init(void)2{3intret;45ret=platform_driver_register(&s3c2410_i2c_driver);6if(ret==0){7  ret=platform_driver_register(&s3c2440_i2c_driv

2、er);8  if(ret)9   platform_driver_unregister(&s3c2410_i2c_driver);10}1112returnret;13}1415staticvoid__exiti2c_adap_s3c_exit(void)16{17platform_driver_unregister(&s3c2410_i2c_driver);18.页脚.platform_driver_unregister(&s3c2440_i2c_driver);19}20module_init(i2c_adap_s3c_init

3、);21module_exit(i2c_adap_s3c_exit);platform_driver结构体包含了具体适配器的probe()函数、remove()函数、resume()函数指针等信息,它需要被定义和赋值,如代码清单15.26。代码清单15.26platform_driver结构体1staticstructplatform_drivers3c2410_i2c_driver={2.probe  =s3c24xx_i2c_probe,3.remove  =s3c24xx_i2c_remove,4.resume  =s3c24x

4、x_i2c_resume,5.driver  ={6  .owner=THIS_MODULE,7  .name="s3c2410-i2c",8},9};当通过Linux内核源代码/drivers/base/platform.c文件中定义platform_driver_unregister()函数注册platform_driver结构体时,其中probe指针指向的s3c24xx_i2c_probe()函数将被调用以初始化适配器硬件,如代码清单15.27。代码清单15.27S3C2410I2C总线驱动中的s3c24xx_i2c_probe

5、函数1staticints3c24xx_i2c_probe(structplatform_device.页脚.*pdev)2{3structs3c24xx_i2c*i2c=&s3c24xx_i2c;4structresource*res;5intret;67/*使能I2C的时钟*/8i2c->dev=&pdev->dev;9i2c->clk=clk_get(&pdev->dev,"i2c");10if(IS_ERR(i2c->clk)){11  dev_err(&pdev->dev,"cannotgetclock");12  re

6、t=-ENOENT;13  gotoout;14}15clk_enable(i2c->clk);1617/*映射寄存器*/18res=platform_get_resource(pdev,IORESOURCE_MEM,0);19if(res==NULL){20  dev_err(&pdev->dev,"cannotfindIOresource");21  ret=-ENOENT;22  gotoout;23.页脚.}24i2c->ioarea=request_mem_region(res->start,(res->end-res-

7、>start)+1,25     pdev->name);26if(i2c->ioarea==NULL){27  dev_err(&pdev->dev,"cannotrequestIO");28  ret=-ENXIO;29  gotoout;30}3132i2c->regs=ioremap(res->start,(res->end-res->start)+1);33if(i2c->regs==NULL){34  dev_err(&pdev->dev,"cannotmapIO");35  ret=-ENXIO;36  goto

8、out;37}3839/*设置I2C的信息块*/40i2c->adap.algo_data=i2c;41i2c->adap.dev.parent=&pdev->dev;4243/*初始化I2C控制器*/44ret=.页脚

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。