[U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap
Bo Shen
voice.shen at atmel.com
Wed Feb 4 08:25:24 CET 2015
Hi Nikita Kiryanov,
On 02/03/2015 07:32 PM, Nikita Kiryanov wrote:
> configuration_get_cmap() is multiple platform-specific functions stuffed into
> one function. Split it into multiple versions, and move each version to the
> appropriate driver to reduce the #ifdef complexity.
>
> Signed-off-by: Nikita Kiryanov <nikita at compulab.co.il>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> Cc: Bo Shen <voice.shen at atmel.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Anatolij Gustschin <agust at denx.de>
> ---
> Changes in V2:
> - Minor commit message update
> - ushort *configuration_get_cmap(void) prototype is defined only once
> instead of for each #ifdef CONFIG_*
>
> common/lcd.c | 19 -------------------
> drivers/video/atmel_hlcdfb.c | 13 +++++++++++++
> drivers/video/atmel_lcdfb.c | 5 +++++
> drivers/video/exynos_fb.c | 9 +++++++++
> drivers/video/mpc8xx_lcd.c | 7 +++++++
> drivers/video/pxa_lcd.c | 6 ++++++
> include/lcd.h | 7 +++++++
> 7 files changed, 47 insertions(+), 19 deletions(-)
>
> diff --git a/common/lcd.c b/common/lcd.c
> index 1195a54..0f6c2e4 100644
> --- a/common/lcd.c
> +++ b/common/lcd.c
> @@ -383,25 +383,6 @@ int lcd_getbgcolor(void)
> /************************************************************************/
> /* ** Chipset depending Bitmap / Logo stuff... */
> /************************************************************************/
> -static inline ushort *configuration_get_cmap(void)
> -{
> -#if defined CONFIG_CPU_PXA
> - struct pxafb_info *fbi = &panel_info.pxa;
> - return (ushort *)fbi->palette;
> -#elif defined(CONFIG_MPC823)
> - immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
> - cpm8xx_t *cp = &(immr->im_cpm);
> - return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
> -#elif defined(CONFIG_ATMEL_LCD)
> - return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
> -#elif !defined(CONFIG_ATMEL_HLCD) && !defined(CONFIG_EXYNOS_FB)
> - return panel_info.cmap;
> -#elif defined(CONFIG_LCD_LOGO)
> - return bmp_logo_palette;
> -#else
> - return NULL;
> -#endif
> -}
>
> #ifdef CONFIG_LCD_LOGO
> void bitmap_plot(int x, int y)
> diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
> index 935ae42..0ce2370 100644
> --- a/drivers/video/atmel_hlcdfb.c
> +++ b/drivers/video/atmel_hlcdfb.c
> @@ -13,6 +13,10 @@
> #include <lcd.h>
> #include <atmel_hlcdc.h>
>
> +#if defined(CONFIG_LCD_LOGO)
> +#include <bmp_logo.h>
> +#endif
I think we can include this file directly.
> /* configurable parameters */
> #define ATMEL_LCDC_CVAL_DEFAULT 0xc8
> #define ATMEL_LCDC_DMA_BURST_LEN 8
> @@ -37,6 +41,15 @@ void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
> panel_info.mmio + ATMEL_LCDC_LUT(regno));
> }
>
> +ushort *configuration_get_cmap(void)
> +{
> +#if defined(CONFIG_LCD_LOGO)
> + return bmp_logo_palette;
> +#else
> + return NULL;
> +#endif
> +}
Here, I think no need to do the CONFIG_LCD_LOGO check, return
bmp_logo_palette directly, as it will be used when use bmp command in 8
bit mode. However, no hardware to test LCDC work or not in 8 bit mode :(
> void lcd_ctrl_init(void *lcdbase)
> {
> unsigned long value;
> diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
> index 3cf008c..fa6a82c 100644
> --- a/drivers/video/atmel_lcdfb.c
> +++ b/drivers/video/atmel_lcdfb.c
> @@ -29,6 +29,11 @@
> #define lcdc_readl(mmio, reg) __raw_readl((mmio)+(reg))
> #define lcdc_writel(mmio, reg, val) __raw_writel((val), (mmio)+(reg))
>
> +ushort *configuration_get_cmap(void)
> +{
> + return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
> +}
> +
> void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
> {
> #if defined(CONFIG_ATMEL_LCD_BGR555)
> diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c
> index be35b98..c5d7330 100644
> --- a/drivers/video/exynos_fb.c
> +++ b/drivers/video/exynos_fb.c
> @@ -37,6 +37,15 @@ vidinfo_t panel_info = {
> };
> #endif
>
> +ushort *configuration_get_cmap(void)
> +{
> +#if defined(CONFIG_LCD_LOGO)
> + return bmp_logo_palette;
> +#else
> + return NULL;
> +#endif
> +}
> +
> static void exynos_lcd_init_mem(void *lcdbase, vidinfo_t *vid)
> {
> unsigned long palette_size;
> diff --git a/drivers/video/mpc8xx_lcd.c b/drivers/video/mpc8xx_lcd.c
> index add7215..9d2e5ed 100644
> --- a/drivers/video/mpc8xx_lcd.c
> +++ b/drivers/video/mpc8xx_lcd.c
> @@ -357,6 +357,13 @@ lcd_setcolreg (ushort regno, ushort red, ushort green, ushort blue)
>
> /*----------------------------------------------------------------------*/
>
> +ushort *configuration_get_cmap(void)
> +{
> + immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
> + cpm8xx_t *cp = &(immr->im_cpm);
> + return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
> +}
> +
> void lcd_enable (void)
> {
> volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
> diff --git a/drivers/video/pxa_lcd.c b/drivers/video/pxa_lcd.c
> index f66f615..04105d4 100644
> --- a/drivers/video/pxa_lcd.c
> +++ b/drivers/video/pxa_lcd.c
> @@ -342,6 +342,12 @@ static int pxafb_init (vidinfo_t *vid);
> /* --------------- PXA chipset specific functions ------------------- */
> /************************************************************************/
>
> +ushort *configuration_get_cmap(void)
> +{
> + struct pxafb_info *fbi = &panel_info.pxa;
> + return (ushort *)fbi->palette;
> +}
> +
> void lcd_ctrl_init (void *lcdbase)
> {
> pxafb_init_mem(lcdbase, &panel_info);
> diff --git a/include/lcd.h b/include/lcd.h
> index fbba6a2..4ada617 100644
> --- a/include/lcd.h
> +++ b/include/lcd.h
> @@ -60,8 +60,15 @@ typedef struct vidinfo {
>
> void *priv; /* Pointer to driver-specific data */
> } vidinfo_t;
> +
> +static __maybe_unused ushort *configuration_get_cmap(void)
> +{
> + return panel_info.cmap;
> +}
> #endif
>
> +ushort *configuration_get_cmap(void);
> +
> extern vidinfo_t panel_info;
>
> /* Video functions */
>
Best Regards,
Bo Shen
More information about the U-Boot
mailing list