Skip to content

Commit

Permalink
omapfb: dispc: disable iface clocks along with func clocks
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Jouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Imre Deak <imre.deak@nokia.com>
Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Jouni Hogander authored and Linus Torvalds committed Sep 23, 2009
1 parent fd0eecb commit f9e2bc8
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions drivers/video/omap/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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;
}

Expand Down Expand Up @@ -913,18 +918,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)
Expand Down Expand Up @@ -1365,7 +1365,6 @@ static int omap_dispc_init(struct omapfb_device *fbdev, int ext_mode,
if ((r = get_dss_clocks()) < 0)
goto fail0;

enable_interface_clocks(1);
enable_lcd_clocks(1);

#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
Expand Down Expand Up @@ -1469,7 +1468,6 @@ static int omap_dispc_init(struct omapfb_device *fbdev, int ext_mode,
free_irq(INT_24XX_DSS_IRQ, fbdev);
fail1:
enable_lcd_clocks(0);
enable_interface_clocks(0);
put_dss_clocks();
fail0:
iounmap(dispc.base);
Expand All @@ -1487,7 +1485,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();
iounmap(dispc.base);
}
Expand Down

0 comments on commit f9e2bc8

Please sign in to comment.