Linux内核驱动程序在不同总线上的同一设备

时间:2014-02-06 06:06:41

标签: linux linux-kernel linux-device-driver

是否有使用不同总线的相同设备的示例,例如spi和i2c(同时,取决于选择)?

我对一个具有一些常见例程但使用不同读/写功能的设备感兴趣。

例如,一个具有校准或触发功能的adc(在内核adc驱动程序中从未见过,但为什么不呢?),但是从不同来源读取样本的功能不同。

如何实现这样的驱动程序? 我应该在我的模块中做这样的事吗? :

static struct i2c_driver my_i2c_driver = {
         .driver = {
                 .name = "my-i2c-driver",
         },
         .probe = my_i2c_driver_probe,
         .remove = my_i2c_driver_remove,
};

static struct spi_driver my_spi_driver = {
         .driver = {
                 .name   = "my-spi-driver",
         },
         .probe = my_spi_driver_probe,
         .remove = my_spi_driver_remove,         
};

etc... for read/write, ops

我对理论很感兴趣,即使“没有必要”,“没有人这样做。”

1 个答案:

答案 0 :(得分:0)

实际上在3.10.25内核中有这样一个例子,

ST磁力计LIS3MDL确实有两个接口i2c / spi,通过gpio输入控制。

内核官方树中包含驱动程序,位于drivers / iio /磁力计中。

在st_magn_i2c.c和st_magn_spi.c中有2个独立的驱动程序模块

st_magn_i2c.c:

static struct spi_driver st_magn_driver = {
        .driver = {
                .owner = THIS_MODULE,
                .name = "st-magn-spi",
        },
        .probe = st_magn_spi_probe,
        .remove = st_magn_spi_remove,
        .id_table = st_magn_id_table,
};

st_magn_spi.c:

static struct i2c_driver st_magn_driver = {
        .driver = {
                .owner = THIS_MODULE,
                .name = "st-magn-i2c",
        },
        .probe = st_magn_i2c_probe,
        .remove = st_magn_i2c_remove,
        .id_table = st_magn_id_table,
};

这种设备有时会发生 - 例如PCA2129T RTC。

所以假设这是一个我几乎要找的例子,虽然我想要一些更棘手的东西(比如USB和其他东西)或一些基本的领导。