Lines Matching full:mcde
4 * Parts of this file were based on the MCDE driver by Marcus Lorentzon
9 * DOC: ST-Ericsson MCDE Driver
11 * The MCDE (short for multi-channel display engine) is a graphics
84 #define DRIVER_DESC "DRM module for MCDE"
113 struct mcde *mcde = data; in mcde_irq() local
116 val = readl(mcde->regs + MCDE_MISERR); in mcde_irq()
118 mcde_display_irq(mcde); in mcde_irq()
121 dev_info(mcde->dev, "some error IRQ\n"); in mcde_irq()
122 writel(val, mcde->regs + MCDE_RISERR); in mcde_irq()
130 struct mcde *mcde = to_mcde(drm); in mcde_modeset_init() local
133 if (!mcde->bridge) { in mcde_modeset_init()
166 ret = drm_simple_display_pipe_attach_bridge(&mcde->pipe, in mcde_modeset_init()
167 mcde->bridge); in mcde_modeset_init()
187 .name = "mcde",
255 struct mcde *mcde; in mcde_probe() local
263 mcde = devm_drm_dev_alloc(dev, &mcde_drm_driver, struct mcde, drm); in mcde_probe()
264 if (IS_ERR(mcde)) in mcde_probe()
265 return PTR_ERR(mcde); in mcde_probe()
266 drm = &mcde->drm; in mcde_probe()
267 mcde->dev = dev; in mcde_probe()
271 mcde->epod = devm_regulator_get(dev, "epod"); in mcde_probe()
272 if (IS_ERR(mcde->epod)) { in mcde_probe()
273 ret = PTR_ERR(mcde->epod); in mcde_probe()
277 ret = regulator_enable(mcde->epod); in mcde_probe()
282 mcde->vana = devm_regulator_get(dev, "vana"); in mcde_probe()
283 if (IS_ERR(mcde->vana)) { in mcde_probe()
284 ret = PTR_ERR(mcde->vana); in mcde_probe()
288 ret = regulator_enable(mcde->vana); in mcde_probe()
299 mcde->mcde_clk = devm_clk_get(dev, "mcde"); in mcde_probe()
300 if (IS_ERR(mcde->mcde_clk)) { in mcde_probe()
301 dev_err(dev, "unable to get MCDE main clock\n"); in mcde_probe()
302 ret = PTR_ERR(mcde->mcde_clk); in mcde_probe()
305 ret = clk_prepare_enable(mcde->mcde_clk); in mcde_probe()
307 dev_err(dev, "failed to enable MCDE main clock\n"); in mcde_probe()
310 dev_info(dev, "MCDE clk rate %lu Hz\n", clk_get_rate(mcde->mcde_clk)); in mcde_probe()
312 mcde->lcd_clk = devm_clk_get(dev, "lcd"); in mcde_probe()
313 if (IS_ERR(mcde->lcd_clk)) { in mcde_probe()
315 ret = PTR_ERR(mcde->lcd_clk); in mcde_probe()
318 mcde->hdmi_clk = devm_clk_get(dev, "hdmi"); in mcde_probe()
319 if (IS_ERR(mcde->hdmi_clk)) { in mcde_probe()
321 ret = PTR_ERR(mcde->hdmi_clk); in mcde_probe()
326 mcde->regs = devm_ioremap_resource(dev, res); in mcde_probe()
327 if (IS_ERR(mcde->regs)) { in mcde_probe()
328 dev_err(dev, "no MCDE regs\n"); in mcde_probe()
339 ret = devm_request_irq(dev, irq, mcde_irq, 0, "mcde", mcde); in mcde_probe()
351 pid = readl(mcde->regs + MCDE_PID); in mcde_probe()
352 dev_info(dev, "found MCDE HW revision %d.%d (dev %d, metal fix %d)\n", in mcde_probe()
368 mcde_display_disable_irqs(mcde); in mcde_probe()
369 writel(0, mcde->regs + MCDE_IMSCERR); in mcde_probe()
370 writel(0xFFFFFFFF, mcde->regs + MCDE_RISERR); in mcde_probe()
399 * Perform an invasive reset of the MCDE and all blocks by in mcde_probe()
404 ret = regulator_disable(mcde->epod); in mcde_probe()
420 clk_disable_unprepare(mcde->mcde_clk); in mcde_probe()
421 regulator_disable(mcde->vana); in mcde_probe()
428 clk_disable_unprepare(mcde->mcde_clk); in mcde_probe()
430 regulator_disable(mcde->vana); in mcde_probe()
432 regulator_disable(mcde->epod); in mcde_probe()
440 struct mcde *mcde = to_mcde(drm); in mcde_remove() local
443 clk_disable_unprepare(mcde->mcde_clk); in mcde_remove()
444 regulator_disable(mcde->vana); in mcde_remove()
445 regulator_disable(mcde->epod); in mcde_remove()
452 .compatible = "ste,mcde",
459 .name = "mcde",
492 MODULE_ALIAS("platform:mcde-drm");