我目前正在为一个执行各种功能的 9 轴传感器从头开始构建一个 i2c 驱动程序,所有这些功能都可以通过 i2c 在寄存器上访问。
我有一些关于如何为 linux 编写 i2c 驱动程序的资源,但我的问题是不清楚所有内容必须去哪里。到目前为止,我已经勾勒出一个驱动程序,绝不是功能性的。
static struct i2c_device_id sps_id[] = {
{"SPS_test", 0},
{}
};
static struct i2c_driver sps_test_driver = {
.driver = {
.name ="SPS_test",
},
.probe = sps_probe,
.remove = sps_remove,
.id_table = sps_id;
};
static int __init sps_test_init(void)
{
return i2c_add_driver(&scout_test_driver);
}
我还知道该.name
字段提供了与标识我的特定 i2c 地址的下一位代码的链接。
以下内容取自http://lxr.linux.no/linux+v2.6.31/Documentation/i2c/instantiating-devices ::
static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
int __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(struct i2c_board_info));
strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);
isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
normal_i2c);
i2c_put_adapter(i2c_adap);
(...)
}
如果我正确地遵循了解释,我宁愿走这条路,这样我就可以使用已经编写好的适配器,减轻我的工作量并最大限度地降低风险。
现在我需要知道,我在哪里编写自己的代码来进行那种探测?这和.probe
成员有相似之处struct i2c_driver
吗?它们是一样的吗?