linux系统中device tree的SPI描述

来源:互联网 发布:典韦 程咬金 知乎 编辑:程序博客网 时间:2024/05/16 10:46

SPI总线可以使用一个SPI主设备节点和多个SPI从设备为子节点描述。

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/devicetree/bindings/spi/spi-bus.txt

想要在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替换带(+)代码。

0 0
原创粉丝点击