sunxi: remove usage of legacy LED API

We are trying to get rid of the legacy LED API and PinePhone is one of
the last ones requiring it.

Unlike all other users of the legacy LED API, PinePhone is controlling
the GPIO LED in SPL. Unfortunately, Sunxi doesn't enable DM support in
SPL because of tight space constraints, so we cannot make use of the
modern LED framework as that is based on DM_GPIO.

Since PinePhone is the last user of this API, I'm moving the logic to
Sunxi SPL code and will let this community decide how to handle this hot
potato.

The logic is extremely simplified as only one GPIO LED is currently
controlled in SPL by PinePhone. No need for handling multiple LEDs or
inverted polarity, let's keep it simple.

This however allows us to use the modern LED framework once in U-Boot
proper since this logic won't collide with the new framework.

Since the only misc drivers that were compiled in SPL were guarded by
CONFIG_LED_STATUS and CONFIG_LED_STATUS_GPIO, we can also disable
CONFIG_SPL_DRIVERS_MISC (which does nothing anymore).

This also saves some space for PinePhone in SPL and proper.

Tested-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
Reviewed-by: Simon Glass <simon.glass@canonical.com>
This commit is contained in:
Quentin Schulz 2026-01-28 17:01:25 +01:00 committed by Andre Przywara
parent a27980786c
commit 256557dd9a
3 changed files with 33 additions and 10 deletions

View File

@ -1232,6 +1232,24 @@ config CHIP_DIP_SCAN
select W1_EEPROM_DS24XXX
select CMD_EXTENSION
config SPL_SUNXI_LED_STATUS
bool "Control GPIO status LED within SPL"
depends on SPL_GPIO && SUNXI_GPIO
if SPL_SUNXI_LED_STATUS
config SPL_SUNXI_LED_STATUS_BIT
int "GPIO number for GPIO status LED"
help
GPIO number for the GPIO controlling the GPIO status LED in SPL.
config SPL_SUNXI_LED_STATUS_STATE
bool "GPIO status LED initial state is on"
help
Whether the initial state of the status LED in SPL must be on or off.
endif # SPL_SUNXI_LED_STATUS
source "board/sunxi/Kconfig"
endif

View File

@ -50,7 +50,6 @@
#include <spl.h>
#include <sy8106a.h>
#include <asm/setup.h>
#include <status_led.h>
DECLARE_GLOBAL_DATA_PTR;
@ -561,14 +560,23 @@ static void sunxi_spl_store_dram_size(phys_addr_t dram_size)
spl->dram_size = dram_size >> 20;
}
static void status_led_init(void)
{
#if CONFIG_IS_ENABLED(SUNXI_LED_STATUS)
unsigned int state = CONFIG_SPL_SUNXI_LED_STATUS_STATE;
unsigned int gpio = CONFIG_SPL_SUNXI_LED_STATUS_BIT;
gpio_request(gpio, "gpio_led");
gpio_direction_output(gpio, state);
#endif
}
void sunxi_board_init(void)
{
int power_failed = 0;
#ifdef CONFIG_LED_STATUS
if (IS_ENABLED(CONFIG_SPL_DRIVERS_MISC))
if (CONFIG_IS_ENABLED(SUNXI_LED_STATUS))
status_led_init();
#endif
#ifdef CONFIG_SY8106A_POWER
power_failed = sy8106a_set_vout1(CONFIG_SY8106A_VOUT1_VOLT);

View File

@ -2,20 +2,17 @@ CONFIG_ARM=y
CONFIG_ARCH_SUNXI=y
CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pinephone-1.2"
CONFIG_DRAM_CLK=552
CONFIG_SPL_DRIVERS_MISC=y
CONFIG_SPL=y
CONFIG_MACH_SUN50I=y
CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
CONFIG_DRAM_ZQ=3881949
CONFIG_MMC_SUNXI_SLOT_EXTRA=2
CONFIG_PINEPHONE_DT_SELECTION=y
CONFIG_SPL_SUNXI_LED_STATUS=y
CONFIG_SPL_SUNXI_LED_STATUS_BIT=114
CONFIG_SPL_SUNXI_LED_STATUS_STATE=y
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
CONFIG_CMD_PSTORE=y
CONFIG_CMD_PSTORE_MEM_ADDR=0x61000000
CONFIG_OF_LIST="sun50i-a64-pinephone-1.1 sun50i-a64-pinephone-1.2"
CONFIG_SYS_I2C_MVTWSI=y
CONFIG_LED_STATUS=y
CONFIG_LED_STATUS_GPIO=y
CONFIG_LED_STATUS0=y
CONFIG_LED_STATUS_BIT=114
CONFIG_LED_STATUS_STATE=2