SPI总线可以使用一个SPI主设备节点和多个SPI从设备为子节点描述。
想要在dev目录中产生一个spidev节点的话可以增加下面的描述
spidev1: spidev@0 {
compatible = "spidev"; /* appended from boardinfo */
reg = <0>; /* appended from boardinfo */
spi-max-frequency = <100000000>; /* appended from boardinfo */
enable-dma = <1>; /* appended from boardinfo */
}; //end spidev@0 (spidev1)
最新的内核遇到compatible = “spidev”;这个属性会报出warnning,建议改为compatible =”rohm,dh2228fv”。
在dev目录下回产生一个 spidev#1.#2的节点,其中#2是描述中的reg属性。#1对应的是bus-num。
但是这个bus-num怎么得到的呢?翻看源码发现bus_num是动态产生的。
在3.7的时候产生的节点还是从1开始往上增加的。不知道从哪个版本开始从32756往下递减了。具体源码如下断,spi.c
//初始化dyn_bus_id为32756
- static atomic_t dyn_bus_id = ATOMIC_INIT(0);
+ static atomic_t dyn_bus_id = ATOMIC_INIT((1<<16) - 1);
//bus_number 是从最大的数递减
/* convention: dynamically assigned bus IDs count down from the max */
if (master->bus_num < 0) {
- master->bus_num = atomic_inc_return(&dyn_bus_id);
+ master->bus_num = atomic_dec_return(&dyn_bus_id);
dynamic = 1;
}
所以bus_num 数字开始从最大数字往下变化,为何这样改其目的不得而知,只是开发中出现了一个坑。如果真的想要保持原来的节点,只需要把这里的(-)部分code替换带(+)代码。