splash screen on the stm32f769 disco board
Subsystems (3)
v2 cover splash screen on the stm32f769 disco board
Version 1:
- Initial commit:
Version2:
- swap patches to avoid compilation issue.
- remove panel timings from device tree
This serie contains all patchsets needed for displaying a splash screen on the stm32f769 disco board.
A new config has been created configs/stm32f769-disco_defconfig. This is necessary due to the difference of panels between stm32f769-disco & stm32f746-disco boards.
Yannick Fertré (10):
dm: panel: get timings from panel
video: stm32: stm32_ltdc: add bridge to display controller
video: add support of MIPI DSI interface
video: add support of panel OTM8009A
video: add support of panel RM68200
video: add MIPI DSI host controller bridge
video: add support of STM32 MIPI DSI controller driver
arm: dts: stm32: add dsi for STM32F746
arm: dts: stm32: add display for STM32F769 disco board
board: Add STM32F769 SoC, discovery board support
arch/arm/dts/stm32f746.dtsi | 12 + arch/arm/dts/stm32f769-disco.dts | 41 ++ configs/stm32f769-disco_defconfig | 67 +++ drivers/video/Kconfig | 34 ++ drivers/video/Makefile | 4 + drivers/video/dw_mipi_dsi.c | 826 +++++++++++++++++++++++++++++++++++++ drivers/video/mipi_display.c | 817 ++++++++++++++++++++++++++++++++++++ drivers/video/orisetech_otm8009a.c | 366 ++++++++++++++++ drivers/video/panel-uclass.c | 11 + drivers/video/raydium-rm68200.c | 338 +++++++++++++++ drivers/video/stm32/Kconfig | 10 + drivers/video/stm32/Makefile | 1 + drivers/video/stm32/stm32_dsi.c | 427 +++++++++++++++++++ drivers/video/stm32/stm32_ltdc.c | 154 ++++--- include/dw_mipi_dsi.h | 32 ++ include/mipi_display.h | 257 +++++++++++- include/panel.h | 18 + 17 files changed, 3352 insertions(+), 63 deletions(-) create mode 100644 configs/stm32f769-disco_defconfig create mode 100644 drivers/video/dw_mipi_dsi.c create mode 100644 drivers/video/mipi_display.c create mode 100644 drivers/video/orisetech_otm8009a.c create mode 100644 drivers/video/raydium-rm68200.c create mode 100644 drivers/video/stm32/stm32_dsi.c create mode 100644 include/dw_mipi_dsi.h
Signature · 1 line
1.9.1
PATCH v2 1/10 dm: panel: get timings from panel
Get timings from panel instead of read device tree.
--- drivers/video/panel-uclass.c | 11 +++++++++++ include/panel.h | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+)
drivers/video/panel-uclass.c +11 -0
@@ -18,6 +18,17 @@ int panel_enable_backlight(struct udevice *dev)return ops->enable_backlight (dev); } +int panel_get_display_timing (struct udevice *dev, +struct display_timing *timings) +{ +struct panel_ops *ops =panel_get_ops (dev); + +if (!ops->get_display_timing) +return -ENOSYS ; + +return ops->get_display_timing (dev, timings); +} +UCLASS_DRIVER (panel) = { .id =UCLASS_PANEL , .name ="panel" ,
include/panel.h +18 -0
@@ -15,6 +15,15 @@ struct panel_ops {* @return 0 if OK, -ve on error */ int (*enable_backlight)(struct udevice *dev); +/** +* get_timings() - Get display timings from panel. +* +* @dev: Panel device containing the display timings +* @tim: Place to put timings +* @return 0 if OK, -ve on error +*/ +int (*get_display_timing)(struct udevice *dev, +struct display_timing *timing); };#define panel_get_ops (dev) ((struct panel_ops *)(dev)->driver->ops)
@@ -27,4 +36,13 @@ struct panel_ops {*/ int panel_enable_backlight (struct udevice *dev); +/** +* panel_get_display_timing() - Get display timings from panel. +* +* @dev: Panel device containing the display timings +* @return 0 if OK, -ve on error +*/ +int panel_get_display_timing (struct udevice *dev, +struct display_timing *timing); +#endif
Signature · 1 line
1.9.1
PATCH v2 1/10 dm: panel: get timings from panel
Quoted 7 lines · Yannick Fertré
Get timings from panel instead of read device tree.
Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/panel-uclass.c | 11 +++++++++++ include/panel.h | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+)
PATCH v2 1/10 dm: panel: get timings from panel
In reply to Yannick FertréQuoted 7 lines · On Fri, 13 Jul 2018 14:11:09 +0200 Yannick Fertré yannick.fertre at st.com…
Get timings from panel instead of read device tree.
Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/panel-uclass.c | 11 +++++++++++ include/panel.h | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+)
Applied to u-boot-video/master, thanks!
--
Anatolij
PATCH v2 2/10 video: stm32: stm32_ltdc: add bridge to display controller
In reply to Yannick FertréManage a bridge insert between the display controller & a panel.
--- drivers/video/stm32/stm32_ltdc.c | 154 +++++++++++++++++++++++---------------- 1 file changed, 92 insertions(+), 62 deletions(-)
drivers/video/stm32/stm32_ltdc.c +92 -62
@@ -4,22 +4,20 @@* Author(s): Philippe Cornu <[email protected]> for STMicroelectronics. * Yannick Fertre <[email protected]> for STMicroelectronics. */ -#include <common.h> #include <clk.h> +#include <display.h> #include <dm.h> #include <panel.h> #include <reset.h> #include <video.h> +#include <video_bridge.h> #include <asm/io.h> #include <asm/arch/gpio.h> #include <dm/device-internal.h> -DECLARE_GLOBAL_DATA_PTR ; -struct stm32_ltdc_priv {void __iomem *regs; -struct display_timing timing;enum video_log2_bpp l2bpp;u32 bg_col_argb;u32 crop_x, crop_y, crop_w, crop_h;
@@ -174,8 +172,8 @@ static u32 stm32_ltdc_get_pixel_format(enum video_log2_bpp l2bpp)case VIDEO_BPP2 :case VIDEO_BPP4 :default : -debug ("%s: warning %dbpp not supported yet, %dbpp instead\n" , - __func__,VNBITS (l2bpp),VNBITS (VIDEO_BPP16 )); +pr_warn ("%s: warning %dbpp not supported yet, %dbpp instead\n" , + __func__,VNBITS (l2bpp),VNBITS (VIDEO_BPP16 )); pf =PF_RGB565 ;break ; }
@@ -209,23 +207,23 @@ static void stm32_ltdc_enable(struct stm32_ltdc_priv *priv)setbits_le32 (priv->regs +LTDC_GCR ,GCR_LTDCEN ); } -static void stm32_ltdc_set_mode (struct stm32_ltdc_priv *priv) +static void stm32_ltdc_set_mode (struct stm32_ltdc_priv *priv, +struct display_timing *timings) {void __iomem *regs = priv->regs; -struct display_timing *timing = &priv->timing;u32 hsync, vsync, acc_hbp, acc_vbp, acc_act_w, acc_act_h;u32 total_w, total_h;u32 val;/* Convert video timings to ltdc timings */ - hsync = timing->hsync_len.typ -1 ; - vsync = timing->vsync_len.typ -1 ; - acc_hbp = hsync + timing->hback_porch.typ; - acc_vbp = vsync + timing->vback_porch.typ; - acc_act_w = acc_hbp + timing->hactive.typ; - acc_act_h = acc_vbp + timing->vactive.typ; - total_w = acc_act_w + timing->hfront_porch.typ; - total_h = acc_act_h + timing->vfront_porch.typ; + hsync = timings->hsync_len.typ -1 ; + vsync = timings->vsync_len.typ -1 ; + acc_hbp = hsync + timings->hback_porch.typ; + acc_vbp = vsync + timings->vback_porch.typ; + acc_act_w = acc_hbp + timings->hactive.typ; + acc_act_h = acc_vbp + timings->vactive.typ; + total_w = acc_act_w + timings->hfront_porch.typ; + total_h = acc_act_h + timings->vfront_porch.typ;/* Synchronization sizes */ val = (hsync <<16 ) | vsync;
@@ -247,14 +245,14 @@ static void stm32_ltdc_set_mode(struct stm32_ltdc_priv *priv)/* Signal polarities */ val =0 ; -debug ("%s: timing->flags 0x%08x\n" , __func__, timing->flags); -if (timing->flags &DISPLAY_FLAGS_HSYNC_HIGH ) +debug ("%s: timing->flags 0x%08x\n" , __func__, timings->flags); +if (timings->flags &DISPLAY_FLAGS_HSYNC_HIGH ) val |=GCR_HSPOL ; -if (timing->flags &DISPLAY_FLAGS_VSYNC_HIGH ) +if (timings->flags &DISPLAY_FLAGS_VSYNC_HIGH ) val |=GCR_VSPOL ; -if (timing->flags &DISPLAY_FLAGS_DE_HIGH ) +if (timings->flags &DISPLAY_FLAGS_DE_HIGH ) val |=GCR_DEPOL ; -if (timing->flags &DISPLAY_FLAGS_PIXDATA_NEGEDGE ) +if (timings->flags &DISPLAY_FLAGS_PIXDATA_NEGEDGE ) val |=GCR_PCPOL ;clrsetbits_le32 (regs +LTDC_GCR ,GCR_HSPOL |GCR_VSPOL |GCR_DEPOL |GCR_PCPOL , val);
@@ -330,96 +328,128 @@ static int stm32_ltdc_probe(struct udevice *dev)struct video_uc_platdata *uc_plat =dev_get_uclass_platdata (dev);struct video_priv *uc_priv =dev_get_uclass_priv (dev);struct stm32_ltdc_priv *priv =dev_get_priv (dev); -struct udevice *panel; +#ifdef CONFIG_VIDEO_BRIDGE +struct udevice *bridge =NULL ; +#endif +struct udevice *panel =NULL ; +struct display_timing timings;struct clk pclk;struct reset_ctl rst; -int rate, ret; +int ret; priv->regs = (void *)dev_read_addr (dev);if ((fdt_addr_t )priv->regs ==FDT_ADDR_T_NONE ) { -debug ("%s: ltdc dt register address error\n" , __func__); +dev_err (dev,"ltdc dt register address error\n" );return -EINVAL ; } ret =clk_get_by_index (dev,0 , &pclk);if (ret) { -debug ("%s: peripheral clock get error %d\n" , __func__, ret); +dev_err (dev,"peripheral clock get error %d\n" , ret);return ret; } ret =clk_enable (&pclk);if (ret) { -debug ("%s: peripheral clock enable error %d\n" , - __func__, ret); +dev_err (dev,"peripheral clock enable error %d\n" , ret);return ret; } - ret =reset_get_by_index (dev,0 , &rst); + ret =uclass_first_device_err (UCLASS_PANEL , &panel);if (ret) { -debug ("%s: missing ltdc hardware reset\n" , __func__); -return -ENODEV ; +dev_err (dev,"panel device error %d\n" , ret); +return ret; } -/* Reset */ -reset_deassert (&rst); - - ret =uclass_first_device (UCLASS_PANEL , &panel); + ret =panel_get_display_timing (panel, &timings);if (ret) { -debug ("%s: panel device error %d\n" , __func__, ret); -return ret; + ret =fdtdec_decode_display_timing (gd->fdt_blob, +dev_of_offset (panel), +0 , &timings); +if (ret) { +dev_err (dev,"decode display timing error %d\n" , ret); +return ret; + } } - ret =panel_enable_backlight (panel); + ret =clk_set_rate (&pclk, timings.pixelclock.typ); +if (ret) +dev_warn (dev,"fail to set pixel clock %d hz\n" , + timings.pixelclock.typ); + +debug ("%s: Set pixel clock req %d hz get %ld hz\n" , __func__, + timings.pixelclock.typ,clk_get_rate (&pclk)); + + ret =reset_get_by_index (dev,0 , &rst);if (ret) { -debug ("%s: panel %s enable backlight error %d\n" , - __func__, panel->name, ret); +dev_err (dev,"missing ltdc hardware reset\n" );return ret; } - ret =fdtdec_decode_display_timing (gd->fdt_blob, -dev_of_offset (dev),0 , - &priv->timing); -if (ret) { -debug ("%s: decode display timing error %d\n" , - __func__, ret); -return -EINVAL ; - } +/* Reset */ +reset_deassert (&rst); - rate =clk_set_rate (&pclk, priv->timing.pixelclock.typ); -if (rate <0 ) { -debug ("%s: fail to set pixel clock %d hz %d hz\n" , - __func__, priv->timing.pixelclock.typ, rate); -return rate; +#ifdef CONFIG_VIDEO_BRIDGE + ret =uclass_get_device (UCLASS_VIDEO_BRIDGE ,0 , &bridge); +if (ret) +debug ("No video bridge, or no backlight on bridge\n" ); + +if (bridge) { + ret =video_bridge_attach (bridge); +if (ret) { +dev_err (dev,"fail to attach bridge\n" ); +return ret; + } } - -debug ("%s: Set pixel clock req %d hz get %d hz\n" , __func__, - priv->timing.pixelclock.typ, rate); - +#endif /* TODO Below parameters are hard-coded for the moment... */ priv->l2bpp =VIDEO_BPP16 ; priv->bg_col_argb =0xFFFFFFFF ;/* white no transparency */ priv->crop_x =0 ; priv->crop_y =0 ; - priv->crop_w = priv->timing.hactive.typ; - priv->crop_h = priv->timing.vactive.typ; + priv->crop_w = timings.hactive.typ; + priv->crop_h = timings.vactive.typ; priv->alpha =0xFF ;debug ("%s: %dx%d %dbpp frame buffer at 0x%lx\n" , __func__, - priv->timing.hactive.typ, priv->timing.vactive.typ, + timings.hactive.typ, timings.vactive.typ,VNBITS (priv->l2bpp), uc_plat->base);debug ("%s: crop %d,%d %dx%d bg 0x%08x alpha %d\n" , __func__, priv->crop_x, priv->crop_y, priv->crop_w, priv->crop_h, priv->bg_col_argb, priv->alpha);/* Configure & start LTDC */ -stm32_ltdc_set_mode (priv); +stm32_ltdc_set_mode (priv, &timings);stm32_ltdc_set_layer1 (priv, uc_plat->base);stm32_ltdc_enable (priv); - uc_priv->xsize = priv->timing.hactive.typ; - uc_priv->ysize = priv->timing.vactive.typ; + uc_priv->xsize = timings.hactive.typ; + uc_priv->ysize = timings.vactive.typ; uc_priv->bpix = priv->l2bpp; +#ifdef CONFIG_VIDEO_BRIDGE +if (bridge) { + ret =video_bridge_set_backlight (bridge,80 ); +if (ret) { +dev_err (dev,"fail to set backlight\n" ); +return ret; + } + }else { + ret =panel_enable_backlight (panel); +if (ret) { +dev_err (dev,"panel %s enable backlight error %d\n" , + panel->name, ret); +return ret; + } + } +#else + ret =panel_enable_backlight (panel); +if (ret) { +dev_err (dev,"panel %s enable backlight error %d\n" , + panel->name, ret); +return ret; + } +#endif video_set_flush_dcache (dev, true);return 0 ;
Signature · 1 line
1.9.1
PATCH v2 2/10 video: stm32: stm32_ltdc: add bridge to display controller
Quoted 11 lines · On Fri, 13 Jul 2018 14:11:10 +0200 Yannick Fertré yannick.fertre at st.com…
Manage a bridge insert between the display controller & a panel.
Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/stm32/stm32_ltdc.c | 154 +++++++++++++++++++++++---------------- 1 file changed, 92 insertions(+), 62 deletions(-)drivers/video/stm32/stm32_ltdc.c +0
-0
...
drivers/video/stm32/stm32_ltdc.c static int stm32_ltdc_probe(struct udevice *dev) · line 333
Quoted 8 lines
drivers/video/stm32/stm32_ltdc.c +3
-1@@ -330,96 +328,128 @@ static int stm32_ltdc_probe(struct udevice *dev)struct video_uc_platdata *uc_plat =dev_get_uclass_platdata (dev);struct video_priv *uc_priv =dev_get_uclass_priv (dev);struct stm32_ltdc_priv *priv =dev_get_priv (dev); -struct udevice *panel; +#ifdef CONFIG_VIDEO_BRIDGE +struct udevice *bridge =NULL ; +#endif
Please drop ifdef here. See below.
...
Quoted 12 lines
drivers/video/stm32/stm32_ltdc.c +7
-5- rate =clk_set_rate (&pclk, priv->timing.pixelclock.typ); -if (rate <0 ) { -debug ("%s: fail to set pixel clock %d hz %d hz\n" , - __func__, priv->timing.pixelclock.typ, rate); -return rate; +#ifdef CONFIG_VIDEO_BRIDGE + ret =uclass_get_device (UCLASS_VIDEO_BRIDGE ,0 , &bridge); +if (ret) +debug ("No video bridge, or no backlight on bridge\n" ); + +if (bridge) { + ret =video_bridge_attach (bridge);
drivers/video/stm32/stm32_ltdc.c static int stm32_ltdc_probe(struct udevice *dev) · line 404
Quoted 10 lines
drivers/video/stm32/stm32_ltdc.c +5
-4+if (ret) { +dev_err (dev,"fail to attach bridge\n" ); +return ret; + } } - -debug ("%s: Set pixel clock req %d hz get %d hz\n" , __func__, - priv->timing.pixelclock.typ, rate); - +#endif
Can we do without ifdefs and use IS_ENABLED() instead ? E.g. like:
if (IS_ENABLED(CONFIG_VIDEO_BRIDGE)) {
ret = uclass_get_device(UCLASS_VIDEO_BRIDGE, 0, &bridge);
...
}...
Quoted 13 lines
drivers/video/stm32/stm32_ltdc.c +13
-0+#ifdef CONFIG_VIDEO_BRIDGE +if (bridge) { + ret =video_bridge_set_backlight (bridge,80 ); +if (ret) { +dev_err (dev,"fail to set backlight\n" ); +return ret; + } + }else { + ret =panel_enable_backlight (panel); +if (ret) { +dev_err (dev,"panel %s enable backlight error %d\n" , + panel->name, ret); +return ret;
drivers/video/stm32/stm32_ltdc.c static int stm32_ltdc_probe(struct udevice *dev) · line 452
Quoted 10 lines
drivers/video/stm32/stm32_ltdc.c +10
-0+ } + } +#else + ret =panel_enable_backlight (panel); +if (ret) { +dev_err (dev,"panel %s enable backlight error %d\n" , + panel->name, ret); +return ret; + } +#endif
Please reduce code duplication:
if (!bridge) {
ret = panel_enable_backlight(panel);
if (ret) {
dev_err(dev, "panel %s enable backlight error %d\n",
panel->name, ret);
return ret;
}
} else if (IS_ENABLED(CONFIG_VIDEO_BRIDGE)) {
ret = video_bridge_set_backlight(bridge, 80);
if (ret) {
dev_err(dev, "fail to set backlight\n");
return ret;
}
}--
Anatolij
PATCH v2 3/10 video: add support of MIPI DSI interface
In reply to Yannick FertréMipi_display.c contains a set of dsi helpers. This file is a copy of file drm_mipi_dsi.c (linux kernel).
--- drivers/video/Kconfig | 9 + drivers/video/Makefile | 1 + drivers/video/mipi_display.c | 817 +++++++++++++++++++++++++++++++++++++++++++ include/mipi_display.h | 257 +++++++++++++- 4 files changed, 1083 insertions(+), 1 deletion(-) create mode 100644 drivers/video/mipi_display.c
drivers/video/Kconfig +9 -0
@@ -73,6 +73,15 @@ config VIDEO_ANSI Enable ANSI escape sequence decoding for a more fully functional console. +config VIDEO_MIPI_DSI + bool "Support MIPI DSI interface" + depends on DM_VIDEO + default y if DM_VIDEO + help + Support MIPI DSI interface for driving a MIPI compatible device. + The MIPI Display Serial Interface (MIPI DSI) defines a high-speed + serial interface between a host processor and a display module. + config CONSOLE_NORMAL bool "Support a simple text console" depends on DM_VIDEO
drivers/video/Makefile +1 -0
@@ -50,6 +50,7 @@ obj-$(CONFIG_FORMIKE) += formike.o obj-$(CONFIG_LG4573) += lg4573.o obj-$(CONFIG_AM335X_LCD) += am335x-fb.o obj-$(CONFIG_VIDEO_DW_HDMI) += dw_hdmi.o +obj-${CONFIG_VIDEO_MIPI_DSI} += mipi_display.o obj-$(CONFIG_VIDEO_SIMPLE) += simplefb.o obj-${CONFIG_VIDEO_TEGRA124} += tegra124/ obj-${CONFIG_EXYNOS_FB} += exynos/
drivers/video/mipi_display.c new file +817 -0
817 lines not on this page · raw message
include/mipi_display.h +256 -1
278 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v2 3/10 video: add support of MIPI DSI interface
Quoted 18 lines · Yannick Fertré
Mipi_display.ccontains a set of dsi helpers. This file is a copy of filedrm_mipi_dsi.c(linux kernel).Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/Kconfig | 9 + drivers/video/Makefile | 1 + drivers/video/mipi_display.c | 817 +++++++++++++++++++++++++++++++++++++++++++ include/mipi_display.h | 257 +++++++++++++- 4 files changed, 1083 insertions(+), 1 deletion(-) create mode 100644 drivers/video/mipi_display.cdrivers/video/Kconfig +0
-0
drivers/video/Kconfig config VIDEO_ANSI · line 79
Quoted 7 lines
drivers/video/Kconfig +4
-0@@ -73,6 +73,15 @@ config VIDEO_ANSI Enable ANSI escape sequence decoding for a more fully functional console. +config VIDEO_MIPI_DSI + bool "Support MIPI DSI interface" + depends on DM_VIDEO + default y if DM_VIDEO
Why default y? Many boards won't use MIPI.
Quoted 6 lines
drivers/video/Kconfig +5
-0+ help + Support MIPI DSI interface for driving a MIPI compatible device. + The MIPI Display Serial Interface (MIPI DSI) defines a high-speed + serial interface between a host processor and a display module. + config CONSOLE_NORMAL
[..]
Quoted 107 lines
include/mipi_display.h +79
-1@@ -4,12 +4,16 @@* * Copyright (C) 2010 Guennadi Liakhovetski <[email protected]> * Copyright (C) 2006 Nokia Corporation -* Author: Imre Deak <[email protected]> +* Copyright (C) 2018 STMicroelectronics - All Rights Reserved +* Author(s): Imre Deak <[email protected]> +* Yannick Fertre <[email protected]> +* Philippe Cornu <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ +#ifndef MIPI_DISPLAY_H #define MIPI_DISPLAY_H @@ -115,6 +119,14 @@ enum {MIPI_DCS_READ_MEMORY_CONTINUE =0x3E ,MIPI_DCS_SET_TEAR_SCANLINE =0x44 ,MIPI_DCS_GET_SCANLINE =0x45 , +MIPI_DCS_SET_DISPLAY_BRIGHTNESS =0x51 ,/* MIPI DCS 1.3 */ +MIPI_DCS_GET_DISPLAY_BRIGHTNESS =0x52 ,/* MIPI DCS 1.3 */ +MIPI_DCS_WRITE_CONTROL_DISPLAY =0x53 ,/* MIPI DCS 1.3 */ +MIPI_DCS_GET_CONTROL_DISPLAY =0x54 ,/* MIPI DCS 1.3 */ +MIPI_DCS_WRITE_POWER_SAVE =0x55 ,/* MIPI DCS 1.3 */ +MIPI_DCS_GET_POWER_SAVE =0x56 ,/* MIPI DCS 1.3 */ +MIPI_DCS_SET_CABC_MIN_BRIGHTNESS =0x5E ,/* MIPI DCS 1.3 */ +MIPI_DCS_GET_CABC_MIN_BRIGHTNESS =0x5F ,/* MIPI DCS 1.3 */ MIPI_DCS_READ_DDB_START =0xA1 , MIPI_DCS_READ_DDB_CONTINUE = 0xA8, };@@ -127,4 +139,247 @@ enum {#define MIPI_DCS_PIXEL_FMT_8BIT 2#define MIPI_DCS_PIXEL_FMT_3BIT 1 +struct mipi_dsi_host ; +struct mipi_dsi_device ; + +/* request ACK from peripheral */ +#define MIPI_DSI_MSG_REQ_ACK BIT(0) +/* use Low Power Mode to transmit message */ +#define MIPI_DSI_MSG_USE_LPM BIT(1) + +/** +* struct mipi_dsi_msg - read/write DSI buffer +* @channel: virtual channel id +* @type: payload data type +* @flags: flags controlling this message transmission +* @tx_len: length of @tx_buf +* @tx_buf: data to be written +* @rx_len: length of @rx_buf +* @rx_buf: data to be read, or NULL +*/ +struct mipi_dsi_msg { +u8 channel; +u8 type; +u16 flags; + +size_t tx_len; +const void *tx_buf; + +size_t rx_len; +void *rx_buf; +}; + +bool mipi_dsi_packet_format_is_short (u8 type); +bool mipi_dsi_packet_format_is_long (u8 type); + +/** +* struct mipi_dsi_packet - represents a MIPI DSI packet in protocol format +* @size: size (in bytes) of the packet +* @header: the four bytes that make up the header (Data ID, Word Count or +* Packet Data, and ECC) +* @payload_length: number of bytes in the payload +* @payload: a pointer to a buffer containing the payload, if any +*/ +struct mipi_dsi_packet { +size_t size; +u8 header[4 ]; +size_t payload_length; +const u8 *payload; +}; + +int mipi_dsi_create_packet (struct mipi_dsi_packet *packet, +const struct mipi_dsi_msg *msg); + +/** +* struct mipi_dsi_host_ops - DSI bus operations +* @attach: attach DSI device to DSI host +* @detach: detach DSI device from DSI host +* @transfer: transmit a DSI packet +* +* DSI packets transmitted by .transfer() are passed in as mipi_dsi_msg +* structures. This structure contains information about the type of packet +* being transmitted as well as the transmit and receive buffers. When an +* error is encountered during transmission, this function will return a +* negative error code. On success it shall return the number of bytes +* transmitted for write packets or the number of bytes received for read +* packets. +* +* Note that typically DSI packet transmission is atomic, so the .transfer()
include/mipi_display.h enum { · line 217
Quoted 10 lines
include/mipi_display.h +10
-0+* function will seldomly return anything other than the number of bytes +* contained in the transmit buffer on success. +*/ +struct mipi_dsi_host_ops { +int (*attach)(struct mipi_dsi_host *host, +struct mipi_dsi_device *dsi); +int (*detach)(struct mipi_dsi_host *host, +struct mipi_dsi_device *dsi); +ssize_t (*transfer)(struct mipi_dsi_host *host, +const struct mipi_dsi_msg *msg);
This looks like an interface that should use driver model?
include/mipi_display.h enum { · line 326
Quoted 4 lines
include/mipi_display.h +4
-0+ +int mipi_dsi_attach (struct mipi_dsi_device *dsi); +int mipi_dsi_detach (struct mipi_dsi_device *dsi); +int mipi_dsi_pixel_format_to_bpp (enum mipi_dsi_pixel_format fmt);
Should there be a MIPI uclass?
[..]
include/mipi_display.h enum { · line 223
Quoted 2 lines
include/mipi_display.h +2
-0+ssize_t mipi_dsi_dcs_write_buffer (struct mipi_dsi_device *dsi, +const void *data,size_t len);
These functions all need full function comments.
Quoted 28 lines
include/mipi_display.h +26
-1+ssize_t mipi_dsi_dcs_write (struct mipi_dsi_device *dsi,u8 cmd, +const void *data,size_t len); +ssize_t mipi_dsi_dcs_read (struct mipi_dsi_device *dsi,u8 cmd,void *data, +size_t len); +int mipi_dsi_dcs_nop (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_soft_reset (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_get_power_mode (struct mipi_dsi_device *dsi,u8 *mode); +int mipi_dsi_dcs_get_pixel_format (struct mipi_dsi_device *dsi,u8 *format); +int mipi_dsi_dcs_enter_sleep_mode (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_exit_sleep_mode (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_set_display_off (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_set_display_on (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_set_column_address (struct mipi_dsi_device *dsi,u16 start, +u16 end); +int mipi_dsi_dcs_set_page_address (struct mipi_dsi_device *dsi,u16 start, +u16 end); +int mipi_dsi_dcs_set_tear_off (struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_set_tear_on (struct mipi_dsi_device *dsi, +enum mipi_dsi_dcs_tear_mode mode); +int mipi_dsi_dcs_set_pixel_format (struct mipi_dsi_device *dsi,u8 format); +int mipi_dsi_dcs_set_tear_scanline (struct mipi_dsi_device *dsi,u16 scanline); +int mipi_dsi_dcs_set_display_brightness (struct mipi_dsi_device *dsi, +u16 brightness); +int mipi_dsi_dcs_get_display_brightness (struct mipi_dsi_device *dsi, +u16 *brightness); +#endif --
Quoted 2 lines
1.9.1
Regards,
Simon
PATCH v2 4/10 video: add support of panel OTM8009A
In reply to Yannick FertréSupport for Orise Tech otm8009a 480p dsi 2dl video mode panel.
--- drivers/video/Kconfig | 8 + drivers/video/Makefile | 1 + drivers/video/orisetech_otm8009a.c | 366 +++++++++++++++++++++++++++++++++++++ 3 files changed, 375 insertions(+) create mode 100644 drivers/video/orisetech_otm8009a.c
drivers/video/Kconfig +8 -0
@@ -329,6 +329,14 @@ config VIDEO_LCD_ANX9804 from a parallel LCD interface and translate it on the fy into a DP interface for driving eDP TFT displays. It uses I2C for configuration. +config VIDEO_LCD_ORISETECH_OTM8009A + bool "OTM8009A DSI LCD panel support" + depends on DM_VIDEO + select VIDEO_MIPI_DSI + default n + help + Support for Orise Tech otm8009a 480p dsi 2dl video mode panel. + config VIDEO_LCD_SSD2828 bool "SSD2828 bridge chip" default n
drivers/video/Makefile +1 -0
@@ -35,6 +35,7 @@ obj-$(CONFIG_VIDEO_DA8XX) += da8xx-fb.o videomodes.o obj-$(CONFIG_VIDEO_EFI) += efi.o obj-$(CONFIG_VIDEO_LCD_ANX9804) += anx9804.o obj-$(CONFIG_VIDEO_LCD_HITACHI_TX18D42VM) += hitachi_tx18d42vm_lcd.o +obj-$(CONFIG_VIDEO_LCD_ORISETECH_OTM8009A) += orisetech_otm8009a.o obj-$(CONFIG_VIDEO_LCD_SSD2828) += ssd2828.o obj-$(CONFIG_VIDEO_MB862xx) += mb862xx.o videomodes.o obj-$(CONFIG_VIDEO_MX3) += mx3fb.o videomodes.o
drivers/video/orisetech_otm8009a.c new file +366 -0
366 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v2 4/10 video: add support of panel OTM8009A
Quoted 9 lines · Yannick Fertré
Support for Orise Tech otm8009a 480p dsi 2dl video mode panel.
Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/Kconfig | 8 + drivers/video/Makefile | 1 + drivers/video/orisetech_otm8009a.c | 366 +++++++++++++++++++++++++++++++++++++ 3 files changed, 375 insertions(+) create mode 100644 drivers/video/orisetech_otm8009a.c
PATCH v2 5/10 video: add support of panel RM68200
In reply to Yannick FertréSupport for Raydium RM68200 720p dsi 2dl video mode panel. This rm68200 panel driver is based on the Linux Kernel driver from drivers/gpu/drm/panel/panel-raydium-rm68200.c.
--- drivers/video/Kconfig | 8 + drivers/video/Makefile | 1 + drivers/video/raydium-rm68200.c | 338 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 347 insertions(+) create mode 100644 drivers/video/raydium-rm68200.c
drivers/video/Kconfig +8 -0
@@ -337,6 +337,14 @@ config VIDEO_LCD_ORISETECH_OTM8009A help Support for Orise Tech otm8009a 480p dsi 2dl video mode panel. +config VIDEO_LCD_RAYDIUM_RM68200 + bool "RM68200 DSI LCD panel support" + depends on DM_VIDEO + select VIDEO_MIPI_DSI + default n + help + Support for Raydium rm68200 720x1280 dsi 2dl video mode panel. + config VIDEO_LCD_SSD2828 bool "SSD2828 bridge chip" default n
drivers/video/Makefile +1 -0
@@ -36,6 +36,7 @@ obj-$(CONFIG_VIDEO_EFI) += efi.o obj-$(CONFIG_VIDEO_LCD_ANX9804) += anx9804.o obj-$(CONFIG_VIDEO_LCD_HITACHI_TX18D42VM) += hitachi_tx18d42vm_lcd.o obj-$(CONFIG_VIDEO_LCD_ORISETECH_OTM8009A) += orisetech_otm8009a.o +obj-$(CONFIG_VIDEO_LCD_RAYDIUM_RM68200) += raydium-rm68200.o obj-$(CONFIG_VIDEO_LCD_SSD2828) += ssd2828.o obj-$(CONFIG_VIDEO_MB862xx) += mb862xx.o videomodes.o obj-$(CONFIG_VIDEO_MX3) += mx3fb.o videomodes.o
drivers/video/raydium-rm68200.c new file +338 -0
338 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v2 5/10 video: add support of panel RM68200
Quoted 4 lines · Yannick Fertré
Support for Raydium RM68200 720p dsi 2dl video mode panel. This rm68200 panel driver is based on the Linux Kernel driver from
drivers/gpu/drm/panel/panel-raydium-rm68200.c.
Quoted 8 lines
Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/Kconfig | 8 + drivers/video/Makefile | 1 + drivers/video/raydium-rm68200.c | 338 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 347 insertions(+) create mode 100644 drivers/video/raydium-rm68200.c
PATCH v2 6/10 video: add MIPI DSI host controller bridge
In reply to Yannick FertréAdd a Synopsys Designware MIPI DSI host bridge driver, based on the Rockchip version from rockchip/dw-mipi-dsi.c with phy & bridge APIs.
--- drivers/video/Kconfig | 9 + drivers/video/Makefile | 1 + drivers/video/dw_mipi_dsi.c | 826 ++++++++++++++++++++++++++++++++++++++++++++ include/dw_mipi_dsi.h | 32 ++ 4 files changed, 868 insertions(+) create mode 100644 drivers/video/dw_mipi_dsi.c create mode 100644 include/dw_mipi_dsi.h
drivers/video/Kconfig +9 -0
@@ -674,6 +674,15 @@ config VIDEO_DW_HDMI rather requires a SoC-specific glue driver to call it), it can not be enabled from the configuration menu. +config VIDEO_DW_MIPI_DSI + bool + help + Enables the common driver code for the Synopsis Designware + MIPI DSI block found in SoCs from various vendors. + As this does not provide any functionality by itself (but + rather requires a SoC-specific glue driver to call it), it + can not be enabled from the configuration menu. + config VIDEO_SIMPLE bool "Simple display driver for preconfigured display" help
drivers/video/Makefile +1 -0
@@ -52,6 +52,7 @@ obj-$(CONFIG_FORMIKE) += formike.o obj-$(CONFIG_LG4573) += lg4573.o obj-$(CONFIG_AM335X_LCD) += am335x-fb.o obj-$(CONFIG_VIDEO_DW_HDMI) += dw_hdmi.o +obj-$(CONFIG_VIDEO_DW_MIPI_DSI) += dw_mipi_dsi.o obj-${CONFIG_VIDEO_MIPI_DSI} += mipi_display.o obj-$(CONFIG_VIDEO_SIMPLE) += simplefb.o obj-${CONFIG_VIDEO_TEGRA124} += tegra124/
drivers/video/dw_mipi_dsi.c new file +826 -0
826 lines not on this page · raw message
include/dw_mipi_dsi.h new file +32 -0
@@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright (C) 2017-2018, STMicroelectronics - All Rights Reserved +* +* Authors: Yannick Fertre <[email protected]> +* Philippe Cornu <[email protected]> +* +* This generic Synopsys DesignWare MIPI DSI host include is inspired from +* the Linux Kernel include file include/drm/bridge/dw_mipi_dsi.h. +*/ + +#ifndef __DW_MIPI_DSI__ +#define __DW_MIPI_DSI__ + +#include <mipi_display.h> + +struct dw_mipi_dsi_phy_ops { +int (*init)(void *priv_data); +int (*get_lane_mbps)(void *priv_data,struct display_timing *timings, +u32 lanes,u32 format,unsigned int *lane_mbps); +}; + +struct dw_mipi_dsi_plat_data { +unsigned int max_data_lanes; +const struct dw_mipi_dsi_phy_ops *phy_ops; +struct udevice *panel; +}; + +int dw_mipi_dsi_init_bridge (struct mipi_dsi_device *device); +void dw_mipi_dsi_bridge_enable (struct mipi_dsi_device *device); + +#endif /* __DW_MIPI_DSI__ */
Signature · 1 line
1.9.1
PATCH v2 6/10 video: add MIPI DSI host controller bridge
Hi Yannick,
Quoted 65 lines · Yannick Fertré
Add a Synopsys Designware MIPI DSI host bridge driver, based on the Rockchip version from
rockchip/dw-mipi-dsi.cwith phy & bridge APIs.Signed-off-by Yannick Fertré <[email protected]>--- drivers/video/Kconfig | 9 + drivers/video/Makefile | 1 + drivers/video/dw_mipi_dsi.c | 826 ++++++++++++++++++++++++++++++++++++++++++++ include/dw_mipi_dsi.h | 32 ++ 4 files changed, 868 insertions(+) create mode 100644 drivers/video/dw_mipi_dsi.c create mode 100644 include/dw_mipi_dsi.hdrivers/video/Kconfig +9
-0@@ -674,6 +674,15 @@ config VIDEO_DW_HDMI rather requires a SoC-specific glue driver to call it), it can not be enabled from the configuration menu. +config VIDEO_DW_MIPI_DSI + bool + help + Enables the common driver code for the Synopsis Designware + MIPI DSI block found in SoCs from various vendors. + As this does not provide any functionality by itself (but + rather requires a SoC-specific glue driver to call it), it + can not be enabled from the configuration menu. + config VIDEO_SIMPLE bool "Simple display driver for preconfigured display" helpdrivers/video/Makefile +1
-0@@ -52,6 +52,7 @@ obj-$(CONFIG_FORMIKE) += formike.o obj-$(CONFIG_LG4573) += lg4573.o obj-$(CONFIG_AM335X_LCD) += am335x-fb.o obj-$(CONFIG_VIDEO_DW_HDMI) += dw_hdmi.o +obj-$(CONFIG_VIDEO_DW_MIPI_DSI) += dw_mipi_dsi.o obj-${CONFIG_VIDEO_MIPI_DSI} += mipi_display.o obj-$(CONFIG_VIDEO_SIMPLE) += simplefb.o obj-${CONFIG_VIDEO_TEGRA124} += tegra124/drivers/video/dw_mipi_dsi.c new file +14
-0@@ -0,0 +1,826 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* +* Copyright (C) 2016, Fuzhou Rockchip Electronics Co., Ltd +* Copyright (C) 2018, STMicroelectronics - All Rights Reserved +* Author(s): Philippe Cornu <[email protected]> for STMicroelectronics. +* Yannick Fertre <[email protected]> for STMicroelectronics. +* +* This generic Synopsys DesignWare MIPI DSI host driver is inspired from +* the Linux Kernel driver drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c. +*/ + +#include <common.h> +#include <clk.h> +#include <dm.h>
drivers/video/dw_mipi_dsi.c line 24
Quoted 10 lines
drivers/video/dw_mipi_dsi.c new file +10
-0+#include <errno.h> +#include <mipi_display.h> +#include <panel.h> +#include <video.h> +#include <asm/io.h> +#include <asm/arch/gpio.h> +#include <dm/device-internal.h> +#include <dw_mipi_dsi.h> +#include <linux/iopoll.h> +#include <video_bridge.h>
Please check the ordering here.
drivers/video/dw_mipi_dsi.c line 37
Quoted 13 lines
drivers/video/dw_mipi_dsi.c new file +13
-0+ +#define HWVER_131 0x31333100/* IP version 1.31 */ + +#define DSI_VERSION 0x00 +#define VERSION GENMASK(31, 8) + +#define DSI_PWR_UP 0x04 +#define RESET 0 +#define POWERUP BIT(0) + +#define DSI_CLKMGR_CFG 0x08 +#define TO_CLK_DIVISION (div) (((div) & 0xff) << 8) +#define TX_ESC_CLK_DIVISION (div) ((div) & 0xff)
Instead of this can you use something like:
#define TO_CLK_DIVISION_SHIFT 8
#define TO_CLK_DIVISION_MASK (0xff << TO_CLK_DIVISION_SHIFT)
then do the shift in the code which need it below.
xxx << TO_CLK_DIVISION_SHIFT
Quoted 26 lines
include/dw_mipi_dsi.h new file +20
-0@@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright (C) 2017-2018, STMicroelectronics - All Rights Reserved +* +* Authors: Yannick Fertre <[email protected]> +* Philippe Cornu <[email protected]> +* +* This generic Synopsys DesignWare MIPI DSI host include is inspired from +* the Linux Kernel include file include/drm/bridge/dw_mipi_dsi.h. +*/ + +#ifndef __DW_MIPI_DSI__ +#define __DW_MIPI_DSI__ + +#include <mipi_display.h> + +struct dw_mipi_dsi_phy_ops { + int (*init)(void *priv_data); + int (*get_lane_mbps)(void *priv_data, struct display_timing *timings, + u32 lanes, u32 format, unsigned int *lane_mbps);
include/dw_mipi_dsi.h line 30
Quoted 10 lines
include/dw_mipi_dsi.h new file +10
-0+}; + +struct dw_mipi_dsi_plat_data { +unsigned int max_data_lanes; +const struct dw_mipi_dsi_phy_ops *phy_ops; +struct udevice *panel; +}; + +int dw_mipi_dsi_init_bridge (struct mipi_dsi_device *device); +void dw_mipi_dsi_bridge_enable (struct mipi_dsi_device *device);
This should be in a uclass I think.
Regards
Simon
PATCH v2 7/10 video: add support of STM32 MIPI DSI controller driver
In reply to Yannick FertréAdd the STM32 DSI controller driver that uses the Synopsys DesignWare MIPI DSI host controller bridge.
--- drivers/video/stm32/Kconfig | 10 + drivers/video/stm32/Makefile | 1 + drivers/video/stm32/stm32_dsi.c | 427 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 438 insertions(+) create mode 100644 drivers/video/stm32/stm32_dsi.c
drivers/video/stm32/Kconfig +10 -0
@@ -13,6 +13,16 @@ menuconfig VIDEO_STM32 DSI. This option enables these supports which can be used on devices which have RGB TFT or DSI display connected. +config VIDEO_STM32_DSI + bool "Enable STM32 DSI video support" + depends on VIDEO_STM32 + select VIDEO_MIPI_DSI + select VIDEO_BRIDGE + select VIDEO_DW_MIPI_DSI + help + This option enables support DSI internal bridge which can be used on + devices which have DSI devices connected. + config VIDEO_STM32_MAX_XRES int "Maximum horizontal resolution (for memory allocation purposes)" depends on VIDEO_STM32
drivers/video/stm32/Makefile +1 -0
@@ -6,3 +6,4 @@ # Yannick Fertre <[email protected]> obj-${CONFIG_VIDEO_STM32} = stm32_ltdc.o +obj-${CONFIG_VIDEO_STM32_DSI} += stm32_dsi.o
drivers/video/stm32/stm32_dsi.c new file +427 -0
427 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v2 8/10 arm: dts: stm32: add dsi for STM32F746
In reply to Yannick FertréAdd mipi dsi bridge node in device-tree.
--- arch/arm/dts/stm32f746.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+)
arch/arm/dts/stm32f746.dtsi +12 -0
@@ -340,6 +340,18 @@ u-boot,dm-pre-reloc; status = "disabled"; }; + + dsi: dsi at 40016c00 { + compatible = "st,stm32-dsi"; + reg = <0x40016C00 0x800>; + resets = <&rcc STM32F7_APB2_RESET(DSI)>; + clocks = <&rcc 0 STM32F7_APB2_CLOCK(DSI)>, + <&rcc 0 STM32F7_APB2_CLOCK(LTDC)>, + <&clk_hse>; + clock-names = "pclk", "px_clk", "ref"; + u-boot,dm-pre-reloc; + status = "disabled"; + }; }; };
Signature · 1 line
1.9.1
PATCH v2 9/10 arm: dts: stm32: add display for STM32F769 disco board
In reply to Yannick FertréEnable the display controller, mipi dsi bridge & panel. Set panel display timings.
--- arch/arm/dts/stm32f769-disco.dts | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
arch/arm/dts/stm32f769-disco.dts +41 -0
@@ -84,6 +84,18 @@ compatible = "st,button1"; button-gpio = <&gpioa 0 0>; }; + + panel: panel { + compatible = "orisetech,otm8009a"; + reset-gpios = <&gpioj 15 1>; + status = "okay"; + + port { + panel_in: endpoint { + remote-endpoint = <&dsi_out>; + }; + }; + }; }; &clk_hse {
@@ -264,3 +276,32 @@ bus-width = <4>; max-frequency = <25000000>; }; + +<dc { + status = "okay"; + + ports { + port at 0 { + dp_out: endpoint { + remote-endpoint = <&dsi_in>; + }; + }; + }; +}; + +&dsi { + status = "okay"; + + ports { + port at 0 { + dsi_out: endpoint { + remote-endpoint = <&panel_in>; + }; + }; + port at 1 { + dsi_in: endpoint { + remote-endpoint = <&dp_out>; + }; + }; + }; +};
Signature · 1 line
1.9.1
PATCH v2 10/10 board: Add STM32F769 SoC, discovery board support
In reply to Yannick Fertré--- configs/stm32f769-disco_defconfig | 67 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 configs/stm32f769-disco_defconfig
configs/stm32f769-disco_defconfig new file +67 -0
@@ -0,0 +1,67 @@ +CONFIG_ARM=y +CONFIG_STM32=y +CONFIG_SYS_TEXT_BASE=0x08008000 +CONFIG_SYS_MALLOC_F_LEN=0xC00 +CONFIG_STM32F7=y +CONFIG_TARGET_STM32F746_DISCO=y +CONFIG_DEFAULT_DEVICE_TREE="stm32f769-disco" +CONFIG_ENV_VARS_UBOOT_CONFIG=y +CONFIG_BOOTDELAY=3 +CONFIG_USE_BOOTARGS=y +CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk consoleblank=0 ignore_loglevel" +# CONFIG_DISPLAY_CPUINFO is not set +# CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOARD_EARLY_INIT_F=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="U-Boot > " +CONFIG_AUTOBOOT_KEYED=y +CONFIG_AUTOBOOT_PROMPT="Hit SPACE in %d seconds to stop autoboot.\n" +CONFIG_AUTOBOOT_STOP_STR=" " +CONFIG_CMD_BOOTZ=y +CONFIG_CMD_GPT=y +# CONFIG_RANDOM_UUID is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_SF=y +# CONFIG_CMD_SETEXPR is not set +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_CMD_LINK_LOCAL=y +CONFIG_CMD_BMP=y +CONFIG_CMD_TIMER=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +# CONFIG_SPL_DOS_PARTITION is not set +# CONFIG_SPL_EFI_PARTITION is not set +CONFIG_OF_CONTROL=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_NETCONSOLE=y +# CONFIG_BLK is not set +CONFIG_DM_MMC=y +# CONFIG_SPL_DM_MMC is not set +CONFIG_ARM_PL180_MMCI=y +CONFIG_MTD=y +CONFIG_MTD_NOR_FLASH=y +CONFIG_DM_SPI_FLASH=y +CONFIG_SPI_FLASH=y +CONFIG_SPI_FLASH_STMICRO=y +CONFIG_DM_ETH=y +CONFIG_ETH_DESIGNWARE=y +# CONFIG_PINCTRL_FULL is not set +CONFIG_SPI=y +CONFIG_DM_SPI=y +CONFIG_STM32_QSPI=y +CONFIG_DM_VIDEO=y +CONFIG_BACKLIGHT_GPIO=y +CONFIG_VIDEO_LCD_ORISETECH_OTM8009A=y +CONFIG_VIDEO_STM32=y +CONFIG_VIDEO_STM32_DSI=y +CONFIG_VIDEO_STM32_MAX_XRES=480 +CONFIG_VIDEO_STM32_MAX_YRES=800 +CONFIG_VIDEO_BRIDGE=y +CONFIG_OF_LIBFDT_OVERLAY=y +# CONFIG_EFI_LOADER is not set
Signature · 1 line
1.9.1