Lines Matching full:crtc
14 static int dcss_enable_vblank(struct drm_crtc *crtc) in dcss_enable_vblank() argument
16 struct dcss_crtc *dcss_crtc = container_of(crtc, struct dcss_crtc, in dcss_enable_vblank()
18 struct dcss_dev *dcss = crtc->dev->dev_private; in dcss_enable_vblank()
29 static void dcss_disable_vblank(struct drm_crtc *crtc) in dcss_disable_vblank() argument
31 struct dcss_crtc *dcss_crtc = container_of(crtc, struct dcss_crtc, in dcss_disable_vblank()
54 static void dcss_crtc_atomic_begin(struct drm_crtc *crtc, in dcss_crtc_atomic_begin() argument
57 drm_crtc_vblank_on(crtc); in dcss_crtc_atomic_begin()
60 static void dcss_crtc_atomic_flush(struct drm_crtc *crtc, in dcss_crtc_atomic_flush() argument
63 struct dcss_crtc *dcss_crtc = container_of(crtc, struct dcss_crtc, in dcss_crtc_atomic_flush()
67 spin_lock_irq(&crtc->dev->event_lock); in dcss_crtc_atomic_flush()
68 if (crtc->state->event) { in dcss_crtc_atomic_flush()
69 WARN_ON(drm_crtc_vblank_get(crtc)); in dcss_crtc_atomic_flush()
70 drm_crtc_arm_vblank_event(crtc, crtc->state->event); in dcss_crtc_atomic_flush()
71 crtc->state->event = NULL; in dcss_crtc_atomic_flush()
73 spin_unlock_irq(&crtc->dev->event_lock); in dcss_crtc_atomic_flush()
79 static void dcss_crtc_atomic_enable(struct drm_crtc *crtc, in dcss_crtc_atomic_enable() argument
82 struct dcss_crtc *dcss_crtc = container_of(crtc, struct dcss_crtc, in dcss_crtc_atomic_enable()
85 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in dcss_crtc_atomic_enable()
113 static void dcss_crtc_atomic_disable(struct drm_crtc *crtc, in dcss_crtc_atomic_disable() argument
116 struct dcss_crtc *dcss_crtc = container_of(crtc, struct dcss_crtc, in dcss_crtc_atomic_disable()
119 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in dcss_crtc_atomic_disable()
124 spin_lock_irq(&crtc->dev->event_lock); in dcss_crtc_atomic_disable()
125 if (crtc->state->event) { in dcss_crtc_atomic_disable()
126 drm_crtc_send_vblank_event(crtc, crtc->state->event); in dcss_crtc_atomic_disable()
127 crtc->state->event = NULL; in dcss_crtc_atomic_disable()
129 spin_unlock_irq(&crtc->dev->event_lock); in dcss_crtc_atomic_disable()
139 if (!drm_mode_equal(mode, old_mode) || !crtc->state->active) in dcss_crtc_atomic_disable()
150 drm_crtc_vblank_off(crtc); in dcss_crtc_atomic_disable()
179 int dcss_crtc_init(struct dcss_crtc *crtc, struct drm_device *drm) in dcss_crtc_init() argument
185 crtc->plane[0] = dcss_plane_init(drm, drm_crtc_mask(&crtc->base), in dcss_crtc_init()
187 if (IS_ERR(crtc->plane[0])) in dcss_crtc_init()
188 return PTR_ERR(crtc->plane[0]); in dcss_crtc_init()
190 crtc->base.port = dcss->of_port; in dcss_crtc_init()
192 drm_crtc_helper_add(&crtc->base, &dcss_helper_funcs); in dcss_crtc_init()
193 ret = drm_crtc_init_with_planes(drm, &crtc->base, &crtc->plane[0]->base, in dcss_crtc_init()
196 dev_err(dcss->dev, "failed to init crtc\n"); in dcss_crtc_init()
200 crtc->irq = platform_get_irq_byname(pdev, "vblank"); in dcss_crtc_init()
201 if (crtc->irq < 0) in dcss_crtc_init()
202 return crtc->irq; in dcss_crtc_init()
204 ret = request_irq(crtc->irq, dcss_crtc_irq_handler, in dcss_crtc_init()
205 0, "dcss_drm", crtc); in dcss_crtc_init()
211 disable_irq(crtc->irq); in dcss_crtc_init()
216 void dcss_crtc_deinit(struct dcss_crtc *crtc, struct drm_device *drm) in dcss_crtc_deinit() argument
218 free_irq(crtc->irq, crtc); in dcss_crtc_deinit()