[dts]DTS实例分析

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 = <KEY_VOLUMEUP>;
10     };
11 
12     volume-down {
13         label = "Volume Down";
14         gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
15         linux,code = <KEY_VOLUMEDOWN>;
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,该如何操作?

扫描二维码关注公众号,回复: 3188155 查看本文章
复制代码
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中命名字段更多使用"-"而非下划线"_".

猜你喜欢

转载自blog.csdn.net/weiqifa0/article/details/76710510
DTS