aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c')
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
index 0bb4faa17523..733646c0d3f8 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
@@ -147,7 +147,7 @@ static void mdp4_destroy(struct msm_kms *kms)
147 if (mdp4_kms->blank_cursor_iova) 147 if (mdp4_kms->blank_cursor_iova)
148 msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id); 148 msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id);
149 if (mdp4_kms->blank_cursor_bo) 149 if (mdp4_kms->blank_cursor_bo)
150 drm_gem_object_unreference(mdp4_kms->blank_cursor_bo); 150 drm_gem_object_unreference_unlocked(mdp4_kms->blank_cursor_bo);
151 kfree(mdp4_kms); 151 kfree(mdp4_kms);
152} 152}
153 153
@@ -176,6 +176,8 @@ int mdp4_disable(struct mdp4_kms *mdp4_kms)
176 if (mdp4_kms->pclk) 176 if (mdp4_kms->pclk)
177 clk_disable_unprepare(mdp4_kms->pclk); 177 clk_disable_unprepare(mdp4_kms->pclk);
178 clk_disable_unprepare(mdp4_kms->lut_clk); 178 clk_disable_unprepare(mdp4_kms->lut_clk);
179 if (mdp4_kms->axi_clk)
180 clk_disable_unprepare(mdp4_kms->axi_clk);
179 181
180 return 0; 182 return 0;
181} 183}
@@ -188,6 +190,8 @@ int mdp4_enable(struct mdp4_kms *mdp4_kms)
188 if (mdp4_kms->pclk) 190 if (mdp4_kms->pclk)
189 clk_prepare_enable(mdp4_kms->pclk); 191 clk_prepare_enable(mdp4_kms->pclk);
190 clk_prepare_enable(mdp4_kms->lut_clk); 192 clk_prepare_enable(mdp4_kms->lut_clk);
193 if (mdp4_kms->axi_clk)
194 clk_prepare_enable(mdp4_kms->axi_clk);
191 195
192 return 0; 196 return 0;
193} 197}
@@ -294,15 +298,17 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
294 goto fail; 298 goto fail;
295 } 299 }
296 300
297 mdp4_kms->dsi_pll_vdda = devm_regulator_get(&pdev->dev, "dsi_pll_vdda"); 301 mdp4_kms->dsi_pll_vdda =
302 devm_regulator_get_optional(&pdev->dev, "dsi_pll_vdda");
298 if (IS_ERR(mdp4_kms->dsi_pll_vdda)) 303 if (IS_ERR(mdp4_kms->dsi_pll_vdda))
299 mdp4_kms->dsi_pll_vdda = NULL; 304 mdp4_kms->dsi_pll_vdda = NULL;
300 305
301 mdp4_kms->dsi_pll_vddio = devm_regulator_get(&pdev->dev, "dsi_pll_vddio"); 306 mdp4_kms->dsi_pll_vddio =
307 devm_regulator_get_optional(&pdev->dev, "dsi_pll_vddio");
302 if (IS_ERR(mdp4_kms->dsi_pll_vddio)) 308 if (IS_ERR(mdp4_kms->dsi_pll_vddio))
303 mdp4_kms->dsi_pll_vddio = NULL; 309 mdp4_kms->dsi_pll_vddio = NULL;
304 310
305 mdp4_kms->vdd = devm_regulator_get(&pdev->dev, "vdd"); 311 mdp4_kms->vdd = devm_regulator_get_exclusive(&pdev->dev, "vdd");
306 if (IS_ERR(mdp4_kms->vdd)) 312 if (IS_ERR(mdp4_kms->vdd))
307 mdp4_kms->vdd = NULL; 313 mdp4_kms->vdd = NULL;
308 314
@@ -333,6 +339,13 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
333 goto fail; 339 goto fail;
334 } 340 }
335 341
342 mdp4_kms->axi_clk = devm_clk_get(&pdev->dev, "mdp_axi_clk");
343 if (IS_ERR(mdp4_kms->axi_clk)) {
344 dev_err(dev->dev, "failed to get axi_clk\n");
345 ret = PTR_ERR(mdp4_kms->axi_clk);
346 goto fail;
347 }
348
336 clk_set_rate(mdp4_kms->clk, config->max_clk); 349 clk_set_rate(mdp4_kms->clk, config->max_clk);
337 clk_set_rate(mdp4_kms->lut_clk, config->max_clk); 350 clk_set_rate(mdp4_kms->lut_clk, config->max_clk);
338 351
@@ -348,7 +361,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
348 mdelay(16); 361 mdelay(16);
349 362
350 if (config->iommu) { 363 if (config->iommu) {
351 mmu = msm_iommu_new(dev, config->iommu); 364 mmu = msm_iommu_new(&pdev->dev, config->iommu);
352 if (IS_ERR(mmu)) { 365 if (IS_ERR(mmu)) {
353 ret = PTR_ERR(mmu); 366 ret = PTR_ERR(mmu);
354 goto fail; 367 goto fail;
@@ -406,6 +419,8 @@ static struct mdp4_platform_config *mdp4_get_config(struct platform_device *dev)
406 static struct mdp4_platform_config config = {}; 419 static struct mdp4_platform_config config = {};
407#ifdef CONFIG_OF 420#ifdef CONFIG_OF
408 /* TODO */ 421 /* TODO */
422 config.max_clk = 266667000;
423 config.iommu = iommu_domain_alloc(&platform_bus_type);
409#else 424#else
410 if (cpu_is_apq8064()) 425 if (cpu_is_apq8064())
411 config.max_clk = 266667000; 426 config.max_clk = 266667000;