spidev:为什么它不应该直接在设备树中?
设备树应该描述主板的硬件,但是spidev
不描述/识别任何硬件。
马克·布朗写道:
由于 spidev 是 Linux 如何控制设备而不是
系统中硬件的描述我们不应该有节点
在 DT 中被描述为“spidev”,任何 SPI 设备都可以是 spidev,所以这
只是没有有用的描述。
此内核补丁的基本原理和解决方法是https://patchwork.kernel.org/patch/6113191/
那么还应该如何描述 spidev 呢?什么是正确的语法?
您不需要在设备树源中显式使用 spidev,而是需要识别您正在控制的实际设备,例如
mydev@0 {
- compatible = "spidev";
+ compatible = "my_spi_device";
spi-max-frequency = <5000000>;
然后(正如 Geert Uytterhoeven 所解释的),修改驱动程序/spi/spidev.c在内核源代码中,将您设备的兼容值添加到spidev_dt_ids[] array
static const struct of_device_id spidev_dt_ids[] = {
{ .compatible = "rohm,dh2228fv" },
{ .compatible = "lineartechnology,ltc2488" },
{ .compatible = "ge,achc" },
{ .compatible = "semtech,sx1301" },
+ { .compatible = "my_spi_device" },
{},
}
建议采用一种替代解决方案,其中涉及对设备树进行快速的更改本文.
只需将“spidev”兼容字符串替换为已经存在的正确字符串即可:
mydev@0 {
- compatible = "spidev";
+ compatible = "rohm,dh2228fv"; /* actually spidev for my_spi_dev */
spi-max-frequency = <5000000>;
由于“rohm,dh2228fv”已经在spidev_dt_ids[]列表,无需编辑驱动程序/spi/spidev.c是需要的。