是否有使用不同总线的相同设备的示例,例如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
我对理论很感兴趣,即使“没有必要”,“没有人这样做。”
答案 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和其他东西)或一些基本的领导。