[PATCH 5/5] board: toradex: add splash screen to Toradex i.MX7D Colibri board
Thomas Bonnefille
thomas.bonnefille at bootlin.com
Wed Nov 26 00:41:57 CET 2025
This commit fixes the PWM<A> that was previously used as a GPIO output
instead of a real PWM, it also reserve the framebuffer region to
preserve the splash screen while the OS is booting.
Signed-off-by: Thomas Bonnefille <thomas.bonnefille at bootlin.com>
---
board/toradex/colibri_imx7/colibri_imx7.c | 40 +++++++++++++++++++++++--------
1 file changed, 30 insertions(+), 10 deletions(-)
diff --git a/board/toradex/colibri_imx7/colibri_imx7.c b/board/toradex/colibri_imx7/colibri_imx7.c
index 69a8a18d3a7..b5d22337a04 100644
--- a/board/toradex/colibri_imx7/colibri_imx7.c
+++ b/board/toradex/colibri_imx7/colibri_imx7.c
@@ -7,6 +7,8 @@
#include <env.h>
#include <init.h>
#include <net.h>
+#include <fdt_simplefb.h>
+#include <video.h>
#include <asm/arch/clock.h>
#include <asm/arch/crm_regs.h>
#include <asm/arch/imx-regs.h>
@@ -29,6 +31,7 @@
#include <netdev.h>
#include <power/pmic.h>
#include <power/rn5t567_pmic.h>
+#include <pwm.h>
#include <usb.h>
#include <usb/ehci-ci.h>
#include "../common/tdx-common.h"
@@ -114,7 +117,7 @@ static iomux_v3_cfg_t const backlight_pads[] = {
/* Backlight On */
MX7D_PAD_SD1_WP__GPIO5_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* Backlight PWM<A> (multiplexed pin) */
- MX7D_PAD_GPIO1_IO08__GPIO1_IO8 | MUX_PAD_CTRL(NO_PAD_CTRL),
+ MX7D_PAD_GPIO1_IO08__PWM1_OUT | MUX_PAD_CTRL(NO_PAD_CTRL),
MX7D_PAD_ECSPI2_MOSI__GPIO4_IO21 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
@@ -123,6 +126,8 @@ static iomux_v3_cfg_t const backlight_pads[] = {
static int setup_lcd(void)
{
+ int ret = 0;
+
imx_iomux_v3_setup_multiple_pads(backlight_pads, ARRAY_SIZE(backlight_pads));
/* Set BL_ON */
@@ -130,10 +135,14 @@ static int setup_lcd(void)
gpio_direction_output(GPIO_BL_ON, 1);
/* Set PWM<A> to full brightness (assuming inversed polarity) */
- gpio_request(GPIO_PWM_A, "PWM<A>");
- gpio_direction_output(GPIO_PWM_A, 0);
-
- return 0;
+ enable_pwm_clk(1, 0);
+ ret = pwm_init(0, 0, 0);
+ if (ret)
+ return ret;
+ ret = pwm_config(0, 0, 6666666);
+ if (ret)
+ return ret;
+ ret = pwm_enable(0);
}
#endif
@@ -142,12 +151,11 @@ static int setup_lcd(void)
*/
void board_preboot_os(void)
{
-#ifdef CONFIG_VIDEO
- gpio_direction_output(GPIO_PWM_A, 1);
- gpio_direction_output(GPIO_BL_ON, 0);
-#endif
+ if (IS_ENABLED(CONFIG_VIDEO) && IS_ENABLED(CONFIG_VIDEO_REMOVE)) {
+ gpio_direction_output(GPIO_PWM_A, 1);
+ gpio_direction_output(GPIO_BL_ON, 0);
+ }
}
-
static void setup_iomux_uart(void)
{
imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
@@ -277,6 +285,7 @@ int ft_board_setup(void *blob, struct bd_info *bd)
{
#if defined(CONFIG_IMX_BOOTAUX) && defined(CONFIG_ARCH_FIXUP_FDT_MEMORY)
int up;
+ int ret = -1;
up = arch_auxiliary_core_check_up(0);
if (up) {
@@ -313,6 +322,17 @@ int ft_board_setup(void *blob, struct bd_info *bd)
}
#endif
+ if (IS_ENABLED(CONFIG_FDT_SIMPLEFB))
+ ret = fdt_simplefb_enable_and_mem_rsv(blob);
+
+ /* If simplefb is not enabled and video is active, then at least reserve
+ * the framebuffer region to preserve the splash screen while OS is booting
+ */
+ if (IS_ENABLED(CONFIG_VIDEO) && IS_ENABLED(CONFIG_OF_LIBFDT)) {
+ if (ret && video_is_active())
+ return fdt_add_fb_mem_rsv(blob);
+ }
+
return ft_common_board_setup(blob, bd);
}
#endif
--
2.52.0
More information about the U-Boot
mailing list