diff --git a/arch/arm/src/sama5/sam_lcd.c b/arch/arm/src/sama5/sam_lcd.c index 8674368efc..bd7fba9d06 100644 --- a/arch/arm/src/sama5/sam_lcd.c +++ b/arch/arm/src/sama5/sam_lcd.c @@ -1,7 +1,7 @@ /**************************************************************************** * arch/arm/src/sama5/sam_lcd.c * - * Copyright (C) 2013 Gregory Nutt. All rights reserved. + * Copyright (C) 2013-2014 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * References: @@ -2973,6 +2973,18 @@ int up_fbinitialize(void) sam_show_hcr(); #endif +#if defined(BOARD_LCDC_ENABLE_DELAY) && BOARD_LCDC_ENABLE_DELAY > 0 + /* Delay a bit after enabling the LDC. I presume that a delay of a few + * frame times allows some unstable clocking to synchronize before we + * tart thrashing the framebuffer? But I am not sure why this is + * necessary and, in fact, is certainly not necessary in most LCDC + * configurations. Perhaps this delay would not be necessary if timings + * were more precise? + */ + + usleep(BOARD_LCDC_ENABLE_DELAY); +#endif + /* Enable the backlight. * * REVISIT: Backlight level could be dynamically adjustable diff --git a/configs/sama5d4-ek/include/board.h b/configs/sama5d4-ek/include/board.h index 033b7ec1ac..f9b51df655 100644 --- a/configs/sama5d4-ek/include/board.h +++ b/configs/sama5d4-ek/include/board.h @@ -203,6 +203,17 @@ #define BOARD_LCDC_PIXELCLOCK \ (BOARD_LCDC_HSPERIOD * BOARD_LCDC_VSPERIOD * BOARD_LCDC_FRAMERATE) +/* This specifies a delay after enabling the LCDC. This was found + * experimentally and is very much a kludge. I presume that a delay of a + * couple of frame times allows some unstable clocking to synchronize before + * we start thrashing the framebuffer? But I am not sure why this is + * necessary and, in fact, is certainly not necessary in other LCDC + * configurations. Perhaps the delay would not be necessary if timings were + * more precise? + */ + +#define BOARD_LCDC_ENABLE_DELAY (50*1000) + /* Backlight prescaler value and PWM output polarity */ #define BOARD_LCDC_PWMPS LCDC_LCDCFG6_PWMPS_DIV1