Linux 具有可选多平台驱动程序接口的设备驱动程序
Linux device driver with optional multiple platform driver interfaces
假设我有一个芯片有多个接口选项,例如,该芯片可能有一个 I2C 接口和一个 SPI 接口,我可以选择其中一个接口并相应地连接设备。我将如何为此类设备编写 linux 设备驱动程序?
具有这种行为的芯片是ssd1307,它已经在主线linux内核(https://github.com/torvalds/linux/blob/master/drivers/video/fbdev/ssd1307fb.c)中实现了驱动程序,仅针对其I2C接口实现(该芯片还有一个3/ 4 线 SPI 接口)。正如您在代码中看到的那样,探测功能在很大程度上依赖于它是一个 I2C 接口这一事实,因此为了使用 SPI 接口,我需要编写一个全新的驱动程序,重复大量通用代码,或者插入很多#ifdef,这对我来说似乎不是很好的方法。
对于提供多种接口类型的芯片,标准做法是为其提供核心驱动程序和接口特定的前端。
可以找到几个示例,例如在 sound/soc/codecs/: pcm179x.c / pcm179x-i2c.c / pcm179x-spi.c 和其他
ssd1307 还没有(还?)完成。
假设我有一个芯片有多个接口选项,例如,该芯片可能有一个 I2C 接口和一个 SPI 接口,我可以选择其中一个接口并相应地连接设备。我将如何为此类设备编写 linux 设备驱动程序?
具有这种行为的芯片是ssd1307,它已经在主线linux内核(https://github.com/torvalds/linux/blob/master/drivers/video/fbdev/ssd1307fb.c)中实现了驱动程序,仅针对其I2C接口实现(该芯片还有一个3/ 4 线 SPI 接口)。正如您在代码中看到的那样,探测功能在很大程度上依赖于它是一个 I2C 接口这一事实,因此为了使用 SPI 接口,我需要编写一个全新的驱动程序,重复大量通用代码,或者插入很多#ifdef,这对我来说似乎不是很好的方法。
对于提供多种接口类型的芯片,标准做法是为其提供核心驱动程序和接口特定的前端。
可以找到几个示例,例如在 sound/soc/codecs/: pcm179x.c / pcm179x-i2c.c / pcm179x-spi.c 和其他
ssd1307 还没有(还?)完成。