Lines Matching full:crtc
63 static struct mdp4_kms *get_kms(struct drm_crtc *crtc) in get_kms() argument
65 struct msm_drm_private *priv = crtc->dev->dev_private; in get_kms()
69 static void request_pending(struct drm_crtc *crtc, uint32_t pending) in request_pending() argument
71 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in request_pending()
74 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank); in request_pending()
77 static void crtc_flush(struct drm_crtc *crtc) in crtc_flush() argument
79 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in crtc_flush()
80 struct mdp4_kms *mdp4_kms = get_kms(crtc); in crtc_flush()
84 drm_atomic_crtc_for_each_plane(plane, crtc) { in crtc_flush()
99 static void complete_flip(struct drm_crtc *crtc, struct drm_file *file) in complete_flip() argument
101 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in complete_flip()
102 struct drm_device *dev = crtc->dev; in complete_flip()
111 drm_crtc_send_vblank_event(crtc, event); in complete_flip()
139 /* setup mixer config, for which we need to consider all crtc's and
147 struct drm_crtc *crtc; in setup_mixer() local
153 list_for_each_entry(crtc, &config->crtc_list, head) { in setup_mixer()
154 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in setup_mixer()
157 drm_atomic_crtc_for_each_plane(plane, crtc) { in setup_mixer()
168 static void blend_setup(struct drm_crtc *crtc) in blend_setup() argument
170 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in blend_setup()
171 struct mdp4_kms *mdp4_kms = get_kms(crtc); in blend_setup()
181 drm_atomic_crtc_for_each_plane(plane, crtc) { in blend_setup()
216 static void mdp4_crtc_mode_set_nofb(struct drm_crtc *crtc) in mdp4_crtc_mode_set_nofb() argument
218 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_mode_set_nofb()
219 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_mode_set_nofb()
224 if (WARN_ON(!crtc->state)) in mdp4_crtc_mode_set_nofb()
227 mode = &crtc->state->adjusted_mode; in mdp4_crtc_mode_set_nofb()
258 static void mdp4_crtc_atomic_disable(struct drm_crtc *crtc, in mdp4_crtc_atomic_disable() argument
261 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_disable()
262 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_atomic_disable()
271 drm_crtc_vblank_off(crtc); in mdp4_crtc_atomic_disable()
276 if (crtc->state->event && !crtc->state->active) { in mdp4_crtc_atomic_disable()
279 drm_crtc_send_vblank_event(crtc, crtc->state->event); in mdp4_crtc_atomic_disable()
280 crtc->state->event = NULL; in mdp4_crtc_atomic_disable()
287 static void mdp4_crtc_atomic_enable(struct drm_crtc *crtc, in mdp4_crtc_atomic_enable() argument
290 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_enable()
291 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_atomic_enable()
301 drm_crtc_vblank_on(crtc); in mdp4_crtc_atomic_enable()
305 crtc_flush(crtc); in mdp4_crtc_atomic_enable()
310 static int mdp4_crtc_atomic_check(struct drm_crtc *crtc, in mdp4_crtc_atomic_check() argument
313 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_check()
319 static void mdp4_crtc_atomic_begin(struct drm_crtc *crtc, in mdp4_crtc_atomic_begin() argument
322 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_begin()
326 static void mdp4_crtc_atomic_flush(struct drm_crtc *crtc, in mdp4_crtc_atomic_flush() argument
329 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_atomic_flush()
330 struct drm_device *dev = crtc->dev; in mdp4_crtc_atomic_flush()
333 DBG("%s: event: %p", mdp4_crtc->name, crtc->state->event); in mdp4_crtc_atomic_flush()
338 mdp4_crtc->event = crtc->state->event; in mdp4_crtc_atomic_flush()
339 crtc->state->event = NULL; in mdp4_crtc_atomic_flush()
342 blend_setup(crtc); in mdp4_crtc_atomic_flush()
343 crtc_flush(crtc); in mdp4_crtc_atomic_flush()
344 request_pending(crtc, PENDING_FLIP); in mdp4_crtc_atomic_flush()
355 static void update_cursor(struct drm_crtc *crtc) in update_cursor() argument
357 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in update_cursor()
358 struct mdp4_kms *mdp4_kms = get_kms(crtc); in update_cursor()
403 static int mdp4_crtc_cursor_set(struct drm_crtc *crtc, in mdp4_crtc_cursor_set() argument
407 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_cursor_set()
408 struct mdp4_kms *mdp4_kms = get_kms(crtc); in mdp4_crtc_cursor_set()
410 struct drm_device *dev = crtc->dev; in mdp4_crtc_cursor_set()
451 request_pending(crtc, PENDING_CURSOR); in mdp4_crtc_cursor_set()
460 static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) in mdp4_crtc_cursor_move() argument
462 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); in mdp4_crtc_cursor_move()
470 crtc_flush(crtc); in mdp4_crtc_cursor_move()
471 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()
625 /* initialize crtc */
630 struct drm_crtc *crtc = NULL; in mdp4_crtc_init() local
640 crtc = &mdp4_crtc->base; in mdp4_crtc_init()
664 drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs); in mdp4_crtc_init()
666 return crtc; in mdp4_crtc_init()