diff options
Diffstat (limited to 'drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c')
| -rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 25 |
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; |
