* Jouni Hogander <jouni.hogander@xxxxxxxxx> [080815 11:57]: > Leaving interface clocks enabled causes dss pwrdm to stay in active > state when mpu is in active state. This fix puts dss to sleep state > when it is not needed. > > Earlier version broke framebuffer on 24xx. This is fixed by enabling > clocks before trying to access DISPC_IRQSTATUS register. Pushing today. BTW, here we could use the virtual clock to combine the needed clocks instead of enable_interface_clocks(). Tony > Signed-off-by: Jouni Hogander <jouni.hogander@xxxxxxxxx> > --- > drivers/video/omap/dispc.c | 23 ++++++++++------------- > 1 files changed, 10 insertions(+), 13 deletions(-) > > diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c > index 3d64314..99bf355 100644 > --- a/drivers/video/omap/dispc.c > +++ b/drivers/video/omap/dispc.c > @@ -858,8 +858,11 @@ EXPORT_SYMBOL(omap_dispc_free_irq); > > static irqreturn_t omap_dispc_irq_handler(int irq, void *dev) > { > - u32 stat = dispc_read_reg(DISPC_IRQSTATUS); > + u32 stat; > > + enable_lcd_clocks(1); > + > + stat = dispc_read_reg(DISPC_IRQSTATUS); > if (stat & DISPC_IRQ_FRAMEMASK) > complete(&dispc.frame_done); > > @@ -875,6 +878,8 @@ static irqreturn_t omap_dispc_irq_handler(int irq, void *dev) > > dispc_write_reg(DISPC_IRQSTATUS, stat); > > + enable_lcd_clocks(0); > + > return IRQ_HANDLED; > } > > @@ -915,18 +920,13 @@ static void put_dss_clocks(void) > > static void enable_lcd_clocks(int enable) > { > - if (enable) > + if (enable) { > + clk_enable(dispc.dss_ick); > clk_enable(dispc.dss1_fck); > - else > + } else { > clk_disable(dispc.dss1_fck); > -} > - > -static void enable_interface_clocks(int enable) > -{ > - if (enable) > - clk_enable(dispc.dss_ick); > - else > clk_disable(dispc.dss_ick); > + } > } > > static void enable_digit_clocks(int enable) > @@ -1362,7 +1362,6 @@ static int omap_dispc_init(struct omapfb_device *fbdev, int ext_mode, > if ((r = get_dss_clocks()) < 0) > return r; > > - enable_interface_clocks(1); > enable_lcd_clocks(1); > > #ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT > @@ -1466,7 +1465,6 @@ fail2: > free_irq(INT_24XX_DSS_IRQ, fbdev); > fail1: > enable_lcd_clocks(0); > - enable_interface_clocks(0); > put_dss_clocks(); > > return r; > @@ -1483,7 +1481,6 @@ static void omap_dispc_cleanup(void) > cleanup_fbmem(); > free_palette_ram(); > free_irq(INT_24XX_DSS_IRQ, dispc.fbdev); > - enable_interface_clocks(0); > put_dss_clocks(); > } > > -- > 1.5.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html