2014-02-06 101 views
0

是否有使用不同總線的相同設備的示例,例如spi和i2c(同時取決於選擇)?Linux內核驅動程序不同總線上的相同設備?

我對有一些常用例程但使用不同讀/寫功能的設備感興趣。

例如,一個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

此類驅動程序通常使用regmap。 –

+0

2CL感謝,如果不是i2c,那麼spi又是什麼? – Maquefel

+0

根據探測程序,您的驅動程序會調用regmap_init_i2c或regmap_init_spi,然後使用通用regmap訪問函數。 –

回答

0

實際上在25年3月10日內核有這樣一個例子,

A ST磁力LIS3MDL至極具有確實兩種接口I2C/SPI,經由GPIO輸入控制。

包含在內核官方樹中的驅動程序,位於drivers/iio/magnetometer中。

與位於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和其他東西)或者一些基本的線索。

相關問題