Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17673
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-18 10:27
文章分类
文章存档

2015年(3)

2014年(4)

我的朋友

分类: LINUX

2014-11-05 20:30:47

        首先,在i2c总线或者smbus总线对应的platform_driver和platform_device注册之前,需要先将设备对应的i2c外设的信息通过i2c_register_board_info函数接口将busnum和对应的devinfo保存在__i2c_board_list链表中,设备信息结构如下:
        struct i2c_board_info {
                char type[];//为字符串,需要i2c_driver结构体中的id_table中的name对应
                unsigned short flags;
                unsigned short addr;//为i2c总线访问设备的地址一般为write address
                ........
        };
        之后,可以注册i2c总线对应的platform_driver和platform_device,通过name找到对方后,自动调用platform_driver对应的probe函数,此函数实现两个功能:
        1,通过platform_device提供的io_resource信息完成对相应i2c总线io资源(寄存器寻址空间和中断号等)的申请
        2,完成对i2c_adapter结构体的初始化,algo表示读写的接口函数,nr代表busnum(必须和i2c_board_info中的busnum对应)
        3,调用i2c_add_numbered_adapter,此函数主要实现函数为i2c_register_adapter(),此函数首先生成/dev/i2c-xx设备,然后调用i2c_scan_satic_board_info函数,通过检查之前添加在__i2c_board_list上总线号一致的设备,如果一致则生成对应的i2c_client结构,然后注册对应的device到i2c_bus_type的总线上
            最后,i2c子设备驱动(如rtc,gps等)编写者通过初始化i2c_driver结构体,并调用i2c_add_driver注册i2c_driver,此函数初始化对应的device_driver的bus为i2c_bus_type,在driver_register中通过回调i2c_bus_type的i2c_device_match,通过i2c_driver的id_table中的name和在i2c_bus_type上的device对应的client的name做匹配,如果匹配则成功,之后会回调i2c_driver对应的probe函数,此函数由驱动开发者自己提供(如注册rtc设备驱动)
            

阅读(559) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:基于qemu虚拟机做一个属于自己的linux系统

给主人留下些什么吧!~~