rk3288/rk312x:lcdc: fix iommu status error when reopen lcdc
authorzwl <zwl@rockchips.com>
Thu, 11 Sep 2014 00:50:38 +0000 (08:50 +0800)
committerzwl <zwl@rockchips.com>
Thu, 11 Sep 2014 00:50:38 +0000 (08:50 +0800)
drivers/video/rockchip/lcdc/rk312x_lcdc.c
drivers/video/rockchip/lcdc/rk3288_lcdc.c

index 201a2703171bafb38247dd8ed9f557ee8962bb15..9c54a5e455779917f8f7ec024284e4d2d33bde9c 100755 (executable)
@@ -1194,6 +1194,7 @@ static int rk312x_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id,
        if ((open) && (!lcdc_dev->atv_layer_cnt)) {
                 rockchip_set_system_status(SYS_STATUS_LCDC0);
                rk312x_lcdc_pre_init(dev_drv);
+               rk312x_lcdc_clk_enable(lcdc_dev);
 #if defined(CONFIG_ROCKCHIP_IOMMU)
                if (dev_drv->iommu_enabled) {
                        if (!dev_drv->mmu_dev) {
@@ -1202,13 +1203,14 @@ static int rk312x_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id,
                                if (dev_drv->mmu_dev) {
                                        rk_fb_platform_set_sysmmu(dev_drv->mmu_dev,
                                                                  dev_drv->dev);
-                                        rockchip_iovmm_activate(dev_drv->dev);
                                 } else {
                                        dev_err(dev_drv->dev,
                                                "failed to get rockchip iommu device\n");
                                        return -1;
                                }
                        }
+                       if (dev_drv->mmu_dev)
+                               rockchip_iovmm_activate(dev_drv->dev);
                }
 #endif
                rk312x_lcdc_reg_restore(lcdc_dev);
index a794a0d50c27f9c866f1b5c49892d9ce51ec2812..1be30625903e0bc1f7aeef0d46d00add75e8535e 100755 (executable)
@@ -1306,6 +1306,7 @@ static int rk3288_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id,
        if ((open) && (!lcdc_dev->atv_layer_cnt)) {
                rockchip_set_system_status(sys_status);
                rk3288_lcdc_pre_init(dev_drv);
+               rk3288_lcdc_clk_enable(lcdc_dev);
 #if defined(CONFIG_ROCKCHIP_IOMMU)
                if (dev_drv->iommu_enabled) {
                        if (!dev_drv->mmu_dev) {
@@ -1314,16 +1315,16 @@ static int rk3288_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id,
                                if (dev_drv->mmu_dev) {
                                        rk_fb_platform_set_sysmmu(dev_drv->mmu_dev,
                                                                  dev_drv->dev);
-                                        rockchip_iovmm_activate(dev_drv->dev);
                                 } else {
                                        dev_err(dev_drv->dev,
                                                "failed to get rockchip iommu device\n");
                                        return -1;
                                }
                        }
+                       if (dev_drv->mmu_dev)
+                               rockchip_iovmm_activate(dev_drv->dev);
                }
 #endif
-               rk3288_lcdc_clk_enable(lcdc_dev);
                rk3288_lcdc_reg_restore(lcdc_dev);
                if (dev_drv->iommu_enabled)
                        rk3288_lcdc_mmu_en(dev_drv);