Problem on remapping MX6QDL_PAD_RGMII_TDx as GPIO LED

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Problem on remapping MX6QDL_PAD_RGMII_TDx as GPIO LED

Jump to solution
1,553 Views
dehuanxin
Contributor III

I'm trying to remap some of the pins to drive GPIO LEDs.

 

I decompiled and modified the device tree:

 

ipu1grp {/*re-purpose DISP0_DAT6 and DISP0_DAT7 to GPIO4_27 and GPIO4_28*/

        fsl,pins = <0x188 0x49c 0x0 0x5 0x0 0x10 0x18c 0x4a0 0x000 0x5 0x0 0x10>;

};

       enetgrp {/*re-purpose RGMII_TD0 and RGMII_TD1 to GPIO6_20 and GPIO6_21*/

                fsl,pins = <0x60 0x374 0x0 0x5 0x0 0x010 0x05c 0x370 0x000 0x5 0x0 0x010>;

       };

 

    leds {

        compatible = "gpio-leds";

        led@0 {

            label = "led0";

            gpios = <0x5 27 0>;

            linux,default-trigger = "default-on";

            default-state = "on";

        };

        led@1 {

            label = "led1";

            gpios = <0x5 28 0>;

            linux,default-trigger = "default-on";

            default-state = "on";

        };

        led@2 {

            label = "led2";

            gpios = <0x26 20 0>;

            linux,default-trigger = "default-on";

            default-state = "off";

        };

        led@3 {

            label = "led3";

            gpios = <0x26 21 0>;

            linux,default-trigger = "default-on";

            default-state = "off";

        };

    };

 

In linux I can see all four new leds, but only led0 and led1 response to brightness adjustments. led2 and led3 stays off all the time.

 

What have I done wrong here?

 

Also in the GPIO cell, the first value, I'm not sure whether 0x5 means gpio4 and 0x26 means gpio6, but 0x5(led0 and led1) works and 0x26(led2 and led3) doesn't.

Original Attachment has been moved to: imx6qdl-var-dart.dtsi.patch.zip

Labels (2)
0 Kudos
1 Solution
963 Views
dehuanxin
Contributor III

Problem solved:

"pinctrl_leds" needs to be in the hog group, so are all GPIO pins.

Like:

     &iomuxc {

         pinctrl-names = "default";

    -    pinctrl-0 = <&pinctrl_hog>;

    +    pinctrl-0 = <&pinctrl_hog &pinctrl_led>;// added led pin mux to hog group

View solution in original post

0 Kudos
6 Replies
964 Views
dehuanxin
Contributor III

Problem solved:

"pinctrl_leds" needs to be in the hog group, so are all GPIO pins.

Like:

     &iomuxc {

         pinctrl-names = "default";

    -    pinctrl-0 = <&pinctrl_hog>;

    +    pinctrl-0 = <&pinctrl_hog &pinctrl_led>;// added led pin mux to hog group

0 Kudos
963 Views
vijaikumar
Contributor III

I assume that you used dtc to create dts file from dtb file. You can make use of predefined values in arch/arm/boot/dts/imx6q-pinfunc.h for pinmux if you have source code.

0 Kudos
963 Views
dehuanxin
Contributor III

I've attached my changes to the device tree as a patch file.

0 Kudos
963 Views
vijaikumar
Contributor III

Can you move the following pinmux from ipugrp to hoggrp and check?

MX6QDL_PAD_DISP0_DAT6__GPIO4_IO27   0x10

MX6QDL_PAD_DISP0_DAT7__GPIO4_IO28   0x10

And make sure that there are no pin conflicts for a particular pad you are using as gpio.

0 Kudos
963 Views
dehuanxin
Contributor III

Here's some updates:

I changed pin groups, added a 5th led that is re-mapped from backlight PWM (for experiment, because this pin is easily accessible for masurements)

Here's the patch.

The original file can be found at:

linux-2.6-imx/imx6qdl-var-dart.dtsi at imx_3.14.28-r0_var3 · varigit/linux-2.6-imx · GitHub

GPIO4_27, 4_28, 4_30 all work, 6_20 and 6_21 still don't.

Could this be a power-domain issue? Because the board I have uses RGMII ethernet PHY and GPIO6_20 and GPIO6_21 are DDR balls and used to be NVCC_RGMII power domain.

Do I need to change them to NVCC_GPIO power domain if I want to use those pins as GPIO?

--- imx6qdl-var-dart.dtsi    2015-12-28 12:01:02.450450949 -0500

+++ imx6qdl-var-dart1.dtsi    2015-12-31 14:13:00.591197693 -0500

@@ -197,14 +197,43 @@

         status = "okay";

     };

#endif

-    backlight {

-        compatible = "pwm-backlight";

-        pwms = <&pwm2 0 50000>;

-        brightness-levels = <0 4 8 16 32 64 128 248>;

-        default-brightness-level = <7>;

+    leds {

+        compatible = "gpio-leds";

+        pinctrl-0 = <&pinctrl_leds>;

         status = "okay";

-    };

-

+        led@0 {

+            label = "carrier0";

+            gpios = <&gpio4 27 0>;

+            linux,default-trigger = "default-on";

+            default-state = "on";

+        };

+        led@1 {

+            label = "back_light";

+            gpios = <&gpio6 21 0>;

+            linux,default-trigger = "default-on";

+            default-state = "off";

+        };

+        led@2 {

+            label = "lcd_en";

+            gpios = <&gpio6 20 0>;

+            linux,default-trigger = "default-on";

+            default-state = "off";

+        };

+       

+         led@3 {

+            label = "carrier1";

+            gpios = <&gpio4 28 0>;

+            linux,default-trigger = "default-on";

+            default-state = "on";

+        };

+        led@4 {

+            label = "j17_2";

+            gpios = <&gpio4 30 0>;

+            linux,default-trigger = "default-on";

+            default-state = "on";

+        };

+    };

+  

     v4l2_cap_0 {

         compatible = "fsl,imx6q-v4l2-capture";

         ipu_id = <0>;

@@ -253,16 +282,6 @@

     soc-supply = <&sw1c_reg>;

};

-

-&fec {

-    pinctrl-names = "default";

-    pinctrl-0 = <&pinctrl_enet_4>;

-    phy-mode = "rgmii";

-    phy-reset-gpios = <&gpio1 25 0>;

-    fsl,magic-packet;

-    status = "okay";

-};

-

&i2c1 {

     clock-frequency = <100000>;

     pinctrl-names = "default";

@@ -369,7 +388,7 @@

                 /* PMIC INT */

                 MX6QDL_PAD_GPIO_17__GPIO7_IO12            0x80000000

                 /* Wifi Slow Clock */

-                MX6QDL_PAD_ENET_RXD0__OSC32K_32K_OUT        0x000b0            /* WIFI Slow clock */

+        //        MX6QDL_PAD_ENET_RXD0__OSC32K_32K_OUT        0x000b0            /* WIFI Slow clock */

                 /* Audio Clock */

                 MX6QDL_PAD_GPIO_0__CCM_CLKO1             0x130b0            /* Audio Codec Clock */

                 /* Camera Clock */

@@ -388,39 +407,13 @@

                 MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS     0x130b0

             >;

         };

-

-        pinctrl_enet_4: enetgrp {

-            fsl,pins = <

-                MX6QDL_PAD_ENET_MDIO__ENET_MDIO           0x1b0b0

-                MX6QDL_PAD_ENET_MDC__ENET_MDC             0x1b0b0

-                MX6QDL_PAD_RGMII_TXC__RGMII_TXC           0x1b0b0

-                MX6QDL_PAD_RGMII_TD0__RGMII_TD0           0x1b0b0

-                MX6QDL_PAD_RGMII_TD1__RGMII_TD1           0x1b0b0

-                MX6QDL_PAD_RGMII_TD2__RGMII_TD2           0x1b0b0

-                MX6QDL_PAD_RGMII_TD3__RGMII_TD3           0x1b0b0

-                MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL     0x1b0b0

-                MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK      0x1b0b0

-                MX6QDL_PAD_RGMII_RXC__RGMII_RXC           0x1b0b0

-                MX6QDL_PAD_RGMII_RD0__RGMII_RD0           0x1b0b0

-                MX6QDL_PAD_RGMII_RD1__RGMII_RD1           0x1b0b0

-                MX6QDL_PAD_RGMII_RD2__RGMII_RD2           0x1b0b0

-                MX6QDL_PAD_RGMII_RD3__RGMII_RD3           0x1b0b0

-                MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL     0x1b0b0

-            >;

-        };

-

-        pinctrl_enet_irq: enetirqgrp {

-            fsl,pins = <

-                MX6QDL_PAD_GPIO_6__ENET_IRQ        0x000b1

-            >;

-        };

-

+#if 0

         pinctrl_gpio_keys: gpio_keysgrp {

             fsl,pins = <

//                MX6QDL_PAD_GPIO_5__GPIO1_IO05  0x80000000

             >;

         };

-

+#endif

         pinctrl_hdmi_cec: hdmicecgrp {

             fsl,pins = <

                 MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0

@@ -455,37 +448,13 @@

             >;

         };

-        pinctrl_ipu1: ipu1grp {

+        pinctrl_leds: ledgrp {

             fsl,pins = <

-                MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0x10

-                MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15       0x10

-                MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02        0x10

-                MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03        0x10

-                MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04        0x80000000

-                MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00   0x10

-                MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01   0x10

-                MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02   0x10

-                MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03   0x10

-                MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04   0x10

-                MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05   0x10

-                MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06   0x10

-                MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07   0x10

-                MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08   0x10

-                MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09   0x10

-                MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10  0x10

-                MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11  0x10

-                MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12  0x10

-                MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13  0x10

-                MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14  0x10

-                MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15  0x10

-                MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16  0x10

-                MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17  0x10

-                MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18  0x10

-                MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19  0x10

-                MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20  0x10

-                MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21  0x10

-                MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22  0x10

-                MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23  0x10

+                MX6QDL_PAD_DISP0_DAT6__GPIO4_IO27   0x10

+                MX6QDL_PAD_DISP0_DAT7__GPIO4_IO28   0x10

+                MX6QDL_PAD_RGMII_TD0__GPIO6_IO20           0x010

+                MX6QDL_PAD_RGMII_TD1__GPIO6_IO21           0x010

+                MX6QDL_PAD_DISP0_DAT9__GPIO4_IO30     0x010

             >;

         };

@@ -506,11 +475,6 @@

             >;

         };

-        pinctrl_pwm1_1: pwm1grp {

-            fsl,pins = <

-                MX6QDL_PAD_DISP0_DAT9__PWM2_OUT     0x1b0b1

-            >;

-        };

         /* Linux Console */

         pinctrl_uart1_1: uart1grp-1 { /* RX/TX only */

             fsl,pins = <

@@ -821,13 +785,6 @@

     status = "okay";

};

-

-&pwm2 {

-    pinctrl-names = "default";

-    pinctrl-0 = <&pinctrl_pwm1_1>;

-    status = "okay";

-};

-

&ssi2 {

     fsl,mode = "i2s-slave";

0 Kudos
963 Views
igorpadykov
NXP Employee
NXP Employee

Hi Dehuan

this should not depend on power-domain though you are right,

there may be some other hardware problems. Could you try to attach

jtag debugger and control with it these gpios, also one could check

iomux registers values.

Best regards

igor

0 Kudos