Exynos4412 IIC 总线驱动开发相关问题总结

一 、问题

1、IIC总线上的设备是怎么描述的?

struct i2c_client
{
struct device dev;
...
};


2、IIC总线上的驱动是怎么描述的?

struct i2c_driver

{
struct device_driver driver;
};


3、IIC总线上的设备和驱动是怎么匹配的

1)、对于 Cortex - A8 通过driver提供id_table和client->name匹配

2)、对于 Cortex - A9 参考下图

Exynos4412 IIC 总线驱动开发相关问题总结_第1张图片


4、如何告诉系统我们从设备的信息

1)、对于 Cortex - A8 

arch/arm/mach-s5c100/mac-smdkc100.c 

struct i2c_borad_info i2c_des0[] = {


填写从设备的信息

}

2)、对于 Cortex - A9

      通过设备树,内核转换



5、系统是如何找到我们的从设备信息,找到从设备信息后做了什么事情

1)、对于 Cortex - A8 

        系统启动的时候,会把从设备信息,注册到_i2c_borad_list。

        总线驱动的匹配的时候,会调用

i2c_add_numbered_adapter() 
  |
i2c_register_adapter(adap)
  |
i2c_scan_static_board_info()
  |
i2c_new_device()
{
1.产生了i2c_client (填充了从设备信息)
2.注册了client->device
}


6、在IIC总线上驱动如何获取从设备的信息

//i2c_driver的probe函数在调用的时候,会将i2c_client结构体传递过去,i2c_client包含了从设备的信息

int xxx_probe(struct i2c_client  *client, const struct i2c_device_id *id)
{

}


7、数据如何接收

     利用中断

Exynos4412 IIC 总线驱动开发相关问题总结_第2张图片


8、数据如何发送

adap->algo->master_xfer
static const struct i2c_algorithm s3c24xx_i2c_algorithm = {
    .master_xfer        = s3c24xx_i2c_xfer,
    .functionality       = s3c24xx_i2c_func,
};


你可能感兴趣的:(Linux,系统,Linux,IIC,驱动开发,Linux,驱动开发进阶)