Lines Matching refs:crtc
62 static struct mdp5_kms *get_kms(struct drm_crtc *crtc) in get_kms() argument
64 struct msm_drm_private *priv = crtc->dev->dev_private; in get_kms()
68 static void request_pending(struct drm_crtc *crtc, uint32_t pending) in request_pending() argument
70 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in request_pending()
73 mdp_irq_register(&get_kms(crtc)->base, &mdp5_crtc->vblank); in request_pending()
76 static void crtc_flush(struct drm_crtc *crtc) in crtc_flush() argument
78 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in crtc_flush()
79 struct mdp5_kms *mdp5_kms = get_kms(crtc); in crtc_flush()
98 static void update_fb(struct drm_crtc *crtc, struct drm_framebuffer *new_fb) in update_fb() argument
100 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in update_fb()
119 static void update_scanout(struct drm_crtc *crtc, struct drm_framebuffer *fb) in update_scanout() argument
121 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in update_scanout()
127 crtc_flush(crtc); in update_scanout()
136 request_pending(crtc, PENDING_FLIP); in update_scanout()
140 static void complete_flip(struct drm_crtc *crtc, struct drm_file *file) in complete_flip() argument
142 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in complete_flip()
143 struct drm_device *dev = crtc->dev; in complete_flip()
172 struct drm_crtc *crtc = &mdp5_crtc->base; in pageflip_cb() local
180 update_scanout(crtc, fb); in pageflip_cb()
194 static void mdp5_crtc_destroy(struct drm_crtc *crtc) in mdp5_crtc_destroy() argument
196 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_destroy()
198 drm_crtc_cleanup(crtc); in mdp5_crtc_destroy()
204 static void mdp5_crtc_dpms(struct drm_crtc *crtc, int mode) in mdp5_crtc_dpms() argument
206 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_dpms()
207 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_dpms()
224 static bool mdp5_crtc_mode_fixup(struct drm_crtc *crtc, in mdp5_crtc_mode_fixup() argument
231 static void blend_setup(struct drm_crtc *crtc) in blend_setup() argument
233 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in blend_setup()
234 struct mdp5_kms *mdp5_kms = get_kms(crtc); in blend_setup()
268 static int mdp5_crtc_mode_set(struct drm_crtc *crtc, in mdp5_crtc_mode_set() argument
274 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_mode_set()
275 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_mode_set()
290 drm_framebuffer_reference(crtc->primary->fb); in mdp5_crtc_mode_set()
292 ret = mdp5_plane_mode_set(mdp5_crtc->plane, crtc, crtc->primary->fb, in mdp5_crtc_mode_set()
297 drm_framebuffer_unreference(crtc->primary->fb); in mdp5_crtc_mode_set()
298 dev_err(crtc->dev->dev, "%s: failed to set mode on plane: %d\n", in mdp5_crtc_mode_set()
307 update_fb(crtc, crtc->primary->fb); in mdp5_crtc_mode_set()
308 update_scanout(crtc, crtc->primary->fb); in mdp5_crtc_mode_set()
313 static void mdp5_crtc_prepare(struct drm_crtc *crtc) in mdp5_crtc_prepare() argument
315 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_prepare()
318 mdp5_enable(get_kms(crtc)); in mdp5_crtc_prepare()
319 mdp5_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); in mdp5_crtc_prepare()
322 static void mdp5_crtc_commit(struct drm_crtc *crtc) in mdp5_crtc_commit() argument
324 mdp5_crtc_dpms(crtc, DRM_MODE_DPMS_ON); in mdp5_crtc_commit()
325 crtc_flush(crtc); in mdp5_crtc_commit()
327 mdp5_disable(get_kms(crtc)); in mdp5_crtc_commit()
330 static int mdp5_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, in mdp5_crtc_mode_set_base() argument
333 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_mode_set_base()
335 struct drm_display_mode *mode = &crtc->mode; in mdp5_crtc_mode_set_base()
339 drm_framebuffer_reference(crtc->primary->fb); in mdp5_crtc_mode_set_base()
341 ret = mdp5_plane_mode_set(plane, crtc, crtc->primary->fb, in mdp5_crtc_mode_set_base()
346 drm_framebuffer_unreference(crtc->primary->fb); in mdp5_crtc_mode_set_base()
350 update_fb(crtc, crtc->primary->fb); in mdp5_crtc_mode_set_base()
351 update_scanout(crtc, crtc->primary->fb); in mdp5_crtc_mode_set_base()
356 static void mdp5_crtc_load_lut(struct drm_crtc *crtc) in mdp5_crtc_load_lut() argument
360 static int mdp5_crtc_page_flip(struct drm_crtc *crtc, in mdp5_crtc_page_flip() argument
365 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_page_flip()
366 struct drm_device *dev = crtc->dev; in mdp5_crtc_page_flip()
381 update_fb(crtc, new_fb); in mdp5_crtc_page_flip()
386 static int mdp5_crtc_set_property(struct drm_crtc *crtc, in mdp5_crtc_set_property() argument
413 struct drm_crtc *crtc = &mdp5_crtc->base; in mdp5_crtc_vblank_irq() local
414 struct msm_drm_private *priv = crtc->dev->dev_private; in mdp5_crtc_vblank_irq()
417 mdp_irq_unregister(&get_kms(crtc)->base, &mdp5_crtc->vblank); in mdp5_crtc_vblank_irq()
422 complete_flip(crtc, NULL); in mdp5_crtc_vblank_irq()
430 struct drm_crtc *crtc = &mdp5_crtc->base; in mdp5_crtc_err_irq() local
432 crtc_flush(crtc); in mdp5_crtc_err_irq()
435 uint32_t mdp5_crtc_vblank(struct drm_crtc *crtc) in mdp5_crtc_vblank() argument
437 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_vblank()
441 void mdp5_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file) in mdp5_crtc_cancel_pending_flip() argument
444 complete_flip(crtc, file); in mdp5_crtc_cancel_pending_flip()
448 void mdp5_crtc_set_intf(struct drm_crtc *crtc, int intf, in mdp5_crtc_set_intf() argument
451 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_set_intf()
452 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_set_intf()
490 blend_setup(crtc); in mdp5_crtc_set_intf()
499 crtc_flush(crtc); in mdp5_crtc_set_intf()
502 static void set_attach(struct drm_crtc *crtc, enum mdp5_pipe pipe_id, in set_attach() argument
505 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in set_attach()
513 blend_setup(crtc); in set_attach()
515 crtc_flush(crtc); in set_attach()
518 void mdp5_crtc_attach(struct drm_crtc *crtc, struct drm_plane *plane) in mdp5_crtc_attach() argument
520 set_attach(crtc, mdp5_plane_pipe(plane), plane); in mdp5_crtc_attach()
523 void mdp5_crtc_detach(struct drm_crtc *crtc, struct drm_plane *plane) in mdp5_crtc_detach() argument
526 if (to_mdp5_crtc(crtc)->plane == plane) in mdp5_crtc_detach()
528 set_attach(crtc, mdp5_plane_pipe(plane), NULL); in mdp5_crtc_detach()
535 struct drm_crtc *crtc = NULL; in mdp5_crtc_init() local
545 crtc = &mdp5_crtc->base; in mdp5_crtc_init()
563 drm_crtc_init_with_planes(dev, crtc, plane, NULL, &mdp5_crtc_funcs); in mdp5_crtc_init()
564 drm_crtc_helper_add(crtc, &mdp5_crtc_helper_funcs); in mdp5_crtc_init()
566 mdp5_plane_install_properties(mdp5_crtc->plane, &crtc->base); in mdp5_crtc_init()
568 return crtc; in mdp5_crtc_init()
571 if (crtc) in mdp5_crtc_init()
572 mdp5_crtc_destroy(crtc); in mdp5_crtc_init()