Lines Matching full:lcdif
34 static void lcdif_set_formats(struct lcdif_drm_private *lcdif, in lcdif_set_formats() argument
37 struct drm_device *drm = lcdif->drm; in lcdif_set_formats()
38 const u32 format = lcdif->crtc.primary->state->fb->format->format; in lcdif_set_formats()
40 writel(CSC0_CTRL_BYPASS, lcdif->base + LCDC_V8_CSC0_CTRL); in lcdif_set_formats()
45 lcdif->base + LCDC_V8_DISP_PARA); in lcdif_set_formats()
49 lcdif->base + LCDC_V8_DISP_PARA); in lcdif_set_formats()
53 lcdif->base + LCDC_V8_DISP_PARA); in lcdif_set_formats()
57 lcdif->base + LCDC_V8_CSC0_COEF0); in lcdif_set_formats()
59 lcdif->base + LCDC_V8_CSC0_COEF1); in lcdif_set_formats()
61 lcdif->base + LCDC_V8_CSC0_COEF2); in lcdif_set_formats()
63 lcdif->base + LCDC_V8_CSC0_COEF3); in lcdif_set_formats()
65 lcdif->base + LCDC_V8_CSC0_COEF4); in lcdif_set_formats()
67 lcdif->base + LCDC_V8_CSC0_COEF5); in lcdif_set_formats()
70 lcdif->base + LCDC_V8_CSC0_CTRL); in lcdif_set_formats()
81 lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_set_formats()
85 lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_set_formats()
89 lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_set_formats()
93 lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_set_formats()
97 lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_set_formats()
101 lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_set_formats()
109 static void lcdif_set_mode(struct lcdif_drm_private *lcdif, u32 bus_flags) in lcdif_set_mode() argument
111 struct drm_display_mode *m = &lcdif->crtc.state->adjusted_mode; in lcdif_set_mode()
123 writel(ctrl, lcdif->base + LCDC_V8_CTRL); in lcdif_set_mode()
127 lcdif->base + LCDC_V8_DISP_SIZE); in lcdif_set_mode()
131 lcdif->base + LCDC_V8_HSYN_PARA); in lcdif_set_mode()
135 lcdif->base + LCDC_V8_VSYN_PARA); in lcdif_set_mode()
139 lcdif->base + LCDC_V8_VSYN_HSYN_WIDTH); in lcdif_set_mode()
143 lcdif->base + LCDC_V8_CTRLDESCL0_1); in lcdif_set_mode()
145 writel(CTRLDESCL0_3_PITCH(lcdif->crtc.primary->state->fb->pitches[0]), in lcdif_set_mode()
146 lcdif->base + LCDC_V8_CTRLDESCL0_3); in lcdif_set_mode()
149 static void lcdif_enable_controller(struct lcdif_drm_private *lcdif) in lcdif_enable_controller() argument
153 reg = readl(lcdif->base + LCDC_V8_DISP_PARA); in lcdif_enable_controller()
155 writel(reg, lcdif->base + LCDC_V8_DISP_PARA); in lcdif_enable_controller()
157 reg = readl(lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_enable_controller()
159 writel(reg, lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_enable_controller()
162 static void lcdif_disable_controller(struct lcdif_drm_private *lcdif) in lcdif_disable_controller() argument
167 reg = readl(lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_disable_controller()
169 writel(reg, lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_disable_controller()
171 ret = readl_poll_timeout(lcdif->base + LCDC_V8_CTRLDESCL0_5, in lcdif_disable_controller()
175 drm_err(lcdif->drm, "Failed to disable controller!\n"); in lcdif_disable_controller()
177 reg = readl(lcdif->base + LCDC_V8_DISP_PARA); in lcdif_disable_controller()
179 writel(reg, lcdif->base + LCDC_V8_DISP_PARA); in lcdif_disable_controller()
182 static void lcdif_reset_block(struct lcdif_drm_private *lcdif) in lcdif_reset_block() argument
184 writel(CTRL_SW_RESET, lcdif->base + LCDC_V8_CTRL + REG_SET); in lcdif_reset_block()
185 readl(lcdif->base + LCDC_V8_CTRL); in lcdif_reset_block()
186 writel(CTRL_SW_RESET, lcdif->base + LCDC_V8_CTRL + REG_CLR); in lcdif_reset_block()
187 readl(lcdif->base + LCDC_V8_CTRL); in lcdif_reset_block()
190 static void lcdif_crtc_mode_set_nofb(struct lcdif_drm_private *lcdif, in lcdif_crtc_mode_set_nofb() argument
194 struct drm_device *drm = lcdif->crtc.dev; in lcdif_crtc_mode_set_nofb()
195 struct drm_display_mode *m = &lcdif->crtc.state->adjusted_mode; in lcdif_crtc_mode_set_nofb()
198 if (lcdif->bridge && lcdif->bridge->timings) in lcdif_crtc_mode_set_nofb()
199 bus_flags = lcdif->bridge->timings->input_bus_flags; in lcdif_crtc_mode_set_nofb()
205 (int)(clk_get_rate(lcdif->clk) / 1000)); in lcdif_crtc_mode_set_nofb()
211 lcdif_reset_block(lcdif); in lcdif_crtc_mode_set_nofb()
213 lcdif_set_formats(lcdif, bus_format); in lcdif_crtc_mode_set_nofb()
215 lcdif_set_mode(lcdif, bus_flags); in lcdif_crtc_mode_set_nofb()
236 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(crtc->dev); in lcdif_crtc_atomic_flush() local
240 reg = readl(lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_crtc_atomic_flush()
242 writel(reg, lcdif->base + LCDC_V8_CTRLDESCL0_5); in lcdif_crtc_atomic_flush()
261 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(crtc->dev); in lcdif_crtc_atomic_enable() local
264 struct drm_display_mode *m = &lcdif->crtc.state->adjusted_mode; in lcdif_crtc_atomic_enable()
266 struct drm_device *drm = lcdif->drm; in lcdif_crtc_atomic_enable()
270 /* If there is a bridge attached to the LCDIF, use its bus format */ in lcdif_crtc_atomic_enable()
271 if (lcdif->bridge) { in lcdif_crtc_atomic_enable()
274 lcdif->bridge); in lcdif_crtc_atomic_enable()
292 clk_set_rate(lcdif->clk, m->crtc_clock * 1000); in lcdif_crtc_atomic_enable()
296 lcdif_crtc_mode_set_nofb(lcdif, bridge_state, bus_format); in lcdif_crtc_atomic_enable()
302 lcdif->base + LCDC_V8_CTRLDESCL_LOW0_4); in lcdif_crtc_atomic_enable()
304 lcdif->base + LCDC_V8_CTRLDESCL_HIGH0_4); in lcdif_crtc_atomic_enable()
306 lcdif_enable_controller(lcdif); in lcdif_crtc_atomic_enable()
314 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(crtc->dev); in lcdif_crtc_atomic_disable() local
315 struct drm_device *drm = lcdif->drm; in lcdif_crtc_atomic_disable()
320 lcdif_disable_controller(lcdif); in lcdif_crtc_atomic_disable()
335 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(crtc->dev); in lcdif_crtc_enable_vblank() local
338 writel(INT_STATUS_D0_VS_BLANK, lcdif->base + LCDC_V8_INT_STATUS_D0); in lcdif_crtc_enable_vblank()
339 writel(INT_ENABLE_D0_VS_BLANK_EN, lcdif->base + LCDC_V8_INT_ENABLE_D0); in lcdif_crtc_enable_vblank()
346 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(crtc->dev); in lcdif_crtc_disable_vblank() local
349 writel(0, lcdif->base + LCDC_V8_INT_ENABLE_D0); in lcdif_crtc_disable_vblank()
350 writel(INT_STATUS_D0_VS_BLANK, lcdif->base + LCDC_V8_INT_STATUS_D0); in lcdif_crtc_disable_vblank()
388 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(plane->dev); in lcdif_plane_atomic_check() local
392 &lcdif->crtc); in lcdif_plane_atomic_check()
403 struct lcdif_drm_private *lcdif = to_lcdif_drm_private(plane->dev); in lcdif_plane_primary_atomic_update() local
411 lcdif->base + LCDC_V8_CTRLDESCL_LOW0_4); in lcdif_plane_primary_atomic_update()
413 lcdif->base + LCDC_V8_CTRLDESCL_HIGH0_4); in lcdif_plane_primary_atomic_update()
457 int lcdif_kms_init(struct lcdif_drm_private *lcdif) in lcdif_kms_init() argument
459 struct drm_encoder *encoder = &lcdif->encoder; in lcdif_kms_init()
460 struct drm_crtc *crtc = &lcdif->crtc; in lcdif_kms_init()
463 drm_plane_helper_add(&lcdif->planes.primary, in lcdif_kms_init()
465 ret = drm_universal_plane_init(lcdif->drm, &lcdif->planes.primary, 1, in lcdif_kms_init()
475 ret = drm_crtc_init_with_planes(lcdif->drm, crtc, in lcdif_kms_init()
476 &lcdif->planes.primary, NULL, in lcdif_kms_init()
482 return drm_encoder_init(lcdif->drm, encoder, &lcdif_encoder_funcs, in lcdif_kms_init()