Lines Matching refs:crtc
62 static void set_scanout(struct drm_crtc *crtc, struct drm_framebuffer *fb) in set_scanout() argument
64 struct drm_device *dev = crtc->dev; in set_scanout()
73 crtc->y * fb->pitches[0] + in set_scanout()
74 crtc->x * fb->format->cpp[0]; in set_scanout()
76 end = start + (crtc->mode.vdisplay * fb->pitches[0]); in set_scanout()
96 static void tilcdc_crtc_load_palette(struct drm_crtc *crtc) in tilcdc_crtc_load_palette() argument
98 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_load_palette()
99 struct drm_device *dev = crtc->dev; in tilcdc_crtc_load_palette()
176 static void reset(struct drm_crtc *crtc) in reset() argument
178 struct drm_device *dev = crtc->dev; in reset()
201 static void tilcdc_crtc_set_clk(struct drm_crtc *crtc) in tilcdc_crtc_set_clk() argument
203 struct drm_device *dev = crtc->dev; in tilcdc_crtc_set_clk()
205 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_clk()
213 pclk_rate = crtc->mode.clock * 1000; in tilcdc_crtc_set_clk()
254 tilcdc_crtc->lcd_fck_rate, crtc->mode.clock, clkdiv); in tilcdc_crtc_set_clk()
272 static void tilcdc_crtc_set_mode(struct drm_crtc *crtc) in tilcdc_crtc_set_mode() argument
274 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_mode()
275 struct drm_device *dev = crtc->dev; in tilcdc_crtc_set_mode()
279 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in tilcdc_crtc_set_mode()
280 struct drm_framebuffer *fb = crtc->primary->state->fb; in tilcdc_crtc_set_mode()
430 tilcdc_crtc_set_clk(crtc); in tilcdc_crtc_set_mode()
432 tilcdc_crtc_load_palette(crtc); in tilcdc_crtc_set_mode()
434 set_scanout(crtc, fb); in tilcdc_crtc_set_mode()
436 crtc->hwmode = crtc->state->adjusted_mode; in tilcdc_crtc_set_mode()
439 tilcdc_mode_hvtotal(&crtc->hwmode); in tilcdc_crtc_set_mode()
442 static void tilcdc_crtc_enable(struct drm_crtc *crtc) in tilcdc_crtc_enable() argument
444 struct drm_device *dev = crtc->dev; in tilcdc_crtc_enable()
445 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_enable()
456 reset(crtc); in tilcdc_crtc_enable()
458 tilcdc_crtc_set_mode(crtc); in tilcdc_crtc_enable()
478 drm_crtc_vblank_on(crtc); in tilcdc_crtc_enable()
484 static void tilcdc_crtc_atomic_enable(struct drm_crtc *crtc, in tilcdc_crtc_atomic_enable() argument
487 tilcdc_crtc_enable(crtc); in tilcdc_crtc_atomic_enable()
490 static void tilcdc_crtc_off(struct drm_crtc *crtc, bool shutdown) in tilcdc_crtc_off() argument
492 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_off()
493 struct drm_device *dev = crtc->dev; in tilcdc_crtc_off()
517 drm_crtc_vblank_off(crtc); in tilcdc_crtc_off()
519 spin_lock_irq(&crtc->dev->event_lock); in tilcdc_crtc_off()
521 if (crtc->state->event) { in tilcdc_crtc_off()
522 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tilcdc_crtc_off()
523 crtc->state->event = NULL; in tilcdc_crtc_off()
526 spin_unlock_irq(&crtc->dev->event_lock); in tilcdc_crtc_off()
536 static void tilcdc_crtc_disable(struct drm_crtc *crtc) in tilcdc_crtc_disable() argument
538 tilcdc_crtc_off(crtc, false); in tilcdc_crtc_disable()
541 static void tilcdc_crtc_atomic_disable(struct drm_crtc *crtc, in tilcdc_crtc_atomic_disable() argument
544 tilcdc_crtc_disable(crtc); in tilcdc_crtc_atomic_disable()
547 static void tilcdc_crtc_atomic_flush(struct drm_crtc *crtc, in tilcdc_crtc_atomic_flush() argument
550 if (!crtc->state->event) in tilcdc_crtc_atomic_flush()
553 spin_lock_irq(&crtc->dev->event_lock); in tilcdc_crtc_atomic_flush()
554 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tilcdc_crtc_atomic_flush()
555 crtc->state->event = NULL; in tilcdc_crtc_atomic_flush()
556 spin_unlock_irq(&crtc->dev->event_lock); in tilcdc_crtc_atomic_flush()
559 void tilcdc_crtc_shutdown(struct drm_crtc *crtc) in tilcdc_crtc_shutdown() argument
561 tilcdc_crtc_off(crtc, true); in tilcdc_crtc_shutdown()
564 static bool tilcdc_crtc_is_on(struct drm_crtc *crtc) in tilcdc_crtc_is_on() argument
566 return crtc->state && crtc->state->enable && crtc->state->active; in tilcdc_crtc_is_on()
573 struct drm_crtc *crtc = &tilcdc_crtc->base; in tilcdc_crtc_recover_work() local
575 dev_info(crtc->dev->dev, "%s: Reset CRTC", __func__); in tilcdc_crtc_recover_work()
577 drm_modeset_lock(&crtc->mutex, NULL); in tilcdc_crtc_recover_work()
579 if (!tilcdc_crtc_is_on(crtc)) in tilcdc_crtc_recover_work()
582 tilcdc_crtc_disable(crtc); in tilcdc_crtc_recover_work()
583 tilcdc_crtc_enable(crtc); in tilcdc_crtc_recover_work()
585 drm_modeset_unlock(&crtc->mutex); in tilcdc_crtc_recover_work()
588 static void tilcdc_crtc_destroy(struct drm_crtc *crtc) in tilcdc_crtc_destroy() argument
590 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_destroy()
592 tilcdc_crtc_shutdown(crtc); in tilcdc_crtc_destroy()
596 of_node_put(crtc->port); in tilcdc_crtc_destroy()
597 drm_crtc_cleanup(crtc); in tilcdc_crtc_destroy()
600 int tilcdc_crtc_update_fb(struct drm_crtc *crtc, in tilcdc_crtc_update_fb() argument
604 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_fb()
605 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_fb()
630 set_scanout(crtc, fb); in tilcdc_crtc_update_fb()
640 static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, in tilcdc_crtc_mode_fixup() argument
644 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_mode_fixup()
669 static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, in tilcdc_crtc_atomic_check() argument
673 crtc); in tilcdc_crtc_atomic_check()
678 if (state->planes[0].ptr != crtc->primary || in tilcdc_crtc_atomic_check()
680 state->planes[0].state->crtc != crtc) { in tilcdc_crtc_atomic_check()
681 dev_dbg(crtc->dev->dev, "CRTC primary plane must be present"); in tilcdc_crtc_atomic_check()
688 static int tilcdc_crtc_enable_vblank(struct drm_crtc *crtc) in tilcdc_crtc_enable_vblank() argument
690 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_enable_vblank()
691 struct drm_device *dev = crtc->dev; in tilcdc_crtc_enable_vblank()
711 static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc) in tilcdc_crtc_disable_vblank() argument
713 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_disable_vblank()
714 struct drm_device *dev = crtc->dev; in tilcdc_crtc_disable_vblank()
730 static void tilcdc_crtc_reset(struct drm_crtc *crtc) in tilcdc_crtc_reset() argument
732 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_reset()
733 struct drm_device *dev = crtc->dev; in tilcdc_crtc_reset()
736 drm_atomic_helper_crtc_reset(crtc); in tilcdc_crtc_reset()
770 tilcdc_crtc_mode_valid(struct drm_crtc *crtc, in tilcdc_crtc_mode_valid() argument
773 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_mode_valid()
868 void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, in tilcdc_crtc_set_panel_info() argument
871 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_panel_info()
875 void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc, in tilcdc_crtc_set_simulate_vesa_sync() argument
878 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_simulate_vesa_sync()
883 void tilcdc_crtc_update_clk(struct drm_crtc *crtc) in tilcdc_crtc_update_clk() argument
885 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_clk()
887 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_clk()
889 drm_modeset_lock(&crtc->mutex, NULL); in tilcdc_crtc_update_clk()
891 if (tilcdc_crtc_is_on(crtc)) { in tilcdc_crtc_update_clk()
893 tilcdc_crtc_disable(crtc); in tilcdc_crtc_update_clk()
895 tilcdc_crtc_set_clk(crtc); in tilcdc_crtc_update_clk()
897 tilcdc_crtc_enable(crtc); in tilcdc_crtc_update_clk()
901 drm_modeset_unlock(&crtc->mutex); in tilcdc_crtc_update_clk()
906 irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) in tilcdc_crtc_irq() argument
908 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_irq()
909 struct drm_device *dev = crtc->dev; in tilcdc_crtc_irq()
927 set_scanout(crtc, tilcdc_crtc->next_fb); in tilcdc_crtc_irq()
934 drm_crtc_handle_vblank(crtc); in tilcdc_crtc_irq()
944 drm_crtc_send_vblank_event(crtc, event); in tilcdc_crtc_irq()
1020 struct drm_crtc *crtc; in tilcdc_crtc_create() local
1036 crtc = &tilcdc_crtc->base; in tilcdc_crtc_create()
1049 ret = drm_crtc_init_with_planes(dev, crtc, in tilcdc_crtc_create()
1057 drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs); in tilcdc_crtc_create()
1060 crtc->port = of_graph_get_port_by_id(dev->dev->of_node, 0); in tilcdc_crtc_create()
1061 if (!crtc->port) { /* This should never happen */ in tilcdc_crtc_create()
1069 priv->crtc = crtc; in tilcdc_crtc_create()
1073 tilcdc_crtc_destroy(crtc); in tilcdc_crtc_create()