LINUX.ORG.RU

Как описать пин GPIO-экспандера в dts, чтоб во время перехода в режим «Suspend-to-RAM» пин отключался.

 ,


0

1

Имею GPIO-экспандер(tca6424) на плате, пин17 которого управляет питанием подсистем. Нужно ли мне описывать этот пин как regulator или regulator-fixed, пробывал описать вот так:

hu_u1740: tca6424_hu_u1740@22 {
    compatible = "ti,tca6424";
    reg = <0x22>;
    gpio-controller;
    #gpio-cells = <2>;
    
    regulator@17 {
        regulator-min-microvolt = <33000000>;
        regulator-max-microvolt = <3300000>;
        regulator-always-on;
        regulator-name = "pw_bt";
        enable-active-high;
        regulator-state-mem {
                regulator-off-in-suspend;
        };
    };
};

Но питание все равно не снимается( при переходе в спящий режим.



Последнее исправление: ziegfried (всего исправлений: 2)

Что -то тут у тебя странное, для начала грепни arch/***.dts там не так много. Например в arm64/boot/dts/ti/k3-j721e-common-proc-board.dts определён exp2, который используется в vdd_mmc1.

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

Файл нашел, а параметров нет таких(

/dts-v1/;

#include "k3-j721e-som-p0.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
        chosen {
                stdout-path = "serial2:115200n8";
                bootargs = "console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000";
        };

        gpio_keys: gpio-keys {
                compatible = "gpio-keys";
                autorepeat;
                pinctrl-names = "default";
                pinctrl-0 = <&sw10_button_pins_default &sw11_button_pins_default>;

                sw10: sw10 {
                        label = "GPIO Key USER1";
                        linux,code = <BTN_0>;
                        gpios = <&main_gpio0 0 GPIO_ACTIVE_LOW>;
                };

                sw11: sw11 {
                        label = "GPIO Key USER2";
                        linux,code = <BTN_1>;
                        gpios = <&wkup_gpio0 7 GPIO_ACTIVE_LOW>;
                };
        };
};

&main_pmx0 {
        sw10_button_pins_default: sw10_button_pins_default {
                pinctrl-single,pins = <
                        J721E_IOPAD(0x0, PIN_INPUT, 7) /* (AC18) EXTINTn.GPIO0_0 */
                >;
        };
};

&wkup_pmx0 {
        sw11_button_pins_default: sw11_button_pins_default {
                pinctrl-single,pins = <
                        J721E_WKUP_IOPAD(0xcc, PIN_INPUT, 7) /* (G28) WKUP_GPIO0_7 */
                >;
        };
};

&wkup_uart0 {
        /* Wakeup UART is used by System firmware */
        status = "disabled";
};
ziegfried
() автор топика
Ответ на: комментарий от ziegfried

Я пробежался по той ветке, что было когда-то взято у торвальдса, различия естественно будут в разных ветках. Может у тебя это в dtsi

Выделю то что вижу

	vdd_mmc1: fixedregulator-sd {
		compatible = "regulator-fixed";
		regulator-name = "vdd_mmc1";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		enable-active-high;
		vin-supply = <&vsys_3v3>;
		gpio = <&exp2 2 GPIO_ACTIVE_HIGH>;
	};
&main_i2c0 {
	pinctrl-names = "default";
	pinctrl-0 = <&main_i2c0_pins_default>;
	clock-frequency = <400000>;

	exp1: gpio@20 {
		compatible = "ti,tca6416";
		reg = <0x20>;
		gpio-controller;
		#gpio-cells = <2>;
	};

	exp2: gpio@22 {
		compatible = "ti,tca6424";
		reg = <0x22>;
		gpio-controller;
		#gpio-cells = <2>;

		p09-hog {
			/* P11 - MCASP/TRACE_MUX_S0 */
			gpio-hog;
			gpios = <9 GPIO_ACTIVE_HIGH>;
			output-low;
			line-name = "MCASP/TRACE_MUX_S0";
		};

		p10-hog {
			/* P12 - MCASP/TRACE_MUX_S1 */
			gpio-hog;
			gpios = <10 GPIO_ACTIVE_HIGH>;
			output-high;
			line-name = "MCASP/TRACE_MUX_S1";
		};
	};
};

Да и стоит тебе разобраться с синтаксисом dts плотнее, аля имена, ссылки, cells, reg

AlexVR ★★★★★
()
Ответ на: комментарий от ziegfried

Из https://elixir.bootlin.com/linux/v5.16-rc2/source/Documentation/devicetree/bindings/regulator/fixed-regulator.yaml

  vin-supply:
    description: Input supply phandle.

в этом же dts:

	vsys_3v3: fixedregulator-vsys3v3 {
		/* Output of LMS140 */
		compatible = "regulator-fixed";
		regulator-name = "vsys_3v3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&evm_12v0>;
		regulator-always-on;
		regulator-boot-on;
	};
	evm_12v0: fixedregulator-evm12v0 {
		/* main supply */
		compatible = "regulator-fixed";
		regulator-name = "evm_12v0";
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
		regulator-always-on;
		regulator-boot-on;
	};
AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR
regulators {
		
		compatible = "simple-bus";
	        #address-cells = <1>;
	        #size-cells = <0>;
	
	        vdd_sys_mux: regulator@0 {
	        	compatible = "regulator-fixed";
	                reg = <0>;
	                regulator-name = "VDD_SYS_MUX";
	                regulator-min-microvolt = <3300000>;
	                regulator-max-microvolt = <3300000>;
	                regulator-always-on;
	                regulator-boot-on;
	        };
	
	        wbt_on: wbt_on {
	                compatible = "regulator-fixed";
	                reg = <1>;
	                regulator-name = "WBT_PWR_ON";
                        regulator-min-microvolt = <3300000>;
                        regulator-max-microvolt = <3300000>;
                        regulator-boot-on;
                        gpio = <&hu_u1740 17 GPIO_ACTIVE_HIGH>;
                        enable-active-high;
                        vin-supply = <&vdd_sys_mux>;
			regulator-state-mem {
		        	regulator-off-in-suspend;
      			};
                };	
	};

&i2c4 {
	#address-cells = <1>;
	#size-cells = <0>;
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c4>;
	status = "okay";
        //22
        hu_u1740: tca6424_hu_u1740@22 {
		compatible = "ti,tca6424";
		reg = <0x22>;
		gpio-controller;
		#gpio-cells = <2>;
		usb2_en {
                        gpio-hog;
                        gpios = < 18 GPIO_ACTIVE_LOW >;
                        output-low;
                };
		
	};
	//23
	hu_u1145: tca6424_hu_u1145@23 {
		compatible = "ti,tca6424";
		reg = <0x23>;
		gpio-controller;
		#gpio-cells = <2>;
	};
};

Попробывал, а все равно не управляется(

ziegfried
() автор топика
Ответ на: комментарий от ziegfried

Попробывал, а все равно не управляется(

не вижу в твоём описании cunsomer-a - того кто собственно управляет регулятором на GPIO. Ты описал регулятор - что он управляется таким-то пином с такой-то полярностью, имеет такие-то ступени напряжения, но кто собственно управляет им не описал.

anonymous
()
Ответ на: комментарий от ziegfried

Так если это группа преобразователей напряжения

ядро всёже должно отключать и без consumer. Эти GPIO на экспандере точно работают - переключаются вручную ?

anonymous
()
Ответ на: комментарий от anonymous

Эти GPIO на экспандере точно работают - переключаются вручную ?

я это к тому что увидел тут

https://forums.developer.nvidia.com/t/question-for-gpio-regulator-regulator-fixed/169608

In my understanding, it has to define the consumer for regulator in device-tree. Otherwise, if there is no consumer, the regulator will be turned off.

он по идее должен быть отключен изначально

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.