Lines Matching refs:crtc
63 static void set_scanout(struct drm_crtc *crtc, struct drm_framebuffer *fb) in set_scanout() argument
65 struct drm_device *dev = crtc->dev; in set_scanout()
74 crtc->y * fb->pitches[0] + in set_scanout()
75 crtc->x * fb->format->cpp[0]; in set_scanout()
77 end = start + (crtc->mode.vdisplay * fb->pitches[0]); in set_scanout()
97 static void tilcdc_crtc_load_palette(struct drm_crtc *crtc) in tilcdc_crtc_load_palette() argument
99 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_load_palette()
100 struct drm_device *dev = crtc->dev; in tilcdc_crtc_load_palette()
177 static void reset(struct drm_crtc *crtc) in reset() argument
179 struct drm_device *dev = crtc->dev; in reset()
202 static void tilcdc_crtc_set_clk(struct drm_crtc *crtc) in tilcdc_crtc_set_clk() argument
204 struct drm_device *dev = crtc->dev; in tilcdc_crtc_set_clk()
206 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_clk()
214 pclk_rate = crtc->mode.clock * 1000; in tilcdc_crtc_set_clk()
255 tilcdc_crtc->lcd_fck_rate, crtc->mode.clock, clkdiv); in tilcdc_crtc_set_clk()
273 static void tilcdc_crtc_set_mode(struct drm_crtc *crtc) in tilcdc_crtc_set_mode() argument
275 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_mode()
276 struct drm_device *dev = crtc->dev; in tilcdc_crtc_set_mode()
280 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in tilcdc_crtc_set_mode()
281 struct drm_framebuffer *fb = crtc->primary->state->fb; in tilcdc_crtc_set_mode()
431 tilcdc_crtc_set_clk(crtc); in tilcdc_crtc_set_mode()
433 tilcdc_crtc_load_palette(crtc); in tilcdc_crtc_set_mode()
435 set_scanout(crtc, fb); in tilcdc_crtc_set_mode()
437 drm_mode_copy(&crtc->hwmode, &crtc->state->adjusted_mode); in tilcdc_crtc_set_mode()
440 tilcdc_mode_hvtotal(&crtc->hwmode); in tilcdc_crtc_set_mode()
443 static void tilcdc_crtc_enable(struct drm_crtc *crtc) in tilcdc_crtc_enable() argument
445 struct drm_device *dev = crtc->dev; in tilcdc_crtc_enable()
446 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_enable()
457 reset(crtc); in tilcdc_crtc_enable()
459 tilcdc_crtc_set_mode(crtc); in tilcdc_crtc_enable()
479 drm_crtc_vblank_on(crtc); in tilcdc_crtc_enable()
485 static void tilcdc_crtc_atomic_enable(struct drm_crtc *crtc, in tilcdc_crtc_atomic_enable() argument
488 tilcdc_crtc_enable(crtc); in tilcdc_crtc_atomic_enable()
491 static void tilcdc_crtc_off(struct drm_crtc *crtc, bool shutdown) in tilcdc_crtc_off() argument
493 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_off()
494 struct drm_device *dev = crtc->dev; in tilcdc_crtc_off()
518 drm_crtc_vblank_off(crtc); in tilcdc_crtc_off()
520 spin_lock_irq(&crtc->dev->event_lock); in tilcdc_crtc_off()
522 if (crtc->state->event) { in tilcdc_crtc_off()
523 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tilcdc_crtc_off()
524 crtc->state->event = NULL; in tilcdc_crtc_off()
527 spin_unlock_irq(&crtc->dev->event_lock); in tilcdc_crtc_off()
537 static void tilcdc_crtc_disable(struct drm_crtc *crtc) in tilcdc_crtc_disable() argument
539 tilcdc_crtc_off(crtc, false); in tilcdc_crtc_disable()
542 static void tilcdc_crtc_atomic_disable(struct drm_crtc *crtc, in tilcdc_crtc_atomic_disable() argument
545 tilcdc_crtc_disable(crtc); in tilcdc_crtc_atomic_disable()
548 static void tilcdc_crtc_atomic_flush(struct drm_crtc *crtc, in tilcdc_crtc_atomic_flush() argument
551 if (!crtc->state->event) in tilcdc_crtc_atomic_flush()
554 spin_lock_irq(&crtc->dev->event_lock); in tilcdc_crtc_atomic_flush()
555 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tilcdc_crtc_atomic_flush()
556 crtc->state->event = NULL; in tilcdc_crtc_atomic_flush()
557 spin_unlock_irq(&crtc->dev->event_lock); in tilcdc_crtc_atomic_flush()
560 void tilcdc_crtc_shutdown(struct drm_crtc *crtc) in tilcdc_crtc_shutdown() argument
562 tilcdc_crtc_off(crtc, true); in tilcdc_crtc_shutdown()
565 static bool tilcdc_crtc_is_on(struct drm_crtc *crtc) in tilcdc_crtc_is_on() argument
567 return crtc->state && crtc->state->enable && crtc->state->active; in tilcdc_crtc_is_on()
574 struct drm_crtc *crtc = &tilcdc_crtc->base; in tilcdc_crtc_recover_work() local
576 dev_info(crtc->dev->dev, "%s: Reset CRTC", __func__); in tilcdc_crtc_recover_work()
578 drm_modeset_lock(&crtc->mutex, NULL); in tilcdc_crtc_recover_work()
580 if (!tilcdc_crtc_is_on(crtc)) in tilcdc_crtc_recover_work()
583 tilcdc_crtc_disable(crtc); in tilcdc_crtc_recover_work()
584 tilcdc_crtc_enable(crtc); in tilcdc_crtc_recover_work()
586 drm_modeset_unlock(&crtc->mutex); in tilcdc_crtc_recover_work()
589 static void tilcdc_crtc_destroy(struct drm_crtc *crtc) in tilcdc_crtc_destroy() argument
591 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_destroy()
593 tilcdc_crtc_shutdown(crtc); in tilcdc_crtc_destroy()
597 of_node_put(crtc->port); in tilcdc_crtc_destroy()
598 drm_crtc_cleanup(crtc); in tilcdc_crtc_destroy()
601 int tilcdc_crtc_update_fb(struct drm_crtc *crtc, in tilcdc_crtc_update_fb() argument
605 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_fb()
606 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_fb()
631 set_scanout(crtc, fb); in tilcdc_crtc_update_fb()
641 static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, in tilcdc_crtc_mode_fixup() argument
645 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_mode_fixup()
670 static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, in tilcdc_crtc_atomic_check() argument
674 crtc); in tilcdc_crtc_atomic_check()
679 if (state->planes[0].ptr != crtc->primary || in tilcdc_crtc_atomic_check()
681 state->planes[0].state->crtc != crtc) { in tilcdc_crtc_atomic_check()
682 dev_dbg(crtc->dev->dev, "CRTC primary plane must be present"); in tilcdc_crtc_atomic_check()
689 static int tilcdc_crtc_enable_vblank(struct drm_crtc *crtc) in tilcdc_crtc_enable_vblank() argument
691 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_enable_vblank()
692 struct drm_device *dev = crtc->dev; in tilcdc_crtc_enable_vblank()
712 static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc) in tilcdc_crtc_disable_vblank() argument
714 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_disable_vblank()
715 struct drm_device *dev = crtc->dev; in tilcdc_crtc_disable_vblank()
731 static void tilcdc_crtc_reset(struct drm_crtc *crtc) in tilcdc_crtc_reset() argument
733 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_reset()
734 struct drm_device *dev = crtc->dev; in tilcdc_crtc_reset()
737 drm_atomic_helper_crtc_reset(crtc); in tilcdc_crtc_reset()
771 tilcdc_crtc_mode_valid(struct drm_crtc *crtc, in tilcdc_crtc_mode_valid() argument
774 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_mode_valid()
869 void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, in tilcdc_crtc_set_panel_info() argument
872 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_panel_info()
876 void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc, in tilcdc_crtc_set_simulate_vesa_sync() argument
879 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_simulate_vesa_sync()
884 void tilcdc_crtc_update_clk(struct drm_crtc *crtc) in tilcdc_crtc_update_clk() argument
886 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_clk()
888 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_clk()
890 drm_modeset_lock(&crtc->mutex, NULL); in tilcdc_crtc_update_clk()
892 if (tilcdc_crtc_is_on(crtc)) { in tilcdc_crtc_update_clk()
894 tilcdc_crtc_disable(crtc); in tilcdc_crtc_update_clk()
896 tilcdc_crtc_set_clk(crtc); in tilcdc_crtc_update_clk()
898 tilcdc_crtc_enable(crtc); in tilcdc_crtc_update_clk()
902 drm_modeset_unlock(&crtc->mutex); in tilcdc_crtc_update_clk()
907 irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) in tilcdc_crtc_irq() argument
909 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_irq()
910 struct drm_device *dev = crtc->dev; in tilcdc_crtc_irq()
928 set_scanout(crtc, tilcdc_crtc->next_fb); in tilcdc_crtc_irq()
935 drm_crtc_handle_vblank(crtc); in tilcdc_crtc_irq()
945 drm_crtc_send_vblank_event(crtc, event); in tilcdc_crtc_irq()
1021 struct drm_crtc *crtc; in tilcdc_crtc_create() local
1037 crtc = &tilcdc_crtc->base; in tilcdc_crtc_create()
1050 ret = drm_crtc_init_with_planes(dev, crtc, in tilcdc_crtc_create()
1058 drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs); in tilcdc_crtc_create()
1061 crtc->port = of_graph_get_port_by_id(dev->dev->of_node, 0); in tilcdc_crtc_create()
1062 if (!crtc->port) { /* This should never happen */ in tilcdc_crtc_create()
1070 priv->crtc = crtc; in tilcdc_crtc_create()
1074 tilcdc_crtc_destroy(crtc); in tilcdc_crtc_create()