diff options
| author | Manjunathappa, Prakash <prakash.pm@ti.com> | 2011-11-15 07:02:23 -0500 |
|---|---|---|
| committer | Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | 2011-11-21 19:55:53 -0500 |
| commit | 74a0efdef1df7f576116811234ebedd8a1255ebc (patch) | |
| tree | 285ba0ac7d0c2489d5b82e3a5e9cd4bdac94c0bc | |
| parent | cfcfc9eca2bcbd26a8e206baeb005b055dbf8e37 (diff) | |
video:da8xx-fb: Disable and reset sequence on version2 of LCDC
Patch follows the disable and software reset sequence specified
in version2 to LCDC functional specification.
Without this flicker is observed on re-enabling the LCDC.
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
| -rw-r--r-- | drivers/video/da8xx-fb.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c index 55f91d9ab00b..29577bf1f559 100644 --- a/drivers/video/da8xx-fb.c +++ b/drivers/video/da8xx-fb.c | |||
| @@ -116,6 +116,7 @@ | |||
| 116 | /* Clock registers available only on Version 2 */ | 116 | /* Clock registers available only on Version 2 */ |
| 117 | #define LCD_CLK_ENABLE_REG 0x6c | 117 | #define LCD_CLK_ENABLE_REG 0x6c |
| 118 | #define LCD_CLK_RESET_REG 0x70 | 118 | #define LCD_CLK_RESET_REG 0x70 |
| 119 | #define LCD_CLK_MAIN_RESET BIT(3) | ||
| 119 | 120 | ||
| 120 | #define LCD_NUM_BUFFERS 2 | 121 | #define LCD_NUM_BUFFERS 2 |
| 121 | 122 | ||
| @@ -244,6 +245,10 @@ static inline void lcd_enable_raster(void) | |||
| 244 | { | 245 | { |
| 245 | u32 reg; | 246 | u32 reg; |
| 246 | 247 | ||
| 248 | /* Bring LCDC out of reset */ | ||
| 249 | if (lcd_revision == LCD_VERSION_2) | ||
| 250 | lcdc_write(0, LCD_CLK_RESET_REG); | ||
| 251 | |||
| 247 | reg = lcdc_read(LCD_RASTER_CTRL_REG); | 252 | reg = lcdc_read(LCD_RASTER_CTRL_REG); |
| 248 | if (!(reg & LCD_RASTER_ENABLE)) | 253 | if (!(reg & LCD_RASTER_ENABLE)) |
| 249 | lcdc_write(reg | LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG); | 254 | lcdc_write(reg | LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG); |
| @@ -257,6 +262,10 @@ static inline void lcd_disable_raster(void) | |||
| 257 | reg = lcdc_read(LCD_RASTER_CTRL_REG); | 262 | reg = lcdc_read(LCD_RASTER_CTRL_REG); |
| 258 | if (reg & LCD_RASTER_ENABLE) | 263 | if (reg & LCD_RASTER_ENABLE) |
| 259 | lcdc_write(reg & ~LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG); | 264 | lcdc_write(reg & ~LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG); |
| 265 | |||
| 266 | if (lcd_revision == LCD_VERSION_2) | ||
| 267 | /* Write 1 to reset LCDC */ | ||
| 268 | lcdc_write(LCD_CLK_MAIN_RESET, LCD_CLK_RESET_REG); | ||
| 260 | } | 269 | } |
| 261 | 270 | ||
| 262 | static void lcd_blit(int load_mode, struct da8xx_fb_par *par) | 271 | static void lcd_blit(int load_mode, struct da8xx_fb_par *par) |
| @@ -584,8 +593,12 @@ static void lcd_reset(struct da8xx_fb_par *par) | |||
| 584 | lcdc_write(0, LCD_DMA_CTRL_REG); | 593 | lcdc_write(0, LCD_DMA_CTRL_REG); |
| 585 | lcdc_write(0, LCD_RASTER_CTRL_REG); | 594 | lcdc_write(0, LCD_RASTER_CTRL_REG); |
| 586 | 595 | ||
| 587 | if (lcd_revision == LCD_VERSION_2) | 596 | if (lcd_revision == LCD_VERSION_2) { |
| 588 | lcdc_write(0, LCD_INT_ENABLE_SET_REG); | 597 | lcdc_write(0, LCD_INT_ENABLE_SET_REG); |
| 598 | /* Write 1 to reset */ | ||
| 599 | lcdc_write(LCD_CLK_MAIN_RESET, LCD_CLK_RESET_REG); | ||
| 600 | lcdc_write(0, LCD_CLK_RESET_REG); | ||
| 601 | } | ||
| 589 | } | 602 | } |
| 590 | 603 | ||
| 591 | static void lcd_calc_clk_divider(struct da8xx_fb_par *par) | 604 | static void lcd_calc_clk_divider(struct da8xx_fb_par *par) |
