SPI 设备树配置
我们使用hikey960 开发板上低速40pin 的 SPI ,如图所示。
我们看到这组SPI的CS 对应gpio 为 218,对应dts (hi3660.dtsi)的spi4,如下:
spi4: spi@fdf06000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xfdf06000 0x0 0x1000>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <0 313 4>;
clocks = <&crg_ctrl HI3660_CLK_GATE_SPI4>;
clock-names = "apb_pclk";
pinctrl-names = "default";
pinctrl-0 = <&spi4_pmx_func &spi4_cfg_func>;
num-cs = <1>;
cs-gpios = <&gpio27 2 0>; /*cs : 218*/
status = "disabled";
};
我们在SPI dts下面添加设备,先将 spi4 的status 设置为OK,这样spi4就可以编译进kernel中;然后将外挂设备spidev的设备描述添加到spi4中,如下图:
spi4: spi@fdf06000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xfdf06000 0x0 0x1000>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <0 313 4>;
clocks = <&crg_ctrl HI3660_CLK_GATE_SPI4>;
clock-names = "apb_pclk";
pinctrl-names = "default";
pinctrl-0 = <&spi4_pmx_func &spi4_cfg_func>;
num-cs = <1>;
cs-gpios = <&gpio27 2 0>; /*cs : 218*/
//status = "disabled";
status = "ok";
spidev@0 {
compatible = "dcb,spidev";
reg = <0 0>;
spi-max-frequency = <9600000>;
......
};
};
备注:spidev@0 中:
spidev代表挂在spi4上的设备名称;
spidev@0 代表 spi4上片选CS0上的挂载了名为spidev设备。
num-cs = <1>;代表了spi4 控制器片选信号数量为1;所以向这个spi上挂载设备dts配置,应该如下:
spi4: spi@fdf06000 {
.......
num-cs = <1>;
.......
status = "ok";
spidev@0 {
......
reg = <0 0>;
......
};
};
如果 num-cs = <2> 代表了spi4 控制器片选信号数量为2,所以向这个spi上挂载设备dts配置如下:
spi4: spi@fdf06000 {
.......
num-cs = <2>;
.......
status = "ok";
spidev@0 { /*CS 0 上面挂在的设备*/
......
reg = <0 0>;
......
};
Spidev_test@1 { /*CS 1 上面挂在的设备*/
......
reg = <1 0>;
......
};
};
Working