On 20/11/2025 1:19 am, Quentin Schulz wrote:
[CAUTION: This email is from outside your organization. Unless you trust the 
sender, do not click on links or open attachments as it may be a fraudulent 
email attempting to steal your information and/or compromise your computer.]

From: Quentin Schulz<[email protected]>

This migrates from the legacy LED API to use the modern LED framework
which makes use of the FDT.

Signed-off-by: Quentin Schulz<[email protected]>
---
This migrates the Softing VIN|ING FPGA board to use the modern LED API.

I do not own such board so I cannot test it. I'm a bit unsure about the
port and pin in the port to use for the GPIO LEDs. The numbering for the
GPIO controller in arch/arm/dts/socfpga_cyclone5_vining_fpga.dts seems
incorrect too (29 pins in GPIO0 means 0..28, 29 pins in GPIO1, means
29..57). I'm unsure about the polarity as well.

The GPIO LEDs are only automatically probed (and controlled) if they
have a default-state. In our case, the LEDs are init to off as far as I
could tell, so we add the default-state property to each node and set it
to off. To be able to lit LED_STATUS1 and LED_STATUS2, we need to access
them via their label.

This is only build tested as I do not own the board. Would appreciate if
anyone could test it. As far as I understood, all LEDs should be turned
off automatically during boot by U-Boot and then two LEDs should be
turned on. One should be able to control all 4 LEDs from U-Boot proper
CLI with the led command.

This is a follow-up to:
-https://lore.kernel.org/u-boot/[email protected]/
-https://lore.kernel.org/u-boot/[email protected]/
-https://lore.kernel.org/u-boot/[email protected]/
-https://lore.kernel.org/all/[email protected]/

to continue the effort of getting rid of the legacy LED API. This series
depends on the series listed above.

Multiple other smaller series are coming. I split the whole thing into
different chunks as separate series:
  - "shot in the dark" migration of Socfpga Softing Vining board (this
    series)
  - removal of LED support for a board with no easy migration path
  - make Sunxi community bear the cost of maintaining the last part of the
    legacy API by making it Sunxi-specific,
  - migrate Olinuxino to new API (which requires net/bootp.c to use the
    new API at the same time) + remove everything related to legacy LED
    API,
---
  .../dts/socfpga_cyclone5_vining_fpga-u-boot.dtsi   | 26 ++++++++++++++++++++++
  board/softing/vining_fpga/socfpga.c                | 12 +++++++---
  configs/socfpga_vining_fpga_defconfig              | 13 ++---------
  3 files changed, 37 insertions(+), 14 deletions(-)

diff --git a/arch/arm/dts/socfpga_cyclone5_vining_fpga-u-boot.dtsi 
b/arch/arm/dts/socfpga_cyclone5_vining_fpga-u-boot.dtsi
index 330949c0184..bf5e12ec90c 100644
--- a/arch/arm/dts/socfpga_cyclone5_vining_fpga-u-boot.dtsi
+++ b/arch/arm/dts/socfpga_cyclone5_vining_fpga-u-boot.dtsi
@@ -13,6 +13,32 @@
                 spi0 = "/soc/spi@ff705000";
                 udc0 = &usb1;
         };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led-0 {
+                       default-state = "off";
+                       gpios = <&portb 20 GPIO_ACTIVE_HIGH>;
+               };
+
+               led-1 {
+                       default-state = "off";
+                       gpios = <&portb 25 GPIO_ACTIVE_HIGH>;
+                       label = "status_1";
+               };
+
+               led-2 {
+                       default-state = "off";
+                       gpios = <&portb 26 GPIO_ACTIVE_HIGH>;
+                       label = "status_2";
+               };
+
+               led-3 {
+                       default-state = "off";
+                       gpios = <&portc 7 GPIO_ACTIVE_HIGH>;
+               };
+       };
  };

  &mmc {
diff --git a/board/softing/vining_fpga/socfpga.c 
b/board/softing/vining_fpga/socfpga.c
index ec2c7ea3631..475c19f2781 100644
--- a/board/softing/vining_fpga/socfpga.c
+++ b/board/softing/vining_fpga/socfpga.c
@@ -8,7 +8,7 @@
  #include <env.h>
  #include <init.h>
  #include <net.h>
-#include <status_led.h>
+#include <led.h>
  #include <asm/arch/reset_manager.h>
  #include <asm/global_data.h>
  #include <asm/io.h>
@@ -24,10 +24,16 @@ DECLARE_GLOBAL_DATA_PTR;
  int board_late_init(void)
  {
         const unsigned int usb_nrst_gpio = 35;
+       struct udevice *dev;
         int ret;

-       status_led_set(1, CONFIG_LED_STATUS_ON);
-       status_led_set(2, CONFIG_LED_STATUS_ON);
+       ret = led_get_by_label("status_1", &dev);
+       if (!ret)
+               led_set_state(dev, LEDST_ON);
+
+       ret = led_get_by_label("status_2", &dev);
+       if (!ret)
+               led_set_state(dev, LEDST_ON);

         /* Address of boot parameters for ATAG (if ATAG is used) */
         gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100;
diff --git a/configs/socfpga_vining_fpga_defconfig 
b/configs/socfpga_vining_fpga_defconfig
index f3b6cb717b3..396b7a9715d 100644
--- a/configs/socfpga_vining_fpga_defconfig
+++ b/configs/socfpga_vining_fpga_defconfig
@@ -78,17 +78,8 @@ CONFIG_SYS_DFU_DATA_BUF_SIZE=0x1000000
  CONFIG_DWAPB_GPIO=y
  CONFIG_DM_I2C=y
  CONFIG_SYS_I2C_DW=y
-CONFIG_LED_STATUS=y
-CONFIG_LED_STATUS_GPIO=y
-CONFIG_LED_STATUS0=y
-CONFIG_LED_STATUS_BIT=48
-CONFIG_LED_STATUS1=y
-CONFIG_LED_STATUS_BIT1=53
-CONFIG_LED_STATUS2=y
-CONFIG_LED_STATUS_BIT2=54
-CONFIG_LED_STATUS3=y
-CONFIG_LED_STATUS_BIT3=65
-CONFIG_LED_STATUS_CMD=y
+CONFIG_LED=y
+CONFIG_LED_GPIO=y
  CONFIG_MISC=y
  CONFIG_I2C_EEPROM=y
  CONFIG_SYS_I2C_EEPROM_ADDR=0x50


Acked-by: Tien Fong Chee <[email protected]>

Best regards,
Tien Fong

Reply via email to