> -----Original Message-----
> From: Tomi Valkeinen [mailto:[email protected]]
> Sent: Thursday, June 24, 2010 4:21 PM
> To: Nagarajan, Rajkumar
> Cc: [email protected]
> Subject: Re: [PATCH] OMAP: DSS: Fix for dsi_pll to dpll4 clk switch
>
> On Thu, 2010-06-17 at 07:12 +0200, ext Nagarajan, Rajkumar wrote:
> > When switching between clocks, The new functional clock is
> > effective when the next vertical blanking interval occurs.
> > GOLCD bit has to be set for the new clock to take effect.
>
> Where did you encounter this problem?
>
Raj: The below experiments will make you to understand the significance of the
patch:
1. Select "dsi_pll" as default clock.
2. After the zoom3 display comes up,switch the default screen on LCD to TV
using below commands.
echo "0" > /sys/devices/platform/omapdss/overlay0/enabled
echo "720,574" > /sys/devices/platform/omapdss/overlay0/input_size
echo "720,574" > /sys/devices/platform/omapdss/overlay0/output_size
echo "tv" > /sys/devices/platform/omapdss/overlay0/manager
echo "1" > /sys/devices/platform/omapdss/display1/enabled
echo "1" > /sys/devices/platform/omapdss/overlay0/enabled
3. Now the display is appearing on TV.So, Now switch the display back to LCD
using the below commands.
echo "0" > /sys/devices/platform/omapdss/overlay0/enabled
echo "800,480" > /sys/devices/platform/omapdss/overlay0/input_size
echo "800,480" > /sys/devices/platform/omapdss/overlay0/output_size
echo "lcd" > /sys/devices/platform/omapdss/overlay0/manager
echo "1" > /sys/devices/platform/omapdss/display1/enabled
echo "1" > /sys/devices/platform/omapdss/overlay0/enabled
4. Now the display will not appear on LCD,if the patch is not included.
But,the display will appear on LCD, if the patch is included.
> > Signed-off-by: Kishore Y <[email protected]>
> > Signed-off-by: Mukund Mittal <[email protected]>
> > Signed-off-by: Rajkumar N <[email protected]>
> > ---
> > drivers/video/omap2/dss/dpi.c | 5 +++++
> > 1 files changed, 5 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/video/omap2/dss/dpi.c
> b/drivers/video/omap2/dss/dpi.c
> > index 960e977..5d778d6 100644
> > --- a/drivers/video/omap2/dss/dpi.c
> > +++ b/drivers/video/omap2/dss/dpi.c
> > @@ -214,10 +214,15 @@ void
> omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
> >
> > #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
> > dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
> > + dispc_go(OMAP_DSS_CHANNEL_LCD);
>
> I don't think GO does anything here, as the channel has already been
> disabled.
Raj:This is the actual fix.So, the above experiment that I explained will be
the usecase to understand the need of this statement.
>
> > + while (dispc_go_busy(OMAP_DSS_CHANNEL_LCD))
> > + ;
>
> Busy looping is not good.
Raj: will replace with non blocking call in the next version of this patch.
>
> > dsi_pll_uninit();
> > dss_clk_disable(DSS_CLK_FCK2);
> > #endif
> >
> > + dispc_enable_channel(OMAP_DSS_CHANNEL_LCD, 0);
> > +
>
> The channel has already been disabled above, in
> dssdev->manager->disable(dssdev->manager);
Raj: will remove this statement in the next version of this patch.
>
> Tomi
>
>
>