> -----Original Message----- > From: Tomi Valkeinen [mailto:tomi.valkeinen@xxxxxxxxx] > Sent: Thursday, June 24, 2010 4:21 PM > To: Nagarajan, Rajkumar > Cc: linux-omap@xxxxxxxxxxxxxxx > 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 <kishore.y@xxxxxx> > > Signed-off-by: Mukund Mittal <mmittal@xxxxxx> > > Signed-off-by: Rajkumar N <rajkumar.nagarajan@xxxxxx> > > --- > > 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 > > > ��.n��������+%������w��{.n�����{�������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f