在设备树中定义gpio

时间:2018-06-21 02:53:09

标签: linux-kernel device-tree texas-instruments

我有一块Ti的AM335x定制板。我想将一些引脚定义为gpios,并能够在其Linux用户空间中将它们设置为输入和输出。 我在am33xx_pinmux中定义了引脚,然后用bone-pinmux-helper对其进行了引用。问题是我可以在终端上用这些命令设置它,但是没有用。

echo 4 > /sys/class/gpios/export
echo out > /sys/class/gpios/gpio4/direction
echo 1 > /sys/class/gpios/value

这是我的代码简介,仅涉及两个引脚gpio0_4 gpio0_5,每个引脚都必须可以设置为用户空间中的输入或输出。

#include "am33xx.dtsi"
#include <dt-bindings/interrupt-controller/irq.h>
&am33xx_pinmux {
    pinctrl-names = "default";
    DATA_OUT_A00:DATA_OUT_A00 {
        pinctrl-single,pins = <0x158  (PIN_OUTPUT_PULLDOWN | MUX_MODE7) >;  /*gpio0_4*/
    };
    DATA_OUT_A01:DATA_OUT_A01 {
        pinctrl-single,pins = <0x15C  (PIN_OUTPUT_PULLDOWN | MUX_MODE7) >;  /*gpio0_5*/
    };
    ...
}

...

&ocp {
    test_helper: helper {
        compatible = "bone-pinmux-helper";
        status = "okay";
        pinctrl-names = "DATA_OUT_A00", "DATA_OUT_A01";
        pinctrl-0 = <&DATA_OUT_A00>;
        pinctrl-1 = <&DATA_OUT_A01>;
    }
}

编辑:-------------------

我正在使用主要的Ti内核4.9版本。如果我想将这两个引脚定义为输出,则此DTS可以正常工作,但仅适用于输出模式。我可以将引脚导出为输入,但是当我读取其值时,它总是返回零。

#include "am33xx.dtsi"
#include <dt-bindings/interrupt-controller/irq.h>


/ {
  model = "My Custom board C335x";
    compatible = "ti,am33xx";

    cpus {
        cpu@0 {
            cpu0-supply = <&vdd_core>;
        };
    };
  ...


  gpio-leds {
        compatible = "gpio-leds";
        pinctrl-names = "default";
        pinctrl-0 = <&led_pins>;
      // the following two blocks make the pins available in /sys/class/leds
      // if removed can be accessd with /sys/class/gpios
      test_led1 {
        label = "test";
        gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
        default-state = "off";
      };
      test_led2 {
        label = "test";
        gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
        default-state = "off";
      };
        };

}


&am33xx_pinmux {
    pinctrl-names = "default";
  led_pins: pinmux_led_pins {
        pinctrl-single,pins = <
            0x158   (PIN_OUTPUT_PULLDOWN | MUX_MODE7)   /*gpio0_4*/
            0x15C   (PIN_OUTPUT_PULLDOWN | MUX_MODE7)   /*gpio0_5*/
        >;
    };
  ...
}

如果我将这些引脚保留在DTS文件中,则仍然可以导出它们,但无法获得任何输入或将值设置为输出。

0 个答案:

没有答案