rk312x lcdc: add config the sclk for dual disp
authorzwl <zwl@rockchips.com>
Mon, 11 Aug 2014 02:40:56 +0000 (10:40 +0800)
committerzwl <zwl@rockchips.com>
Mon, 11 Aug 2014 02:40:56 +0000 (10:40 +0800)
arch/arm/boot/dts/rk312x.dtsi
drivers/video/rockchip/lcdc/rk312x_lcdc.c

index 99501b2e488c9ab8e1c34869d33b96a916f736db..04e51f2ee1d8c5861951fb7a4cb2a86694fecd4b 100755 (executable)
                reg = <0x1010e000 0x2000>;
                interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&clk_gates6 0>, <&dclk_lcdc0>, <&clk_gates6 1>, <&sclk_lcdc0>;
-               clock-names = "aclk_lcdc", "dclk_lcdc", "hclk_lcdc", "sclk";
+               clock-names = "aclk_lcdc", "dclk_lcdc", "hclk_lcdc", "sclk_lcdc";
                rockchip,iommu-enabled = <1>;
                status = "disabled";
        };
index cf3e44b9cbcf34a49bce6bca8c738ecceb74b998..8c9f5242a58ae76aeb66cf1854d98b1c5acdf83c 100755 (executable)
@@ -512,6 +512,7 @@ static int rk312x_lcdc_pre_init(struct rk_lcdc_driver *dev_drv)
        lcdc_dev->hclk = devm_clk_get(lcdc_dev->dev, "hclk_lcdc");
        lcdc_dev->aclk = devm_clk_get(lcdc_dev->dev, "aclk_lcdc");
        lcdc_dev->dclk = devm_clk_get(lcdc_dev->dev, "dclk_lcdc");
+       lcdc_dev->sclk = devm_clk_get(lcdc_dev->dev, "sclk_lcdc");
 //      lcdc_dev->pd   = devm_clk_get(lcdc_dev->dev, "pd_lcdc");
 
        if ( /*IS_ERR(lcdc_dev->pd) || */ (IS_ERR(lcdc_dev->aclk)) ||
@@ -672,6 +673,7 @@ static int rk312x_lcdc_set_scaler(struct rk_lcdc_driver *dev_drv,
                 return 0;
 
        if(!enable) {
+               clk_disable_unprepare(lcdc_dev->sclk);
                 dev_info(lcdc_dev->dev, "%s: disable\n", __func__);
                return 0;
        }
@@ -688,6 +690,7 @@ static int rk312x_lcdc_set_scaler(struct rk_lcdc_driver *dev_drv,
 
        src = dst_screen->ext_screen;
 
+       clk_prepare_enable(lcdc_dev->sclk);
        lcdc_dev->s_pixclock = calc_sclk(src, dst);
        clk_set_rate(lcdc_dev->sclk, lcdc_dev->s_pixclock);