Lines Matching refs:lcdc

143 	struct imx_lcdc *lcdc = imx_lcdc_from_drmdev(pipe->crtc.dev);  in imx_lcdc_update_hw_registers()  local
150 writel(addr, lcdc->base + IMX21LCDC_LSSAR); in imx_lcdc_update_hw_registers()
157 clk_disable_unprepare(lcdc->clk_per); in imx_lcdc_update_hw_registers()
162 writel(framesize, lcdc->base + IMX21LCDC_LSR); in imx_lcdc_update_hw_registers()
168 writel(lhcr, lcdc->base + IMX21LCDC_LHCR); in imx_lcdc_update_hw_registers()
174 writel(lvcr, lcdc->base + IMX21LCDC_LVCR); in imx_lcdc_update_hw_registers()
176 lpcr = readl(lcdc->base + IMX21LCDC_LPCR); in imx_lcdc_update_hw_registers()
179 writel(lpcr, lcdc->base + IMX21LCDC_LPCR); in imx_lcdc_update_hw_registers()
182 writel(new_state->fb->pitches[0] / 4, lcdc->base + IMX21LCDC_LVPWR); in imx_lcdc_update_hw_registers()
186 clk_prepare_enable(lcdc->clk_per); in imx_lcdc_update_hw_registers()
196 struct imx_lcdc *lcdc = imx_lcdc_from_drmdev(pipe->crtc.dev); in imx_lcdc_pipe_enable() local
198 struct drm_display_info *disp_info = &lcdc->connector->display_info; in imx_lcdc_pipe_enable()
206 clk_div = DIV_ROUND_CLOSEST_ULL(clk_get_rate(lcdc->clk_per), in imx_lcdc_pipe_enable()
221 lcdc->base + IMX21LCDC_LPCR); in imx_lcdc_pipe_enable()
224 writel(0x00000000, lcdc->base + IMX21LCDC_LPOR); in imx_lcdc_pipe_enable()
227 writel(readl(lcdc->base + IMX21LCDC_LCPR) & ~(IMX21LCDC_LCPR_CC0 | IMX21LCDC_LCPR_CC1), in imx_lcdc_pipe_enable()
228 lcdc->base + IMX21LCDC_LCPR); in imx_lcdc_pipe_enable()
230 ret = clk_prepare_enable(lcdc->clk_ipg); in imx_lcdc_pipe_enable()
235 ret = clk_prepare_enable(lcdc->clk_ahb); in imx_lcdc_pipe_enable()
239 clk_disable_unprepare(lcdc->clk_ipg); in imx_lcdc_pipe_enable()
247 writel(INTR_EOF, lcdc->base + IMX21LCDC_LIER); in imx_lcdc_pipe_enable()
252 struct imx_lcdc *lcdc = imx_lcdc_from_drmdev(pipe->crtc.dev); in imx_lcdc_pipe_disable() local
253 struct drm_crtc *crtc = &lcdc->pipe.crtc; in imx_lcdc_pipe_disable()
256 clk_disable_unprepare(lcdc->clk_ahb); in imx_lcdc_pipe_disable()
257 clk_disable_unprepare(lcdc->clk_ipg); in imx_lcdc_pipe_disable()
260 clk_disable_unprepare(lcdc->clk_per); in imx_lcdc_pipe_disable()
262 spin_lock_irq(&lcdc->drm.event_lock); in imx_lcdc_pipe_disable()
268 spin_unlock_irq(&lcdc->drm.event_lock); in imx_lcdc_pipe_disable()
271 writel(0, lcdc->base + IMX21LCDC_LIER); in imx_lcdc_pipe_disable()
347 struct imx_lcdc *lcdc = imx_lcdc_from_drmdev(drm); in imx_lcdc_release() local
350 kfree(lcdc); in imx_lcdc_release()
378 struct imx_lcdc *lcdc = arg; in imx_lcdc_irq_handler() local
379 struct drm_crtc *crtc = &lcdc->pipe.crtc; in imx_lcdc_irq_handler()
382 status = readl(lcdc->base + IMX21LCDC_LISR); in imx_lcdc_irq_handler()
394 struct imx_lcdc *lcdc; in imx_lcdc_probe() local
401 lcdc = devm_drm_dev_alloc(dev, &imx_lcdc_drm_driver, in imx_lcdc_probe()
403 if (IS_ERR(lcdc)) in imx_lcdc_probe()
404 return PTR_ERR(lcdc); in imx_lcdc_probe()
406 drm = &lcdc->drm; in imx_lcdc_probe()
408 lcdc->base = devm_platform_ioremap_resource(pdev, 0); in imx_lcdc_probe()
409 if (IS_ERR(lcdc->base)) in imx_lcdc_probe()
410 return dev_err_probe(dev, PTR_ERR(lcdc->base), "Cannot get IO memory\n"); in imx_lcdc_probe()
417 lcdc->clk_ipg = devm_clk_get(dev, "ipg"); in imx_lcdc_probe()
418 if (IS_ERR(lcdc->clk_ipg)) in imx_lcdc_probe()
419 return dev_err_probe(dev, PTR_ERR(lcdc->clk_ipg), "Failed to get %s clk\n", "ipg"); in imx_lcdc_probe()
421 lcdc->clk_ahb = devm_clk_get(dev, "ahb"); in imx_lcdc_probe()
422 if (IS_ERR(lcdc->clk_ahb)) in imx_lcdc_probe()
423 return dev_err_probe(dev, PTR_ERR(lcdc->clk_ahb), "Failed to get %s clk\n", "ahb"); in imx_lcdc_probe()
425 lcdc->clk_per = devm_clk_get(dev, "per"); in imx_lcdc_probe()
426 if (IS_ERR(lcdc->clk_per)) in imx_lcdc_probe()
427 return dev_err_probe(dev, PTR_ERR(lcdc->clk_per), "Failed to get %s clk\n", "per"); in imx_lcdc_probe()
439 ret = drm_simple_display_pipe_init(drm, &lcdc->pipe, in imx_lcdc_probe()
450 ret = drm_bridge_attach(&lcdc->pipe.encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); in imx_lcdc_probe()
454 lcdc->connector = drm_bridge_connector_init(drm, &lcdc->pipe.encoder); in imx_lcdc_probe()
455 if (IS_ERR(lcdc->connector)) in imx_lcdc_probe()
456 return dev_err_probe(drm->dev, PTR_ERR(lcdc->connector), "Cannot init bridge connector\n"); in imx_lcdc_probe()
458 drm_connector_attach_encoder(lcdc->connector, &lcdc->pipe.encoder); in imx_lcdc_probe()
472 ret = clk_prepare_enable(lcdc->clk_ipg); in imx_lcdc_probe()
475 clk_disable_unprepare(lcdc->clk_ipg); in imx_lcdc_probe()
477 ret = clk_prepare_enable(lcdc->clk_per); in imx_lcdc_probe()
480 clk_disable_unprepare(lcdc->clk_per); in imx_lcdc_probe()
482 ret = clk_prepare_enable(lcdc->clk_ahb); in imx_lcdc_probe()
485 clk_disable_unprepare(lcdc->clk_ahb); in imx_lcdc_probe()
503 ret = devm_request_irq(dev, irq, imx_lcdc_irq_handler, 0, "imx-lcdc", lcdc); in imx_lcdc_probe()
509 ret = drm_dev_register(&lcdc->drm, 0); in imx_lcdc_probe()