[dts]DTS实例分析

2019-07-12 18:44发布

2. 通常会碰到的实际问题

到此,问题出现了: 1. 当写一个按键驱动,应该如何在*.dts或者*.dtsi中操作? 2. 当在串口driver中需要使用到某个pin脚作为普通输出IO,该如何操作? 3. 当在串口driver中需要使用某个muxpin脚作为ADC或者其他服用功能该如何操作? 4. 当在串口driver中有可能想使能某个功能而不想写定在driver代码中,该如何操作? 5. 当想向driver中传入一个常数如做delay延时操作等等,该如何操作?   解答: 1. 当写一个按键驱动,应该如何在*.dts或者*.dtsi中操作? 复制代码 1 gpio-keys { 2 compatible = "gpio-keys"; 3 pinctrl-names = "default"; 4 pinctrl-0 = <&pinctrl_gpio_keys>; 5 6 volume-up { 7 label = "Volume Up"; 8 gpios = <&gpio1 18 GPIO_ACTIVE_LOW>; 9 linux,code = ; 10 }; 11 12 volume-down { 13 label = "Volume Down"; 14 gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; 15 linux,code = ; 16 }; 17 }; 复制代码 1 pinctrl_gpio_keys: gpio_keysgrp { 2 fsl,pins = < 3 MX6SX_PAD_CSI_DATA04__GPIO1_IO_18 0x17059 4 MX6SX_PAD_CSI_DATA05__GPIO1_IO_19 0x17059 5 >; 6 };   2. 当在串口driver中需要使用到某个pin脚作为普通输出IO,该如何操作? 复制代码 1 sii902x_reset: sii902x-reset { 2 compatible = "gpio-reset"; 3 reset-gpios = <&gpio3 27 1>; 4 reset-delay-us = <100000>; 5 #reset-cells = <0>; 6 status = "disabled"; 7 }; 复制代码   最简单的不需要pinctrl来进行pin脚的设置,为什么??? 3. 当在串口driver中需要使用某个muxpin脚作为ADC或者其他服用功能该如何操作? 这个问题其实上面有提到,就像上述的多个pin-names和多个pinctrl在后面的pinctrl中配置这个复用的管脚即可。 4. 当在串口driver中有可能想使能某个功能而不想写定在driver代码中,该如何操作? 复制代码 1 &uart5 { 2 pinctrl-names = "default"; 3 pinctrl-0 = <&pinctrl_uart5>; 4 fsl,uart-has-rtscts; 5 status = "okay"; 6 7 }; 复制代码   只需要在driver中使用of函数读取此属性,如果有此字段,可以使能某些操作;如果没有就失能某些操作。 5. 当想向driver中传入一个常数如做delay延时操作等等,该如何操作? 复制代码 1 &usdhc3 { 2 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 3 pinctrl-0 = <&pinctrl_usdhc3>; 4 pinctrl-1 = <&pinctrl_usdhc3_100mhz>; 5 pinctrl-2 = <&pinctrl_usdhc3_200mhz>; 6 bus-width = <8>; 7 cd-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; 8 wp-gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>; 9 keep-power-in-suspend; 10 enable-sdio-wakeup; 11 vmmc-supply = <&vcc_sd3>; 12 status = "okay"; 13 }; 复制代码   只需要在driver中读取bus-width字段的值,即可获取到8这个常量,注意在devicetree中命名字段更多使用"-"而非下划线"_".