Lines Matching refs:mxsfb

79 void mxsfb_enable_axi_clk(struct mxsfb_drm_private *mxsfb)  in mxsfb_enable_axi_clk()  argument
81 clk_prepare_enable(mxsfb->clk_axi); in mxsfb_enable_axi_clk()
84 void mxsfb_disable_axi_clk(struct mxsfb_drm_private *mxsfb) in mxsfb_disable_axi_clk() argument
86 clk_disable_unprepare(mxsfb->clk_axi); in mxsfb_disable_axi_clk()
117 static int mxsfb_attach_bridge(struct mxsfb_drm_private *mxsfb) in mxsfb_attach_bridge() argument
119 struct drm_device *drm = mxsfb->drm; in mxsfb_attach_bridge()
140 ret = drm_bridge_attach(&mxsfb->encoder, bridge, NULL, 0); in mxsfb_attach_bridge()
144 mxsfb->bridge = bridge; in mxsfb_attach_bridge()
151 mxsfb->connector = drm_connector_list_iter_next(&iter); in mxsfb_attach_bridge()
160 struct mxsfb_drm_private *mxsfb = drm->dev_private; in mxsfb_irq_handler() local
164 reg = readl(mxsfb->base + LCDC_CTRL1); in mxsfb_irq_handler()
167 drm_crtc_handle_vblank(&mxsfb->crtc); in mxsfb_irq_handler()
168 if (mxsfb->crc_active) { in mxsfb_irq_handler()
169 crc = readl(mxsfb->base + LCDC_V4_CRC_STAT); in mxsfb_irq_handler()
170 vbc = drm_crtc_accurate_vblank_count(&mxsfb->crtc); in mxsfb_irq_handler()
171 drm_crtc_add_crc_entry(&mxsfb->crtc, true, vbc, &crc); in mxsfb_irq_handler()
175 writel(CTRL1_CUR_FRAME_DONE_IRQ, mxsfb->base + LCDC_CTRL1 + REG_CLR); in mxsfb_irq_handler()
182 struct mxsfb_drm_private *mxsfb = drm->dev_private; in mxsfb_irq_disable() local
184 mxsfb_enable_axi_clk(mxsfb); in mxsfb_irq_disable()
187 writel(CTRL1_CUR_FRAME_DONE_IRQ_EN, mxsfb->base + LCDC_CTRL1 + REG_CLR); in mxsfb_irq_disable()
188 writel(CTRL1_CUR_FRAME_DONE_IRQ, mxsfb->base + LCDC_CTRL1 + REG_CLR); in mxsfb_irq_disable()
190 mxsfb_disable_axi_clk(mxsfb); in mxsfb_irq_disable()
205 struct mxsfb_drm_private *mxsfb = dev->dev_private; in mxsfb_irq_uninstall() local
208 free_irq(mxsfb->irq, dev); in mxsfb_irq_uninstall()
215 struct mxsfb_drm_private *mxsfb; in mxsfb_load() local
219 mxsfb = devm_kzalloc(&pdev->dev, sizeof(*mxsfb), GFP_KERNEL); in mxsfb_load()
220 if (!mxsfb) in mxsfb_load()
223 mxsfb->drm = drm; in mxsfb_load()
224 drm->dev_private = mxsfb; in mxsfb_load()
225 mxsfb->devdata = devdata; in mxsfb_load()
228 mxsfb->base = devm_ioremap_resource(drm->dev, res); in mxsfb_load()
229 if (IS_ERR(mxsfb->base)) in mxsfb_load()
230 return PTR_ERR(mxsfb->base); in mxsfb_load()
232 mxsfb->clk = devm_clk_get(drm->dev, NULL); in mxsfb_load()
233 if (IS_ERR(mxsfb->clk)) in mxsfb_load()
234 return PTR_ERR(mxsfb->clk); in mxsfb_load()
236 mxsfb->clk_axi = devm_clk_get_optional(drm->dev, "axi"); in mxsfb_load()
237 if (IS_ERR(mxsfb->clk_axi)) in mxsfb_load()
238 return PTR_ERR(mxsfb->clk_axi); in mxsfb_load()
240 mxsfb->clk_disp_axi = devm_clk_get(drm->dev, "disp_axi"); in mxsfb_load()
241 if (IS_ERR(mxsfb->clk_disp_axi)) in mxsfb_load()
242 mxsfb->clk_disp_axi = NULL; in mxsfb_load()
253 ret = mxsfb_kms_init(mxsfb); in mxsfb_load()
266 drm_crtc_vblank_off(&mxsfb->crtc); in mxsfb_load()
268 ret = mxsfb_attach_bridge(mxsfb); in mxsfb_load()
286 mxsfb->irq = ret; in mxsfb_load()
289 ret = mxsfb_irq_install(drm, mxsfb->irq); in mxsfb_load()