8. LED

8.1. Introduction

LED Pin name Pin number
Green GPIO3_B2 106
Yellow PCA_IO0_3 203

PCA_IO0_3 comes from a GPIO extension chip.

LEDs can be controlled by using the LED device subsystem or by directly operating GPIO.

8.2. Controlling LEDs by device

Linux has its own LED subsystem for LED devices. In iCore-3588Q, LEDs are configured as LED class devices.You can control them via /sys/class/leds/.

  • Green: Turn on after the system powers on.

  • Yellow:defined by user.

You can change the behavior of each LED by using the echo command to write command to its brightness property:

# echo 0 >/sys/class/leds/firefly:blue:power/brightness  //Blue led off
# echo 1 >/sys/class/leds/firefly:blue:power/brightness  //Blue led on

8.3. Using trigger control LED

Trigger contains a variety of ways to control the LED, here with two examples to illustrate.

  • Simple trigger LED

  • Complex trigger LED

For more information, please read the document leds-class.txt.

First of all, we need to know how many LED definition, while the corresponding property of the LED is.

Define LED node in file kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-firefly-port.dtsi

firefly_leds: leds {
    compatible = "gpio-leds";
    status = "okay";
    power_led: power {
        label = ":power"; //green led
        linux,default-trigger = "ir-power-click";
        default-state = "on";
        gpios = <&gpio1 RK_PB3 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&led_power>;
    };

    user_led: user {
        label = ":user"; //yellow led
        linux,default-trigger = "ir-user-click";
        default-state = "off";
        gpios = <&pca9555 PCA_IO0_3 GPIO_ACTIVE_HIGH>;
    };
};

Board :kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-firefly-aio-3588q.dtsi

/* led */
&power_led{
    gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&led_power>;
};

&user_led{
    gpios = <&pca9555 PCA_IO0_3 GPIO_ACTIVE_HIGH>;
};

Note: The value of compatible must match the one in drivers/leds/leds-gpio.c.

8.3.1. Simple trigger LED

It is a simple trigger mode to control LEDs, as follows on the default open yellow LED. And iCore-3588Q’s yellow LED will be turned on after boot.

(1) Defined LED trigger In the kernel/drivers/leds/trigger/led-firefly-demo.c add the following:

DEFINE_LED_TRIGGER(ledtrig_default_control);

(2) Register the trigger.

led_trigger_register_simple("ir-user-click", &ledtrig_default_control);

(3) Control the LED.

led_trigger_event(ledtrig_default_control, LED_FULL);     #yellow led on

(4)Enable LED demo.

led-firefly-demo is disabled in default,if you need to open the demo drive can use the following patch:

--- a/kernel/arch/arm64/boot/dts/rockchip/rk3588-firefly-demo.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3588-firefly-demo.dtsi
@@ -52,7 +52,7 @@
            led_demo: led_demo {
-                status = "disabled";
+                status = "okay";
                 compatible = "firefly,rk3588-led";
                 };

8.3.2. Complex trigger LED

The following is the trigger mode control LED complex example, timer trigger is to let the LED to achieve constant light off effect.

We need to configure the timer trigger on the kernel.

In the kernel-5.10 path using make menuconfig, in accordance with the following method to chose timer trigger driver.

Device Drivers
--->LED Support
   --->LED Trigger support
      --->LED Timer Trigger

Save the configuration and compile the kernel, the kernel.img burn iCore-3588Q board. We can use the serial input command, you can see the yellow light non-stop interval flashing.

echo "timer" > /sys/class/leds/:user/trigger

The user can also use the cat command to get the available values for the trigger:

# cat /sys/class/leds/:user/trigger
none ir-power-click rfkill-any rfkill-none test_ac-online test_battery-charging-or-full 
test_battery-charging test_battery-full test_battery-charging-blink-full-solid 
test_usb-online mmc0 [timer] heartbeat backlight default-on ir-user-click mmc1 
rfkill0 tcpm-source-psy-6-0022-online rfkill1 rfkill2