Setting up gpio-hog for usb power

Hello,

I've made progress on adding support to the Netgear EX6200v2, and thankfully got DSA working & worked out some LED issues I was having.

The last issue I'm working on resolving is getting the USB port to work. I've traced it to a power issue and confirmed the GPIO of interest; if I turn on the GPIO manually using the code below I can mount a USB drive no problem.

root@OpenWrt_Backyard:~# ls -la /dev/sd*
ls: /dev/sd*: No such file or directory
root@OpenWrt_Backyard:~# cd /sys/class/gpio
root@OpenWrt_Backyard:/sys/class/gpio# GPIO=415
root@OpenWrt_Backyard:/sys/class/gpio# echo $GPIO > export
root@OpenWrt_Backyard:/sys/class/gpio# echo "out" > gpio$GPIO/direction
root@OpenWrt_Backyard:/sys/class/gpio# echo 1 > gpio$GPIO/value
root@OpenWrt_Backyard:/sys/class/gpio# ls -la /dev/sd*
brw-------    1 root     root        8,   0 Dec 13 23:30 /dev/sda
brw-------    1 root     root        8,   1 Dec 13 23:30 /dev/sda1

I've tried to set the DTS to set that gpio to high on boot by adding the following, but it doesn't seem to do the trick.

For the record the GPIO is 415 but I've also tried implementing with setting the GPIO to 11 (415 minus the base GPIO which is 404 for some reason? this is also what I did to get LEDs working)

enable-usb-power {
                gpio-hog;
                gpios = <415 GPIO_ACTIVE_HIGH>;
                output-high;
                line-name = "enable USB power";
        };

I suspect it's because this GPIO is part of another gpiochip, gpiochip412 per below output?

root@OpenWrt_Backyard:/sys/class/gpio# ls
export       gpio415      gpiochip404  gpiochip412  unexport

I did see another post where this question was asked a few years ago but my output to 'cat /sys/kernel/debug/gpio' looks a little different (specifically the parent) and I'm unsure how to define this in DTS to properly set GPIO 415

root@OpenWrt_Backyard:/sys/class/gpio# cat /sys/kernel/debug/gpio 
gpiochip1: GPIOs 404-411, parent: spi/spi2.0, 74hc595, can sleep:
 gpio-404 (                    |green:usb           ) out hi ACTIVE LOW
 gpio-405 (                    |green:wlan5g        ) out lo ACTIVE LOW
 gpio-406 (                    |red:wlan5g          ) out hi ACTIVE LOW
 gpio-407 (                    |green:wlan2g        ) out hi ACTIVE LOW
 gpio-408 (                    |red:wlan2g          ) out hi ACTIVE LOW
 gpio-409 (                    |green:power         ) out lo ACTIVE LOW
 gpio-410 (                    |amber:power         ) out hi ACTIVE LOW
gpiochip0: GPIOs 412-511, parent: platform/1000000.pinctrl, 1000000.pinctrl:
 gpio0   : in  high func0 4mA pull up
 gpio1   : in  high func0 2mA pull up
 gpio2   : in  high func0 2mA pull up
 gpio3   : out high func0 2mA no pull
 gpio4   : out high func0 4mA pull up
 gpio5   : out low  func0 4mA pull up

Please post the whole DTS, 415 wont be the valid offset.
Is that GPIO under the HC595 SSR or its an SoC provided one?

Entire DTS pasted below, I'm not sure how to answer your second question but it seems the LED GPIO are under HC595, so I'd think the one for USB power is under an SOC provided?

#include "qcom-ipq4019.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/soc/qcom,tcsr.h>

/ {
        model = "Netgear EX62x0v2";
        compatible = "netgear,ex62x0v2";

        soc {
                rng@22000 {
                        status = "okay";
                };

                mdio@90000 {
                        status = "okay";
                };

                tcsr@1949000 {
                        compatible = "qcom,tcsr";
                        reg = <0x1949000 0x100>;
                        qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
                };
		ess_tcsr@1953000 {
                        compatible = "qcom,tcsr";
                        reg = <0x1953000 0x1000>;
                        qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
                };

                tcsr@1957000 {
                        compatible = "qcom,tcsr";
                        reg = <0x1957000 0x100>;
                        qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
                };

                crypto@8e3a000 {
                        status = "okay";
                };

                watchdog@b017000 {
                        status = "okay";
                };
        };

        aliases {
                led-boot = &power_amber;
                led-failsafe = &power_amber;
                led-running = &power_green;
                led-upgrade = &power_amber;
                label-mac-device = &gmac;
        };

        keys {
                compatible = "gpio-keys";

                wps {
                        label = "wps";
                        gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>;
                        linux,code = <KEY_WPS_BUTTON>;
                };

                reset {
                        label = "reset";
                        gpios = <&tlmm 63 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_RESTART>;
                };
        };

        led_spi {
                compatible = "spi-gpio";
                #address-cells = <1>;
                #size-cells = <0>;

                sck-gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
                mosi-gpios = <&tlmm 4 GPIO_ACTIVE_HIGH>;
                num-chipselects = <0>;

                led_gpio: led_gpio@0 {
                        compatible = "fairchild,74hc595";
                        reg = <0>;
                        gpio-controller;
                        #gpio-cells = <2>;
                        registers-number = <1>;
                        spi-max-frequency = <1000000>;
                };
        };

        leds {
                compatible = "gpio-leds";
                power_amber: power_amber {
                        label = "amber:power";
                        gpios = <&led_gpio 6 GPIO_ACTIVE_LOW>;
                };

                power_green: power_green {
                        label = "green:power";
                        gpios = <&led_gpio 5 GPIO_ACTIVE_LOW>;
                };

                wlan2g_green {
                        label = "green:wlan2g";
                        gpios = <&led_gpio 3 GPIO_ACTIVE_LOW>;
                
                };

		wlan2g_red {
                        label = "red:wlan2g";
                        gpios = <&led_gpio 4 GPIO_ACTIVE_LOW>;

                };

		wlan5g_green {
                        label = "green:wlan5g";
                        gpios = <&led_gpio 1  GPIO_ACTIVE_LOW>;    
                };
		
		wlan5g_red {
                        label = "red:wlan5g";
                        gpios = <&led_gpio 2  GPIO_ACTIVE_LOW>;
                };
		usb_green {
                        label = "green:usb";
                        gpios = <&led_gpio 0  GPIO_ACTIVE_LOW>;
                };
                
        };

	enable-usb-power {
                gpio-hog;
                gpios = <11 GPIO_ACTIVE_HIGH>;
                output-high;
                line-name = "enable USB power";
        };

};

&tlmm {
        serial_pins: serial_pinmux {
                mux {
                        pins = "gpio60", "gpio61";
                        function = "blsp_uart0";
                        bias-disable;
                };
        };

        spi_0_pins: spi_0_pinmux {
                pin {
                        function = "blsp_spi0";
                        pins = "gpio55", "gpio56", "gpio57";
                        drive-strength = <12>;
                        bias-disable;
                };
                pin_cs {
                        function = "gpio";
                        pins = "gpio54";
                        drive-strength = <2>;
                        bias-disable;
                        output-high;
                };
        };
	
};
&blsp1_spi1 {
        pinctrl-0 = <&spi_0_pins>;
        pinctrl-names = "default";
        status = "okay";
        cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;

        mx25l12805d@0 {
                compatible = "jedec,spi-nor";
                reg = <0>;
                spi-max-frequency = <45000000>;

                partitions {
                        compatible = "fixed-partitions";
                        #address-cells = <1>;
                        #size-cells = <1>;

                        partition0@0 {
                                label = "SBL1";
                                reg = <0x00000000 0x00040000>;
                                read-only;
                        };

                        partition1@40000 {
                                label = "MIBIB";
                                reg = <0x00040000 0x00020000>;
                                read-only;
                        };

                        partition2@60000 {
                                label = "QSEE";
                                reg = <0x00060000 0x00060000>;
                                read-only;
                        };

                        partition3@c0000 {
                                label = "CDT";
                                reg = <0x000c0000 0x00010000>;
                                read-only;
                        };
			partition4@d0000 {
                                label = "DDRPARAMS";
                                reg = <0x000d0000 0x00010000>;
                                read-only;
                        };

                        partition5@E0000 {
                                label = "APPSBLENV";
                                reg = <0x000e0000 0x00010000>;
                                read-only;
                        };

                        partition6@F0000 {
                                label = "APPSBL";
                                reg = <0x000f0000 0x00080000>;
                                read-only;
                        };

                        partition7@170000 {
                                label = "ART";
                                reg = <0x00170000 0x00010000>;
                                compatible = "nvmem-cells";
                                read-only;
                                #address-cells = <1>;
                                #size-cells = <1>;

                                precal_art_1000: precal@1000 {
                                        reg = <0x1000 0x2f20>;
                                };

                                precal_art_5000: precal@5000 {
                                        reg = <0x5000 0x2f20>;
                                };
                        };

                        partition8@180000 {
                                label = "config";
                                reg = <0x00180000 0x00010000>;
                                read-only;
                        };
			 partition9@190000 {
                                label = "pot";
                                reg = <0x00190000 0x00010000>;
                                read-only;
                        };

                        partition10@1a0000 {
                                compatible = "nvmem-cells";
                                label = "dnidata";
                                reg = <0x001a0000 0x00010000>;
                                read-only;

                                #address-cells = <1>;
                                #size-cells = <1>;

                                macaddr_dnidata_0: macaddr@0 {
                                        reg = <0x0 0x6>;
                                };

                                macaddr_dnidata_c: macaddr@c {
                                        reg = <0xc 0x6>;
                                };
                        };

                        partition11@1b0000 {
                                compatible = "denx,fit";
                                label = "HLOS";
                                reg = <0x001b0000 0x00e10000>;
                        };
                        
                        partition12@fc0000 {
                                label = "rootfs";
                                reg = <0x00fc0000 0x00aa0000>;
                        };

                        partition13@1a60000 {
                                label = "rootfs_data";
                                reg = <0x01a60000 0x00070000>;
                        };

			partition14@1ad0000 {
                                label = "language";
                                reg = <0x01ad0000 0x00040000>;
                                read-only;
                        };
                };
        };
};

&blsp1_uart1 {
        pinctrl-0 = <&serial_pins>;
        pinctrl-names = "default";
        status = "okay";
};

&blsp_dma {
        status = "okay";
};

&cryptobam {
        status = "okay";
};
&gmac {
        status = "okay";
};

&switch {
        status = "okay";
};

&swport1 {
        status = "okay";

        label = "lan1";
};

&swport2 {
        status = "okay";

        label = "lan2";
};

&swport3 {
        status = "okay";

        label = "lan3";
};

&swport4 {
        status = "okay";

        label = "lan4";
};
&swport5 {
        status = "okay";

        label = "lan5";
};

&ethphy4 {
        status = "okay";
        label = "lan6";
};

&pcie0 {
        status = "okay";

        perst-gpio = <&tlmm 38 GPIO_ACTIVE_LOW>;
        wake-gpio = <&tlmm 50 GPIO_ACTIVE_LOW>;

        bridge@0,0 {
                reg = <0x00000000 0 0 0 0>;
                #address-cells = <3>;
                #size-cells = <2>;
                ranges;
		
		wifi@1,0 {
                        compatible = "qcom,ath10k";
                        status = "okay";
                        reg = <0x00010000 0 0 0 0>;
                        ieee80211-freq-limit = <5470000 5875000>;
                        qcom,ath10k-calibration-variant = "Netgear-Orbi-Pro-SRK60";
                };
        };
};


&wifi0 {
        status = "okay";
        nvmem-cell-names = "pre-calibration", "mac-address";
        nvmem-cells = <&precal_art_1000>, <&macaddr_dnidata_0>;
};

&wifi1 {
        status = "okay";
        nvmem-cell-names = "pre-calibration", "mac-address";
        nvmem-cells = <&precal_art_5000>, <&macaddr_dnidata_c>;
};

You put it under the wrong node, it needs to go in the &tlmm node

Thank you so much! That did the trick

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.