linux系统中device tree的SPI描述

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值