aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-09-20 16:28:25 -0400
committerDave Airlie <airlied@redhat.com>2016-09-20 16:28:25 -0400
commit52f13a02b7d5f26feb69bf955bef10fbfaafbd7c (patch)
tree512fcb6f6a79ff37d10cdc5cab0c9341128a7ba5
parent26e34d2d8ba7aca0fe86e5362ce5811749df77b2 (diff)
parente0dc7c837dd0f514abce47101c04ce0ce243188e (diff)
Merge branch 'for-next' of http://git.agner.ch/git/linux-drm-fsl-dcu into drm-next
fsl-dcu fixes. * 'for-next' of http://git.agner.ch/git/linux-drm-fsl-dcu: drm/fsl-dcu: disable clock on error path drm/fsl-dcu: use PTR_ERR_OR_ZERO() to simplify the code drm/fsl-dcu: fix endian issue when using clk_register_divider
-rw-r--r--drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c12
-rw-r--r--drivers/gpu/drm/fsl-dcu/fsl_tcon.c5
2 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index 7882387f9bff..092aaecc7482 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -270,7 +270,7 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
270 ret = clk_prepare_enable(fsl_dev->pix_clk); 270 ret = clk_prepare_enable(fsl_dev->pix_clk);
271 if (ret < 0) { 271 if (ret < 0) {
272 dev_err(dev, "failed to enable pix clk\n"); 272 dev_err(dev, "failed to enable pix clk\n");
273 return ret; 273 goto disable_dcu_clk;
274 } 274 }
275 275
276 fsl_dcu_drm_init_planes(fsl_dev->drm); 276 fsl_dcu_drm_init_planes(fsl_dev->drm);
@@ -284,6 +284,10 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
284 enable_irq(fsl_dev->irq); 284 enable_irq(fsl_dev->irq);
285 285
286 return 0; 286 return 0;
287
288disable_dcu_clk:
289 clk_disable_unprepare(fsl_dev->clk);
290 return ret;
287} 291}
288#endif 292#endif
289 293
@@ -330,6 +334,7 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
330 const char *pix_clk_in_name; 334 const char *pix_clk_in_name;
331 const struct of_device_id *id; 335 const struct of_device_id *id;
332 int ret; 336 int ret;
337 u8 div_ratio_shift = 0;
333 338
334 fsl_dev = devm_kzalloc(dev, sizeof(*fsl_dev), GFP_KERNEL); 339 fsl_dev = devm_kzalloc(dev, sizeof(*fsl_dev), GFP_KERNEL);
335 if (!fsl_dev) 340 if (!fsl_dev)
@@ -382,11 +387,14 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
382 pix_clk_in = fsl_dev->clk; 387 pix_clk_in = fsl_dev->clk;
383 } 388 }
384 389
390 if (of_property_read_bool(dev->of_node, "big-endian"))
391 div_ratio_shift = 24;
392
385 pix_clk_in_name = __clk_get_name(pix_clk_in); 393 pix_clk_in_name = __clk_get_name(pix_clk_in);
386 snprintf(pix_clk_name, sizeof(pix_clk_name), "%s_pix", pix_clk_in_name); 394 snprintf(pix_clk_name, sizeof(pix_clk_name), "%s_pix", pix_clk_in_name);
387 fsl_dev->pix_clk = clk_register_divider(dev, pix_clk_name, 395 fsl_dev->pix_clk = clk_register_divider(dev, pix_clk_name,
388 pix_clk_in_name, 0, base + DCU_DIV_RATIO, 396 pix_clk_in_name, 0, base + DCU_DIV_RATIO,
389 0, 8, CLK_DIVIDER_ROUND_CLOSEST, NULL); 397 div_ratio_shift, 8, CLK_DIVIDER_ROUND_CLOSEST, NULL);
390 if (IS_ERR(fsl_dev->pix_clk)) { 398 if (IS_ERR(fsl_dev->pix_clk)) {
391 dev_err(dev, "failed to register pix clk\n"); 399 dev_err(dev, "failed to register pix clk\n");
392 ret = PTR_ERR(fsl_dev->pix_clk); 400 ret = PTR_ERR(fsl_dev->pix_clk);
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_tcon.c b/drivers/gpu/drm/fsl-dcu/fsl_tcon.c
index bca09ea24632..3194e544ee27 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_tcon.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_tcon.c
@@ -57,10 +57,7 @@ static int fsl_tcon_init_regmap(struct device *dev,
57 57
58 tcon->regs = devm_regmap_init_mmio(dev, regs, 58 tcon->regs = devm_regmap_init_mmio(dev, regs,
59 &fsl_tcon_regmap_config); 59 &fsl_tcon_regmap_config);
60 if (IS_ERR(tcon->regs)) 60 return PTR_ERR_OR_ZERO(tcon->regs);
61 return PTR_ERR(tcon->regs);
62
63 return 0;
64} 61}
65 62
66struct fsl_tcon *fsl_tcon_init(struct device *dev) 63struct fsl_tcon *fsl_tcon_init(struct device *dev)