|
@@ -270,7 +270,7 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
|
|
ret = clk_prepare_enable(fsl_dev->pix_clk);
|
|
ret = clk_prepare_enable(fsl_dev->pix_clk);
|
|
if (ret < 0) {
|
|
if (ret < 0) {
|
|
dev_err(dev, "failed to enable pix clk\n");
|
|
dev_err(dev, "failed to enable pix clk\n");
|
|
- return ret;
|
|
|
|
|
|
+ goto disable_dcu_clk;
|
|
}
|
|
}
|
|
|
|
|
|
fsl_dcu_drm_init_planes(fsl_dev->drm);
|
|
fsl_dcu_drm_init_planes(fsl_dev->drm);
|
|
@@ -284,6 +284,10 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
|
|
enable_irq(fsl_dev->irq);
|
|
enable_irq(fsl_dev->irq);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
+
|
|
|
|
+disable_dcu_clk:
|
|
|
|
+ clk_disable_unprepare(fsl_dev->clk);
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -330,6 +334,7 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
|
|
const char *pix_clk_in_name;
|
|
const char *pix_clk_in_name;
|
|
const struct of_device_id *id;
|
|
const struct of_device_id *id;
|
|
int ret;
|
|
int ret;
|
|
|
|
+ u8 div_ratio_shift = 0;
|
|
|
|
|
|
fsl_dev = devm_kzalloc(dev, sizeof(*fsl_dev), GFP_KERNEL);
|
|
fsl_dev = devm_kzalloc(dev, sizeof(*fsl_dev), GFP_KERNEL);
|
|
if (!fsl_dev)
|
|
if (!fsl_dev)
|
|
@@ -382,11 +387,14 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
|
|
pix_clk_in = fsl_dev->clk;
|
|
pix_clk_in = fsl_dev->clk;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (of_property_read_bool(dev->of_node, "big-endian"))
|
|
|
|
+ div_ratio_shift = 24;
|
|
|
|
+
|
|
pix_clk_in_name = __clk_get_name(pix_clk_in);
|
|
pix_clk_in_name = __clk_get_name(pix_clk_in);
|
|
snprintf(pix_clk_name, sizeof(pix_clk_name), "%s_pix", pix_clk_in_name);
|
|
snprintf(pix_clk_name, sizeof(pix_clk_name), "%s_pix", pix_clk_in_name);
|
|
fsl_dev->pix_clk = clk_register_divider(dev, pix_clk_name,
|
|
fsl_dev->pix_clk = clk_register_divider(dev, pix_clk_name,
|
|
pix_clk_in_name, 0, base + DCU_DIV_RATIO,
|
|
pix_clk_in_name, 0, base + DCU_DIV_RATIO,
|
|
- 0, 8, CLK_DIVIDER_ROUND_CLOSEST, NULL);
|
|
|
|
|
|
+ div_ratio_shift, 8, CLK_DIVIDER_ROUND_CLOSEST, NULL);
|
|
if (IS_ERR(fsl_dev->pix_clk)) {
|
|
if (IS_ERR(fsl_dev->pix_clk)) {
|
|
dev_err(dev, "failed to register pix clk\n");
|
|
dev_err(dev, "failed to register pix clk\n");
|
|
ret = PTR_ERR(fsl_dev->pix_clk);
|
|
ret = PTR_ERR(fsl_dev->pix_clk);
|