Lines Matching full: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()
179 static void reset(struct drm_crtc *crtc) in reset() argument
181 struct drm_device *dev = crtc->dev; in reset()
204 static void tilcdc_crtc_set_clk(struct drm_crtc *crtc) in tilcdc_crtc_set_clk() argument
206 struct drm_device *dev = crtc->dev; in tilcdc_crtc_set_clk()
208 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_clk()
216 req_rate = crtc->mode.clock * 1000; in tilcdc_crtc_set_clk()
256 tilcdc_crtc->lcd_fck_rate, crtc->mode.clock, clkdiv); in tilcdc_crtc_set_clk()
274 static void tilcdc_crtc_set_mode(struct drm_crtc *crtc) in tilcdc_crtc_set_mode() argument
276 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_mode()
277 struct drm_device *dev = crtc->dev; in tilcdc_crtc_set_mode()
281 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in tilcdc_crtc_set_mode()
282 struct drm_framebuffer *fb = crtc->primary->state->fb; in tilcdc_crtc_set_mode()
432 tilcdc_crtc_set_clk(crtc); in tilcdc_crtc_set_mode()
434 tilcdc_crtc_load_palette(crtc); in tilcdc_crtc_set_mode()
436 set_scanout(crtc, fb); in tilcdc_crtc_set_mode()
438 crtc->hwmode = crtc->state->adjusted_mode; in tilcdc_crtc_set_mode()
441 tilcdc_mode_hvtotal(&crtc->hwmode); in tilcdc_crtc_set_mode()
444 static void tilcdc_crtc_enable(struct drm_crtc *crtc) in tilcdc_crtc_enable() argument
446 struct drm_device *dev = crtc->dev; in tilcdc_crtc_enable()
447 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_enable()
458 reset(crtc); in tilcdc_crtc_enable()
460 tilcdc_crtc_set_mode(crtc); in tilcdc_crtc_enable()
480 drm_crtc_vblank_on(crtc); in tilcdc_crtc_enable()
486 static void tilcdc_crtc_atomic_enable(struct drm_crtc *crtc, in tilcdc_crtc_atomic_enable() argument
489 tilcdc_crtc_enable(crtc); in tilcdc_crtc_atomic_enable()
492 static void tilcdc_crtc_off(struct drm_crtc *crtc, bool shutdown) in tilcdc_crtc_off() argument
494 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_off()
495 struct drm_device *dev = crtc->dev; in tilcdc_crtc_off()
519 drm_crtc_vblank_off(crtc); in tilcdc_crtc_off()
521 spin_lock_irq(&crtc->dev->event_lock); in tilcdc_crtc_off()
523 if (crtc->state->event) { in tilcdc_crtc_off()
524 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tilcdc_crtc_off()
525 crtc->state->event = NULL; in tilcdc_crtc_off()
528 spin_unlock_irq(&crtc->dev->event_lock); in tilcdc_crtc_off()
538 static void tilcdc_crtc_disable(struct drm_crtc *crtc) in tilcdc_crtc_disable() argument
540 tilcdc_crtc_off(crtc, false); in tilcdc_crtc_disable()
543 static void tilcdc_crtc_atomic_disable(struct drm_crtc *crtc, in tilcdc_crtc_atomic_disable() argument
546 tilcdc_crtc_disable(crtc); in tilcdc_crtc_atomic_disable()
549 static void tilcdc_crtc_atomic_flush(struct drm_crtc *crtc, in tilcdc_crtc_atomic_flush() argument
552 if (!crtc->state->event) in tilcdc_crtc_atomic_flush()
555 spin_lock_irq(&crtc->dev->event_lock); in tilcdc_crtc_atomic_flush()
556 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tilcdc_crtc_atomic_flush()
557 crtc->state->event = NULL; in tilcdc_crtc_atomic_flush()
558 spin_unlock_irq(&crtc->dev->event_lock); in tilcdc_crtc_atomic_flush()
561 void tilcdc_crtc_shutdown(struct drm_crtc *crtc) in tilcdc_crtc_shutdown() argument
563 tilcdc_crtc_off(crtc, true); in tilcdc_crtc_shutdown()
566 static bool tilcdc_crtc_is_on(struct drm_crtc *crtc) in tilcdc_crtc_is_on() argument
568 return crtc->state && crtc->state->enable && crtc->state->active; in tilcdc_crtc_is_on()
575 struct drm_crtc *crtc = &tilcdc_crtc->base; in tilcdc_crtc_recover_work() local
577 dev_info(crtc->dev->dev, "%s: Reset CRTC", __func__); in tilcdc_crtc_recover_work()
579 drm_modeset_lock(&crtc->mutex, NULL); in tilcdc_crtc_recover_work()
581 if (!tilcdc_crtc_is_on(crtc)) in tilcdc_crtc_recover_work()
584 tilcdc_crtc_disable(crtc); in tilcdc_crtc_recover_work()
585 tilcdc_crtc_enable(crtc); in tilcdc_crtc_recover_work()
587 drm_modeset_unlock(&crtc->mutex); in tilcdc_crtc_recover_work()
590 static void tilcdc_crtc_destroy(struct drm_crtc *crtc) in tilcdc_crtc_destroy() argument
592 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_destroy()
594 tilcdc_crtc_shutdown(crtc); in tilcdc_crtc_destroy()
598 of_node_put(crtc->port); in tilcdc_crtc_destroy()
599 drm_crtc_cleanup(crtc); in tilcdc_crtc_destroy()
602 int tilcdc_crtc_update_fb(struct drm_crtc *crtc, in tilcdc_crtc_update_fb() argument
606 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_fb()
607 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_fb()
632 set_scanout(crtc, fb); in tilcdc_crtc_update_fb()
642 static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, in tilcdc_crtc_mode_fixup() argument
646 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_mode_fixup()
671 static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, in tilcdc_crtc_atomic_check() argument
678 if (state->state->planes[0].ptr != crtc->primary || in tilcdc_crtc_atomic_check()
680 state->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
693 static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc) in tilcdc_crtc_disable_vblank() argument
697 static void tilcdc_crtc_reset(struct drm_crtc *crtc) in tilcdc_crtc_reset() argument
699 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_reset()
700 struct drm_device *dev = crtc->dev; in tilcdc_crtc_reset()
703 drm_atomic_helper_crtc_reset(crtc); in tilcdc_crtc_reset()
736 int tilcdc_crtc_max_width(struct drm_crtc *crtc) in tilcdc_crtc_max_width() argument
738 struct drm_device *dev = crtc->dev; in tilcdc_crtc_max_width()
751 tilcdc_crtc_mode_valid(struct drm_crtc *crtc, in tilcdc_crtc_mode_valid() argument
754 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_mode_valid()
762 if (mode->hdisplay > tilcdc_crtc_max_width(crtc)) in tilcdc_crtc_mode_valid()
849 void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, in tilcdc_crtc_set_panel_info() argument
852 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_panel_info()
856 void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc, in tilcdc_crtc_set_simulate_vesa_sync() argument
859 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_simulate_vesa_sync()
864 void tilcdc_crtc_update_clk(struct drm_crtc *crtc) in tilcdc_crtc_update_clk() argument
866 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_clk()
868 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_clk()
870 drm_modeset_lock(&crtc->mutex, NULL); in tilcdc_crtc_update_clk()
872 if (tilcdc_crtc_is_on(crtc)) { in tilcdc_crtc_update_clk()
874 tilcdc_crtc_disable(crtc); in tilcdc_crtc_update_clk()
876 tilcdc_crtc_set_clk(crtc); in tilcdc_crtc_update_clk()
878 tilcdc_crtc_enable(crtc); in tilcdc_crtc_update_clk()
882 drm_modeset_unlock(&crtc->mutex); in tilcdc_crtc_update_clk()
887 irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) in tilcdc_crtc_irq() argument
889 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_irq()
890 struct drm_device *dev = crtc->dev; in tilcdc_crtc_irq()
909 set_scanout(crtc, tilcdc_crtc->next_fb); in tilcdc_crtc_irq()
916 drm_crtc_handle_vblank(crtc); in tilcdc_crtc_irq()
926 drm_crtc_send_vblank_event(crtc, event); in tilcdc_crtc_irq()
1002 struct drm_crtc *crtc; in tilcdc_crtc_create() local
1018 crtc = &tilcdc_crtc->base; in tilcdc_crtc_create()
1031 ret = drm_crtc_init_with_planes(dev, crtc, in tilcdc_crtc_create()
1035 "tilcdc crtc"); in tilcdc_crtc_create()
1039 drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs); in tilcdc_crtc_create()
1042 crtc->port = of_graph_get_port_by_id(dev->dev->of_node, 0); in tilcdc_crtc_create()
1043 if (!crtc->port) { /* This should never happen */ in tilcdc_crtc_create()
1051 priv->crtc = crtc; in tilcdc_crtc_create()
1055 tilcdc_crtc_destroy(crtc); in tilcdc_crtc_create()