设备树中的Gpio hog是什么?

8

我正在尝试在am335设备树中设置引脚模式。我将设备树中的pinmux节点更改如下。

pinctrl_test: pinctrl_test_pins {
    pinctrl-single,pins = <
        0x078 0x07 /* P9_12 OUTPUT | MODE7 | PULLDOWN */
        0x048 0x07 /* P9_14 OUTPUT | MODE7 | PULLDOWN */
    >;
}

但是我没有在 /sys/kernel/debug/pinctrl/44e10800.pinmux/pins 中看到任何变化。

我找到了一些关于GPIO-HOG的信息,但是找不到好的文档。

我使用的内核版本是4.8.13。


内核镜像版本是什么? - zeekhuge
我正在使用4.8.13内核版本。我在设备树中添加了上述代码,但GPIO的模式似乎没有改变。需要为节点定义兼容字段吗? - Daniel
2个回答

12

根据以下的引脚复用配置:

pinctrl_test: pinctrl_test_pins {
    pinctrl-single,pins = <
        0x078 0x07 /* P9_12 OUTPUT | MODE7 | PULLDOWN */
        0x048 0x07 /* P9_14 OUTPUT | MODE7 | PULLDOWN */
    >;
}
  1. 你重新编译了dtb吗?
  2. 在此文件 /sys/kernel/debug/pinctrl/44e10800.pinmux/pins 中,0x44E10848 和 0x44E10878 的值是多少(应该是00000007 pinctrl-single)?

gpio-hog是一个gpio节点属性,用于告诉gpio控制器在启动时将引脚设置为高电平/低电平。

举个例子,要将引脚设置为高电平:

    gpio@4805b000 {
        compatible = "ti,omap4-gpio";
        reg = <0x4805b000 0x200>;
        interrupts = <0x0 0x1c 0x4>;
        ti,hwmods = "gpio5";
        gpio-controller;
        #gpio-cells = <0x2>;
        interrupt-controller;
        #interrupt-cells = <0x2>;
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <0xaf>;

        p12 {
            gpio-hog;
            gpios = <0xc 0x0>;
            output-high;
            line-name = "vb4-gpio5-12-gpio";
        };
    };

将引脚拉低的示例:

    gpio@48053000 {
        compatible = "ti,omap4-gpio";
        reg = <0x48053000 0x200>;
        interrupts = <0x0 0x74 0x4>;
        ti,hwmods = "gpio8";
        gpio-controller;
        #gpio-cells = <0x2>;
        interrupt-controller;
        #interrupt-cells = <0x2>;
        status = "okay";

        p0 {
            gpio-hog;
            gpios = <0x0 0x0>;
            output-low;
            line-name = "vb4-gpio8-0-gpio";
        };

    };

你可以在[1]中了解更多有关gpio-hog的信息。

[1] https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/gpio.txt


非常感谢!我已经搜索了很长时间这个信息,你在这里表达得非常优雅。 - GnUfTw
这个引脚以后可以被多路复用器使用吗?如何将它传递给“mux-gpios”? - hesham_EE

1

内核版本4.8.13是较新的版本,您不需要使用设备树叠加来更改GPIO的配置。您可以简单地使用config-pin实用程序。

引用自此处

Config-pin utility - To change the pinmux settings for a pin does not need device tree overlays now (4.4+ kernel), you can simply use ‘config-pin’ utility. To configure the pin you just need to know its position on the board, so to change mux settings of pin at , for example , P8_46

$ config-pin -l P8_46

The output shows space separated list of available pin-modes and will look like :

$ default gpio gpio_pu gpio_pd pruout pruin pwm

Now to change pinmode, to, for example, pruout

$ config-pin P8_46 pruout

This will configure pin at P8_46 to pru_output mode. Further status of the pin can be known using ‘config-pin -i’, which will give detailed output.

$ config-pin -i P8_46
Pin name: P8_46
Function if no cape loaded: hdmi
Function if cape loaded: default gpio gpio_pu gpio_pd pruout pruin pwm
Function information: lcd_data1 default gpio2_7 gpio2_7 gpio2_7 pr1_pru1_pru_r30_1 pr1_pru1_pru_r31_1 ehrpwm2B
Cape: cape-universala cape-univ-hdmi
Kernel GPIO id: 71
PRU GPIO id: 103

3
我希望你能在开机时配置引脚。 - Daniel
7
这仅适用于Beaglebone,这不是内核向用户空间提供的标准ABI。 - stdcall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接