Lines Matching refs:mxsfb

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