> -----Original Message-----
> From: Linuxppc-dev [mailto:linuxppc-dev-
> bounces+b40534=freescale....@lists.ozlabs.org] On Behalf Of Jason Jin
> Sent: Thursday, March 27, 2014 7:38 PM
> To: Wood Scott-B07421; ti...@tabi.org
> Cc: linux-fb...@vger.kernel.org; linuxppc-dev@lists.ozlabs.org; Li Yang-Leo-
> R58472; Jin Zhengxiong-R64188
> Subject: [PATCH 2/2] Make the diu driver work without board level 
> initilization
> 
> So far the DIU driver does not have a mechanism to do the
> board specific initialization. So on some platforms,
> such as P1022, 8610 and 5121, The board specific initialization
> is implmented in the platform file such p10222_ds.
> 
> Actually, the DIU is already intialized in the u-boot, the pin sharing
> and the signal routing are also set in u-boot. So we can leverage that
> in kernel driver to avoid board sepecific initialization, especially
> for the corenet platform, which is the abstraction for serveral
> platfroms.
> 
> The potential problem is that when the system wakeup from the deep
> sleep, some platform settings may need to be re-initialized. The CPLD
> and FPGA settings will be kept, but the pixel clock register which
> usually locate at the global utility space need to be reinitialized.
> 
> Generally, the pixel clock setting was implemented in the platform
> file, But the pixel clock register itself should be part of the DIU
> module, And for P1022,8610 and T1040, the pixel clock register have the
> same structure, So we can consider to move the pixel clock setting
> from the platform to the diu driver. This patch provide the options
> set the pixel clock in the diu driver. But the original platform pixel
> clock setting stil can be used for P1022,8610 and 512x without any
> update. To implement the pixel clock setting in the diu driver. the
> following update in the diu dts node was needed.
> display:display@180000 {
>       compatible = "fsl,t1040-diu", "fsl,diu";
> -     reg = <0x180000 1000>;
> +     reg = <0x180000 1000 0xfc028 4>;
> +     pixclk = <0 255 0>;
>       interrupts = <74 2 0 0>;
> }
> The 0xfc028 is the offset for pixel clock register. the 3 segment of
> the pixclk stand for the PXCKDLYDIR, the max of PXCK and the PXCKDLY
> which will be used by the pixel clock register setting.
> 
> This was tested on T1040 platform. For other platform, the original
> node together with the platform settings still can work.
> 
> Signed-off-by: Jason Jin <jason....@freescale.com>
> ---
> V2: Remove the pixel clock register saving for suspend.
> add the pixel clock setting in driver.
> 
>  drivers/video/fsl-diu-fb.c | 61 
> ++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 59 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c
> index 4bc4730..792038f 100644
> --- a/drivers/video/fsl-diu-fb.c
> +++ b/drivers/video/fsl-diu-fb.c
> @@ -50,6 +50,7 @@
>  #define INT_PARERR   0x08    /* Display parameters error interrupt */
>  #define INT_LS_BF_VS 0x10    /* Lines before vsync. interrupt */
> 
> +#define PIXCLKCR_PXCKEN 0x80000000
>  /*
>   * List of supported video modes
>   *
> @@ -372,6 +373,8 @@ struct fsl_diu_data {
>       unsigned int irq;
>       enum fsl_diu_monitor_port monitor_port;
>       struct diu __iomem *diu_reg;
> +     void __iomem *pixelclk_reg;
> +     u32 pixclkcr[3];
>       spinlock_t reg_lock;
>       u8 dummy_aoi[4 * 4 * 4];
>       struct diu_ad dummy_ad __aligned(8);
> @@ -479,7 +482,10 @@ static enum fsl_diu_monitor_port 
> fsl_diu_name_to_port(const
> char *s)
>                       port = FSL_DIU_PORT_DLVDS;
>       }
> 
> -     return diu_ops.valid_monitor_port(port);
> +     if (diu_ops.valid_monitor_port)
> +             return diu_ops.valid_monitor_port(port);
> +     else
Remove this "else", otherwise looks good.

Regards,
-Dongsheng
> +             return port;
>  }
> 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to