board: stm32f469-disco: add support to display
Add support to Orise Tech OTM8009A display on stm32f469-disco board. It was necessary to retrieve the framebuffer address from the device tree because the address returned by the video-uclass driver pointed to a memory area that was not usable. Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
This commit is contained in:

committed by
Patrice Chotard

parent
88c938f874
commit
47256b040c
@@ -21,6 +21,7 @@ CONFIG_CMD_GPT=y
|
|||||||
# CONFIG_RANDOM_UUID is not set
|
# CONFIG_RANDOM_UUID is not set
|
||||||
CONFIG_CMD_MMC=y
|
CONFIG_CMD_MMC=y
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
# CONFIG_CMD_SETEXPR is not set
|
||||||
|
CONFIG_CMD_BMP=y
|
||||||
CONFIG_CMD_CACHE=y
|
CONFIG_CMD_CACHE=y
|
||||||
CONFIG_CMD_TIMER=y
|
CONFIG_CMD_TIMER=y
|
||||||
# CONFIG_ISO_PARTITION is not set
|
# CONFIG_ISO_PARTITION is not set
|
||||||
@@ -40,3 +41,15 @@ CONFIG_SPI_FLASH_STMICRO=y
|
|||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_DM_SPI=y
|
CONFIG_DM_SPI=y
|
||||||
CONFIG_STM32_QSPI=y
|
CONFIG_STM32_QSPI=y
|
||||||
|
CONFIG_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_BMP_16BPP=y
|
||||||
|
CONFIG_BMP_24BPP=y
|
||||||
|
CONFIG_BMP_32BPP=y
|
||||||
|
CONFIG_DM_REGULATOR=y
|
||||||
|
CONFIG_DM_REGULATOR_FIXED=y
|
||||||
|
@@ -495,6 +495,33 @@ static void stm32_ltdc_set_layer1(struct stm32_ltdc_priv *priv, ulong fb_addr)
|
|||||||
setbits_le32(priv->regs + LTDC_L1CR, LXCR_LEN);
|
setbits_le32(priv->regs + LTDC_L1CR, LXCR_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_TARGET_STM32F469_DISCOVERY)
|
||||||
|
static int stm32_ltdc_alloc_fb(struct udevice *dev)
|
||||||
|
{
|
||||||
|
u32 sdram_size = gd->ram_size;
|
||||||
|
struct video_uc_plat *uc_plat = dev_get_uclass_plat(dev);
|
||||||
|
phys_addr_t cpu;
|
||||||
|
dma_addr_t bus;
|
||||||
|
u64 dma_size;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = dev_get_dma_range(dev, &cpu, &bus, &dma_size);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "failed to get dma address\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
uc_plat->base = bus + sdram_size - ALIGN(uc_plat->size, uc_plat->align);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline int stm32_ltdc_alloc_fb(struct udevice *dev)
|
||||||
|
{
|
||||||
|
/* Delegate framebuffer allocation to video-uclass */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int stm32_ltdc_probe(struct udevice *dev)
|
static int stm32_ltdc_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct video_uc_plat *uc_plat = dev_get_uclass_plat(dev);
|
struct video_uc_plat *uc_plat = dev_get_uclass_plat(dev);
|
||||||
@@ -605,6 +632,10 @@ static int stm32_ltdc_probe(struct udevice *dev)
|
|||||||
priv->crop_h = timings.vactive.typ;
|
priv->crop_h = timings.vactive.typ;
|
||||||
priv->alpha = 0xFF;
|
priv->alpha = 0xFF;
|
||||||
|
|
||||||
|
ret = stm32_ltdc_alloc_fb(dev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
dev_dbg(dev, "%dx%d %dbpp frame buffer at 0x%lx\n",
|
dev_dbg(dev, "%dx%d %dbpp frame buffer at 0x%lx\n",
|
||||||
timings.hactive.typ, timings.vactive.typ,
|
timings.hactive.typ, timings.vactive.typ,
|
||||||
VNBITS(priv->l2bpp), uc_plat->base);
|
VNBITS(priv->l2bpp), uc_plat->base);
|
||||||
|
Reference in New Issue
Block a user