我正在为 Duovero Parlor 板使用 DTS 文件。我向该板添加了一些 SPI 设备。我的第一个(显示器)工作得很好,所以我的条目至少是正确的。我想添加一个条目来支持 SPI 连接的 NXP SC16IS752 UART 控制器。 (最近lkml上有一个补丁我想尝试一下)。
这是我的条目:
clocks {
clk14m: oscillator {
#clock-cells = <0>;
compatible = "fixed-clock";
clock-frequency = <14745600>;
};
};
&mcspi4 {
sc16is752: sc16is752@0 {
compatible = "nxp,sc16is752";
reg = <0>;
spi-max-frequency = <4000000>;
clocks = <&clk14m>;
interrupt-parent = <&gpio4>;
interrupt = <15 IRQ_TYPE_EDGE_FALLING>;
gpio-controller;
#gpio-cells = <2>;
};
};
看起来似乎有点正确。 SPI 总线为 4MHz,模式 0。中断为 GPIO 111,即 <&GPIO 4 15>。我的问题是指定时钟。它是一个直接连接到芯片的独立晶体振荡器。那么这钟表是对的吗?
因为时钟是独立的,所以我不知道把它放在哪里,所以“时钟”听起来不错,但我完全是猜测。当我编译 dts 时,它因语法错误而失败,所以某处出了问题。
我也不确定 #gpio-cells 是否正确。这是否意味着 GPIO 编号将从 200 开始并递增?
答案1
您的时钟的问题在于,在 TI 时钟域之外声明的时钟在 3.17 中未正确解析和设置。此问题在内核版本 4.0.5 中已得到解决。
所需的更改发生在 /arch/arm/mach-omap2/io.c 末尾的函数 omap_clk_init 中,其中有一个对 of_clk_init(NULL) 的额外调用,该调用在 3.17 中不存在。
这里有一些相关的讨论,http://patchwork.ozlabs.org/patch/375753/