Hello All -
I've had a surprising amount of difficulty trying to figure out how to use dts to configure the hardware to heartbeat-blink the debug led on the i.MX6SL EVK. I'm running kernel 3.10.17, building core-image-minimal, and tried adding the following code in the appropriate places in imx6sl-evk.dts (as well as enabling the appropriate items in the kernel menuconfig):
leds {
compatible = "gpio-leds";
debug-led {
label = "Heartbeat";
gpios = <&gpio3 20 0>; //HSIC_STROBE -> GPIO3_20
linux,default-trigger = "heartbeat";
};
};
and
MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x110b0
After much trial and error, I was able to get this to work after modifying the init function register_init_complete (in .../git/drivers/regulator/core.c) to return early without doing anything.
I'm looking into this further, but in the meantime, does anyone have any ideas about what is going on here?
Thanks! -Ben
已解决! 转到解答。
Ben,
Please try this patch that I have just submitted:
'[PATCH] ARM: dts: imx6sl-evk: Keep VGEN1 regulator always enabled' - MARC
Regards,
Fabio Estevam
Ben,
I have just tested with this changes and it works here:
--- a/arch/arm/boot/dts/imx6sl-evk.dts
+++ b/arch/arm/boot/dts/imx6sl-evk.dts
@@ -19,6 +19,18 @@
reg = <0x80000000 0x40000000>;
};
+ leds {
+ compatible = "gpio-leds";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_led>;
+
+ user {
+ label = "Heartbeat";
+ gpios = <&gpio3 20 0>;
+ linux,default-trigger = "heartbeat";
+ };
+ };
+
regulators {
compatible = "simple-bus";
#address-cells = <1>;
@@ -108,6 +120,12 @@
>;
};
+ pinctrl_led: ledgrp {
+ fsl,pins = <
+ MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x17059
+ >;
+ };
+
pinctrl_kpp: kppgrp {
fsl,pins = <
MX6SL_PAD_KEY_ROW0__KEY_ROW0 0x1b010
Regards,
Fabio Estevam
same result as with Marek's suggestions. Side note, is there a significance to you placing the pinctrl_led node in regulators while Marek suggested iomuxc? Also I noticed that your patch is not based from the same version of imx6sl-evk.dts as mine. Is there something else in the file that I might be missing?
ok. I've placed pinctrl_led in the &iomuxc node as follows, is this correct? (still doesn't work, but at least we'll be on the same page)
&iomuxc {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&pinctrl_hog>;
pinctrl-1 = <&pinctrl_hog_sleep>;
pinctrl_led: ledgrp {
fsl,pins = <
MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x17059
>;
};
hog {
pinctrl_hog: hoggrp {
fsl,pins = <
MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x17059
Ben,
Today I tested 3.14-rc1 and got the LEDs blinking on my mx6slevk at the office.
Running the same 3.14-rc1 kernel and dtb on the mx6slevk I have at home I got no LED blinking.
I don't have a scope here at home to measure the signals. The evk I have at home is an old version (it is a red one).
Tomorrow I will try 3.10 with the evk from the office.
Regards,
Fabio Estevam
Ok, so I tested on 3.10 and I see the same behavior as you reported: LED blinks once and then stops.
If I run 3.14-rc1 it works fine though.
Also tested 3.10.17 on a mx53qsb and the LED blinks fine.
I haven't had a chance to debug this.
Regards,
Fabio Estevam
well... I guess that is "good" news, at least we're seeing the same behavior and I'm apparently not totally insane :smileyhappy:. You might try commenting out the call to regulator_init_complete (same as I did) to see that it works afterwards. Perhaps someone shedding some light on what this function does might help to debug the situation. Thanks!
Ben,
Please try this patch that I have just submitted:
'[PATCH] ARM: dts: imx6sl-evk: Keep VGEN1 regulator always enabled' - MARC
Regards,
Fabio Estevam
Some more hints:
Stop the heartbeat blinking:
$ echo none > /sys/class/leds/Heartbeat/trigger
Turn on the LED:
$ echo 1 > /sys/class/leds/Heartbeat/brightness
Turn off the LED:
$ echo 0 > /sys/class/leds/Heartbeat/brightness
Regards,
Fabio Estevam
Check if you have the necessary stuff enabled in your kernel config ...
$ grep LED_TRIGGERS .config
$ grep LEDS_TRIGGER_HEARTBEAT .config
$ grep LEDS_GPIO .config
Next, check if your pin is really configured as GPIO. I don't see
pinctrl-names = "default";
pinctrl-0 = <&led_pin_gpio>;
anywhere in your led {} DT node. You should have those two right under the 'compatible' prop AND the led_pin_gpio should be defined in the &iomuxc node like so:
led_pin_gpio: led_gpio@0 {
fsl,pins = <
MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x110b0
>;
};
You can use /sys/class/leds/*/brightness to toggle the led when debugging this stuff.
Hi Fabio, thanks for your response. Please clarify. What is the significance of this value? The 31st bit isn't defined by any documentation I've seen. I will double-check tomorrow but I believe I did try this value before going on my frantic adventure commenting out initialization functions out until it worked.
It is documented at:
"Bits used for CONFIG:
NO_PAD_CTL(1 << 31): indicate this pin does not need config."
So the LED still does not work?
Regards,
Fabio Estevam