I2C设备初始化方法2--初始化确定设备
2012-04-11 18:47
225 查看
(本文的部分内容翻译自Documentation/i2c/instantiating-devices)
方法2:初始化确定设备
这种方式使用于当一个大的设备使用I2C bus作为内部通讯使用。TV adapter是一种典型的情况,其中包括了调谐器、视频编码、音频编码等,一般通过一个类似I2C总线连接到主芯片上。你不知道I2C设备会预先连接的数量,所以方式1不能使用在这种情况下。所以另外的方法是初始化确定的设备。这种操作只要填充structi2c_board_info 然后调用i2c_new_device()即可。
例程取自于 sfe4001 网络驱动:
staticstruct i2c_board_info sfe4001_hwmon_info = {
I2C_BOARD_INFO("max6647", 0x4e),
};
intsfe4001_init(struct efx_nic *efx)
{
(...)
efx->board_info.hwmon_client =
i2c_new_device(&efx->i2c_adap,&sfe4001_hwmon_info);
(...)
}
上面的代码在未知的网络适配器上使用I2C总线初始化了一个I2C设备。
另外一种情况,当你不知道一个I2C设备是否存在(例如有一些可选项在低端的板子上是不存在的),或是在一个电路中与另外一个电路中的地址不同(涉及时未声明但在加工时改变)。在这种情况下可以使用i2c_new_probed_device() 代替 i2c_new_device()
例程取自于 pnx4008 OHCI 驱动:
staticconst unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
staticint __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev)
{
(...)
struct i2c_adapter *i2c_adap;
struct i2c_board_info i2c_info;
(...)
i2c_adap = i2c_get_adapter(2);
memset(&i2c_info, 0, sizeof(structi2c_board_info));
strlcpy(i2c_info.name,"isp1301_pnx", I2C_NAME_SIZE);
isp1301_i2c_client =i2c_new_probed_device(i2c_adap, &i2c_info,
normal_i2c, NULL);
i2c_put_adapter(i2c_adap);
(...)
}
上述代码在OHCI adapter未知情况下在I2C bus初始化了一个I2C设备。程序会先尝试0x2c地址,如果没找到,会再尝试地址0x2d,如果仍未找到,就放弃创建。
创建I2C设备的驱动程序还要负责销毁和清楚设备。这些工作通过调用i2c_unregister_device(),这个工作是针对得是之前的i2c_new_device() 或i2c_new_probed_device().
方法2:初始化确定设备
这种方式使用于当一个大的设备使用I2C bus作为内部通讯使用。TV adapter是一种典型的情况,其中包括了调谐器、视频编码、音频编码等,一般通过一个类似I2C总线连接到主芯片上。你不知道I2C设备会预先连接的数量,所以方式1不能使用在这种情况下。所以另外的方法是初始化确定的设备。这种操作只要填充structi2c_board_info 然后调用i2c_new_device()即可。
例程取自于 sfe4001 网络驱动:
staticstruct i2c_board_info sfe4001_hwmon_info = {
I2C_BOARD_INFO("max6647", 0x4e),
};
intsfe4001_init(struct efx_nic *efx)
{
(...)
efx->board_info.hwmon_client =
i2c_new_device(&efx->i2c_adap,&sfe4001_hwmon_info);
(...)
}
上面的代码在未知的网络适配器上使用I2C总线初始化了一个I2C设备。
另外一种情况,当你不知道一个I2C设备是否存在(例如有一些可选项在低端的板子上是不存在的),或是在一个电路中与另外一个电路中的地址不同(涉及时未声明但在加工时改变)。在这种情况下可以使用i2c_new_probed_device() 代替 i2c_new_device()
例程取自于 pnx4008 OHCI 驱动:
staticconst unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
staticint __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev)
{
(...)
struct i2c_adapter *i2c_adap;
struct i2c_board_info i2c_info;
(...)
i2c_adap = i2c_get_adapter(2);
memset(&i2c_info, 0, sizeof(structi2c_board_info));
strlcpy(i2c_info.name,"isp1301_pnx", I2C_NAME_SIZE);
isp1301_i2c_client =i2c_new_probed_device(i2c_adap, &i2c_info,
normal_i2c, NULL);
i2c_put_adapter(i2c_adap);
(...)
}
上述代码在OHCI adapter未知情况下在I2C bus初始化了一个I2C设备。程序会先尝试0x2c地址,如果没找到,会再尝试地址0x2d,如果仍未找到,就放弃创建。
创建I2C设备的驱动程序还要负责销毁和清楚设备。这些工作通过调用i2c_unregister_device(),这个工作是针对得是之前的i2c_new_device() 或i2c_new_probed_device().
相关文章推荐
- I2c设备初始化方法--通过总线编号初始化i2c设备
- I2c设备初始化方法1--通过总线编号初始化i2c设备
- I2C设备初始化方法3--侦测一个指定的I2C设备
- 两种方式的i2c设备驱动的编写方法
- i2c驱动之普通设备驱动2(推荐设备驱动方法)
- I2C设备初始化方式4--从用户空间初始化I2C设备
- Linux i2c子系统(二) _通过i2c-dev.c访问设备的方法
- 确定网页适配及流量压缩的业务流量的方法、系统和设备
- 一种用于确定查询结果的方法与设备
- AndroidStudio初始化adb失败,无法显示Genymotion模拟器设备解决方法
- “vmware 未能初始化监视器设备”的解决方法
- 基于ARM的I2C设备控制方法的实现
- Linux系统I2C设备驱动编写方法
- new style 的I2C设备驱动-----probe不能执行解决方法
- LinuxI2C子系统之一实例化IC2设备(Client)的四种方法(三、四)
- [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法
- 解决"OCC图形设备初始化失败"的方法
- [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】
- XP系统通过Twain扫描提示成像设备无法初始化的解决方法
- linux i2c子系统代码分析9---i2c设备的注册方法