Lines Matching full:crtc
61 static struct mdp4_kms *get_kms(struct drm_crtc *crtc) in get_kms() argument
63 struct msm_drm_private *priv = crtc->dev->dev_private; in get_kms()
67 static void request_pending(struct drm_crtc *crtc, uint32_t pending) in request_pending() argument
69 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in request_pending()
72 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank); in request_pending()
75 static void crtc_flush(struct drm_crtc *crtc) in crtc_flush() argument
77 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in crtc_flush()
78 struct mdp4_kms *mdp4_kms = get_kms(crtc); in crtc_flush()
82 drm_atomic_crtc_for_each_plane(plane, crtc) { in crtc_flush()
97 static void complete_flip(struct drm_crtc *crtc, struct drm_file *file) in complete_flip() argument
99 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in complete_flip()
100 struct drm_device *dev = crtc->dev; in complete_flip()
109 drm_crtc_send_vblank_event(crtc, event); in complete_flip()
125 static void mdp4_crtc_destroy(struct drm_crtc *crtc) in mdp4_crtc_destroy() argument
127 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_destroy()
129 drm_crtc_cleanup(crtc); in mdp4_crtc_destroy()
147 /* setup mixer config, for which we need to consider all crtc's and
155 struct drm_crtc *crtc; in setup_mixer() local
161 list_for_each_entry(crtc, &config->crtc_list, head) { in setup_mixer()
162 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in setup_mixer()
165 drm_atomic_crtc_for_each_plane(plane, crtc) { in setup_mixer()
176 static void blend_setup(struct drm_crtc *crtc) in blend_setup() argument
178 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in blend_setup()
179 struct mdp4_kms *mdp4_kms = get_kms(crtc); in blend_setup()
189 drm_atomic_crtc_for_each_plane(plane, crtc) { in blend_setup()
224 static void mdp4_crtc_mode_set_nofb(struct drm_crtc *crtc) in mdp4_crtc_mode_set_nofb() argument
226 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_mode_set_nofb()
227 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_mode_set_nofb()
232 if (WARN_ON(!crtc->state)) in mdp4_crtc_mode_set_nofb()
235 mode = &crtc->state->adjusted_mode; in mdp4_crtc_mode_set_nofb()
266 static void mdp4_crtc_atomic_disable(struct drm_crtc *crtc, in mdp4_crtc_atomic_disable() argument
269 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_disable()
270 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_atomic_disable()
278 drm_crtc_vblank_off(crtc); in mdp4_crtc_atomic_disable()
286 static void mdp4_crtc_atomic_enable(struct drm_crtc *crtc, in mdp4_crtc_atomic_enable() argument
289 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_enable()
290 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_atomic_enable()
300 drm_crtc_vblank_on(crtc); in mdp4_crtc_atomic_enable()
304 crtc_flush(crtc); in mdp4_crtc_atomic_enable()
309 static int mdp4_crtc_atomic_check(struct drm_crtc *crtc, in mdp4_crtc_atomic_check() argument
312 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_check()
318 static void mdp4_crtc_atomic_begin(struct drm_crtc *crtc, in mdp4_crtc_atomic_begin() argument
321 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_begin()
325 static void mdp4_crtc_atomic_flush(struct drm_crtc *crtc, in mdp4_crtc_atomic_flush() argument
328 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_flush()
329 struct drm_device *dev = crtc->dev; in mdp4_crtc_atomic_flush()
332 DBG("%s: event: %p", mdp4_crtc->name, crtc->state->event); in mdp4_crtc_atomic_flush()
337 mdp4_crtc->event = crtc->state->event; in mdp4_crtc_atomic_flush()
338 crtc->state->event = NULL; in mdp4_crtc_atomic_flush()
341 blend_setup(crtc); in mdp4_crtc_atomic_flush()
342 crtc_flush(crtc); in mdp4_crtc_atomic_flush()
343 request_pending(crtc, PENDING_FLIP); in mdp4_crtc_atomic_flush()
354 static void update_cursor(struct drm_crtc *crtc) in update_cursor() argument
356 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in update_cursor()
357 struct mdp4_kms *mdp4_kms = get_kms(crtc); in update_cursor()
402 static int mdp4_crtc_cursor_set(struct drm_crtc *crtc, in mdp4_crtc_cursor_set() argument
406 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_cursor_set()
407 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_cursor_set()
409 struct drm_device *dev = crtc->dev; in mdp4_crtc_cursor_set()
450 request_pending(crtc, PENDING_CURSOR); in mdp4_crtc_cursor_set()
459 static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) in mdp4_crtc_cursor_move() argument
461 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_cursor_move()
469 crtc_flush(crtc); in mdp4_crtc_cursor_move()
470 request_pending(crtc, PENDING_CURSOR); in mdp4_crtc_cursor_move()
500 struct drm_crtc *crtc = &mdp4_crtc->base; in mdp4_crtc_vblank_irq() local
501 struct msm_drm_private *priv = crtc->dev->dev_private; in mdp4_crtc_vblank_irq()
504 mdp_irq_unregister(&get_kms(crtc)->base, &mdp4_crtc->vblank); in mdp4_crtc_vblank_irq()
509 complete_flip(crtc, NULL); in mdp4_crtc_vblank_irq()
513 update_cursor(crtc); in mdp4_crtc_vblank_irq()
521 struct drm_crtc *crtc = &mdp4_crtc->base; in mdp4_crtc_err_irq() local
523 crtc_flush(crtc); in mdp4_crtc_err_irq()
526 static void mdp4_crtc_wait_for_flush_done(struct drm_crtc *crtc) in mdp4_crtc_wait_for_flush_done() argument
528 struct drm_device *dev = crtc->dev; in mdp4_crtc_wait_for_flush_done()
529 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_wait_for_flush_done()
530 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_wait_for_flush_done()
533 ret = drm_crtc_vblank_get(crtc); in mdp4_crtc_wait_for_flush_done()
537 ret = wait_event_timeout(dev->vblank[drm_crtc_index(crtc)].queue, in mdp4_crtc_wait_for_flush_done()
542 dev_warn(dev->dev, "vblank time out, crtc=%d\n", mdp4_crtc->id); in mdp4_crtc_wait_for_flush_done()
546 drm_crtc_vblank_put(crtc); in mdp4_crtc_wait_for_flush_done()
549 uint32_t mdp4_crtc_vblank(struct drm_crtc *crtc) in mdp4_crtc_vblank() argument
551 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_vblank()
556 void mdp4_crtc_set_config(struct drm_crtc *crtc, uint32_t config) in mdp4_crtc_set_config() argument
558 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_set_config()
559 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_set_config()
564 /* set interface for routing crtc->encoder: */
565 void mdp4_crtc_set_intf(struct drm_crtc *crtc, enum mdp4_intf intf, int mixer) in mdp4_crtc_set_intf() argument
567 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_set_intf()
568 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_set_intf()
598 blend_setup(crtc); in mdp4_crtc_set_intf()
605 void mdp4_crtc_wait_for_commit_done(struct drm_crtc *crtc) in mdp4_crtc_wait_for_commit_done() argument
608 * Later we will have command mode CRTC to wait for in mdp4_crtc_wait_for_commit_done()
611 mdp4_crtc_wait_for_flush_done(crtc); in mdp4_crtc_wait_for_commit_done()
618 /* initialize crtc */
623 struct drm_crtc *crtc = NULL; in mdp4_crtc_init() local
630 crtc = &mdp4_crtc->base; in mdp4_crtc_init()
651 drm_crtc_init_with_planes(dev, crtc, plane, NULL, &mdp4_crtc_funcs, in mdp4_crtc_init()
653 drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs); in mdp4_crtc_init()
655 return crtc; in mdp4_crtc_init()