From 82ae95dc89d6a4204574217961fb4915f4311b2f Mon Sep 17 00:00:00 2001 From: zwl Date: Thu, 11 Sep 2014 08:50:38 +0800 Subject: [PATCH] rk3288/rk312x:lcdc: fix iommu status error when reopen lcdc --- drivers/video/rockchip/lcdc/rk312x_lcdc.c | 4 +++- drivers/video/rockchip/lcdc/rk3288_lcdc.c | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/video/rockchip/lcdc/rk312x_lcdc.c b/drivers/video/rockchip/lcdc/rk312x_lcdc.c index 201a2703171b..9c54a5e45577 100755 --- a/drivers/video/rockchip/lcdc/rk312x_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk312x_lcdc.c @@ -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); diff --git a/drivers/video/rockchip/lcdc/rk3288_lcdc.c b/drivers/video/rockchip/lcdc/rk3288_lcdc.c index a794a0d50c27..1be30625903e 100755 --- a/drivers/video/rockchip/lcdc/rk3288_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3288_lcdc.c @@ -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); -- 2.34.1