Hi Sekhar, On Fri, Aug 17, 2012 at 12:15:01, Nori, Sekhar wrote: > Hi Prakash, > > On 8/14/2012 6:53 PM, Manjunathappa, Prakash wrote: > > Wait for active frame transfer to complete after disabling LCDC. > > At the same this wait is not be required when there are sync and > > underflow errors. > > More information on disable and reset sequence can be found in > > section 13.4.6 of AM335x TRM @www.ti.com/am335x. > > > > Signed-off-by: Manjunathappa, Prakash <prakash.pm@xxxxxx> > > --- > > Applies on top of fbdev-next of Florian Tobias Schandinat's tree. > > Since v2: > > Optimized the lcd_disable_raster function. > > Since v1: > > Changed the commit message, also added link to hardware specification. > > > > drivers/video/da8xx-fb.c | 49 ++++++++++++++++++++++++++++++++++++--------- > > 1 files changed, 39 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c > > index 7ae9d53..cb696ff 100644 > > --- a/drivers/video/da8xx-fb.c > > +++ b/drivers/video/da8xx-fb.c > > @@ -48,6 +48,7 @@ > > #define LCD_PL_LOAD_DONE BIT(6) > > #define LCD_FIFO_UNDERFLOW BIT(5) > > #define LCD_SYNC_LOST BIT(2) > > +#define LCD_FRAME_DONE BIT(0) > > > > /* LCD DMA Control Register */ > > #define LCD_DMA_BURST_SIZE(x) ((x) << 4) > > @@ -288,13 +289,41 @@ static inline void lcd_enable_raster(void) > > } > > > > /* Disable the Raster Engine of the LCD Controller */ > > -static inline void lcd_disable_raster(void) > > +static inline void lcd_disable_raster(bool wait_for_frame_done) > > { > > u32 reg; > > + u32 stat_reg = LCD_STAT_REG; > > + u32 loop_cnt = 0; > > > > reg = lcdc_read(LCD_RASTER_CTRL_REG); > > if (reg & LCD_RASTER_ENABLE) > > lcdc_write(reg & ~LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG); > > + > > + if (lcd_revision == LCD_VERSION_2) > > + stat_reg = LCD_RAW_STAT_REG; > > + > > + if (wait_for_frame_done) { > > + /* > > + * 50 milli seconds should be sufficient for a frame to > > + * complete > > + */ > > + loop_cnt = 50; > > + while (!(lcdc_read(stat_reg) & LCD_FRAME_DONE)) { > > + /* Handle timeout */ > > + if (unlikely(0 == --loop_cnt)) { > > + pr_err("LCD Controller timed out\n"); > > + break; > > + } > > + mdelay(1); > > + } > > + } > > The TRM you referenced in the patch description suggests waiting for > frame done interrupt. Can we actually wait for the interrupt here > instead of busy looping? > I agree, will submit next version of patch considering above. Thanks, Prakash > Thanks, > Sekhar > ��.n��������+%������w��{.n�����{����n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�