0

我目前正在为一个执行各种功能的 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吗?它们是一样的吗?

4

0 回答 0