Lines Matching refs:mxsfb

79 void mxsfb_enable_axi_clk(struct mxsfb_drm_private *mxsfb)  in mxsfb_enable_axi_clk()  argument
81 if (mxsfb->clk_axi) in mxsfb_enable_axi_clk()
82 clk_prepare_enable(mxsfb->clk_axi); in mxsfb_enable_axi_clk()
85 void mxsfb_disable_axi_clk(struct mxsfb_drm_private *mxsfb) in mxsfb_disable_axi_clk() argument
87 if (mxsfb->clk_axi) in mxsfb_disable_axi_clk()
88 clk_disable_unprepare(mxsfb->clk_axi); in mxsfb_disable_axi_clk()
119 static int mxsfb_attach_bridge(struct mxsfb_drm_private *mxsfb) in mxsfb_attach_bridge() argument
121 struct drm_device *drm = mxsfb->drm; in mxsfb_attach_bridge()
142 ret = drm_bridge_attach(&mxsfb->encoder, bridge, NULL, 0); in mxsfb_attach_bridge()
146 mxsfb->bridge = bridge; in mxsfb_attach_bridge()
153 mxsfb->connector = drm_connector_list_iter_next(&iter); in mxsfb_attach_bridge()
162 struct mxsfb_drm_private *mxsfb = drm->dev_private; in mxsfb_irq_handler() local
166 reg = readl(mxsfb->base + LCDC_CTRL1); in mxsfb_irq_handler()
169 drm_crtc_handle_vblank(&mxsfb->crtc); in mxsfb_irq_handler()
170 if (mxsfb->crc_active) { in mxsfb_irq_handler()
171 crc = readl(mxsfb->base + LCDC_V4_CRC_STAT); in mxsfb_irq_handler()
172 vbc = drm_crtc_accurate_vblank_count(&mxsfb->crtc); in mxsfb_irq_handler()
173 drm_crtc_add_crc_entry(&mxsfb->crtc, true, vbc, &crc); in mxsfb_irq_handler()
177 writel(CTRL1_CUR_FRAME_DONE_IRQ, mxsfb->base + LCDC_CTRL1 + REG_CLR); in mxsfb_irq_handler()
184 struct mxsfb_drm_private *mxsfb = drm->dev_private; in mxsfb_irq_disable() local
186 mxsfb_enable_axi_clk(mxsfb); in mxsfb_irq_disable()
189 writel(CTRL1_CUR_FRAME_DONE_IRQ_EN, mxsfb->base + LCDC_CTRL1 + REG_CLR); in mxsfb_irq_disable()
190 writel(CTRL1_CUR_FRAME_DONE_IRQ, mxsfb->base + LCDC_CTRL1 + REG_CLR); in mxsfb_irq_disable()
192 mxsfb_disable_axi_clk(mxsfb); in mxsfb_irq_disable()
207 struct mxsfb_drm_private *mxsfb = dev->dev_private; in mxsfb_irq_uninstall() local
210 free_irq(mxsfb->irq, dev); in mxsfb_irq_uninstall()
217 struct mxsfb_drm_private *mxsfb; in mxsfb_load() local
221 mxsfb = devm_kzalloc(&pdev->dev, sizeof(*mxsfb), GFP_KERNEL); in mxsfb_load()
222 if (!mxsfb) in mxsfb_load()
225 mxsfb->drm = drm; in mxsfb_load()
226 drm->dev_private = mxsfb; in mxsfb_load()
227 mxsfb->devdata = devdata; in mxsfb_load()
230 mxsfb->base = devm_ioremap_resource(drm->dev, res); in mxsfb_load()
231 if (IS_ERR(mxsfb->base)) in mxsfb_load()
232 return PTR_ERR(mxsfb->base); in mxsfb_load()
234 mxsfb->clk = devm_clk_get(drm->dev, NULL); in mxsfb_load()
235 if (IS_ERR(mxsfb->clk)) in mxsfb_load()
236 return PTR_ERR(mxsfb->clk); in mxsfb_load()
238 mxsfb->clk_axi = devm_clk_get(drm->dev, "axi"); in mxsfb_load()
239 if (IS_ERR(mxsfb->clk_axi)) in mxsfb_load()
240 mxsfb->clk_axi = NULL; in mxsfb_load()
242 mxsfb->clk_disp_axi = devm_clk_get(drm->dev, "disp_axi"); in mxsfb_load()
243 if (IS_ERR(mxsfb->clk_disp_axi)) in mxsfb_load()
244 mxsfb->clk_disp_axi = NULL; in mxsfb_load()
255 ret = mxsfb_kms_init(mxsfb); in mxsfb_load()
268 drm_crtc_vblank_off(&mxsfb->crtc); in mxsfb_load()
270 ret = mxsfb_attach_bridge(mxsfb); in mxsfb_load()
288 mxsfb->irq = ret; in mxsfb_load()
291 ret = mxsfb_irq_install(drm, mxsfb->irq); in mxsfb_load()