Lines Matching refs:crtc
54 static void set_scanout(struct drm_crtc *crtc, int n) in set_scanout() argument
67 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in set_scanout()
68 struct drm_device *dev = crtc->dev; in set_scanout()
78 tilcdc_crtc->scanout[n] = crtc->primary->fb; in set_scanout()
84 static void update_scanout(struct drm_crtc *crtc) in update_scanout() argument
86 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in update_scanout()
87 struct drm_device *dev = crtc->dev; in update_scanout()
88 struct drm_framebuffer *fb = crtc->primary->fb; in update_scanout()
96 (crtc->y * fb->pitches[0]) + (crtc->x * bpp/8); in update_scanout()
99 (crtc->mode.vdisplay * fb->pitches[0]); in update_scanout()
109 set_scanout(crtc, 0); in update_scanout()
110 set_scanout(crtc, 1); in update_scanout()
114 static void start(struct drm_crtc *crtc) in start() argument
116 struct drm_device *dev = crtc->dev; in start()
131 static void stop(struct drm_crtc *crtc) in stop() argument
133 struct drm_device *dev = crtc->dev; in stop()
138 static void tilcdc_crtc_destroy(struct drm_crtc *crtc) in tilcdc_crtc_destroy() argument
140 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_destroy()
144 drm_crtc_cleanup(crtc); in tilcdc_crtc_destroy()
150 static int tilcdc_crtc_page_flip(struct drm_crtc *crtc, in tilcdc_crtc_page_flip() argument
155 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_page_flip()
156 struct drm_device *dev = crtc->dev; in tilcdc_crtc_page_flip()
163 crtc->primary->fb = fb; in tilcdc_crtc_page_flip()
165 update_scanout(crtc); in tilcdc_crtc_page_flip()
170 static void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode) in tilcdc_crtc_dpms() argument
172 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_dpms()
173 struct drm_device *dev = crtc->dev; in tilcdc_crtc_dpms()
189 start(crtc); in tilcdc_crtc_dpms()
192 stop(crtc); in tilcdc_crtc_dpms()
212 static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, in tilcdc_crtc_mode_fixup() argument
219 static void tilcdc_crtc_prepare(struct drm_crtc *crtc) in tilcdc_crtc_prepare() argument
221 tilcdc_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); in tilcdc_crtc_prepare()
224 static void tilcdc_crtc_commit(struct drm_crtc *crtc) in tilcdc_crtc_commit() argument
226 tilcdc_crtc_dpms(crtc, DRM_MODE_DPMS_ON); in tilcdc_crtc_commit()
229 static int tilcdc_crtc_mode_set(struct drm_crtc *crtc, in tilcdc_crtc_mode_set() argument
235 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_mode_set()
236 struct drm_device *dev = crtc->dev; in tilcdc_crtc_mode_set()
242 ret = tilcdc_crtc_mode_valid(crtc, mode); in tilcdc_crtc_mode_set()
343 drm_fb_get_bpp_depth(crtc->primary->fb->pixel_format, &depth, &bpp); in tilcdc_crtc_mode_set()
397 update_scanout(crtc); in tilcdc_crtc_mode_set()
398 tilcdc_crtc_update_clk(crtc); in tilcdc_crtc_mode_set()
405 static int tilcdc_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, in tilcdc_crtc_mode_set_base() argument
408 update_scanout(crtc); in tilcdc_crtc_mode_set_base()
427 int tilcdc_crtc_max_width(struct drm_crtc *crtc) in tilcdc_crtc_max_width() argument
429 struct drm_device *dev = crtc->dev; in tilcdc_crtc_max_width()
441 int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode) in tilcdc_crtc_mode_valid() argument
443 struct tilcdc_drm_private *priv = crtc->dev->dev_private; in tilcdc_crtc_mode_valid()
451 if (mode->hdisplay > tilcdc_crtc_max_width(crtc)) in tilcdc_crtc_mode_valid()
529 void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, in tilcdc_crtc_set_panel_info() argument
532 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_set_panel_info()
536 void tilcdc_crtc_update_clk(struct drm_crtc *crtc) in tilcdc_crtc_update_clk() argument
538 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_update_clk()
539 struct drm_device *dev = crtc->dev; in tilcdc_crtc_update_clk()
548 tilcdc_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); in tilcdc_crtc_update_clk()
551 ret = clk_set_rate(priv->disp_clk, crtc->mode.clock * 1000 * 2); in tilcdc_crtc_update_clk()
554 crtc->mode.clock); in tilcdc_crtc_update_clk()
559 div = lcd_clk / (crtc->mode.clock * 1000); in tilcdc_crtc_update_clk()
561 DBG("lcd_clk=%u, mode clock=%d, div=%u", lcd_clk, crtc->mode.clock, div); in tilcdc_crtc_update_clk()
574 tilcdc_crtc_dpms(crtc, DRM_MODE_DPMS_ON); in tilcdc_crtc_update_clk()
580 irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) in tilcdc_crtc_irq() argument
582 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_irq()
583 struct drm_device *dev = crtc->dev; in tilcdc_crtc_irq()
588 stop(crtc); in tilcdc_crtc_irq()
591 start(crtc); in tilcdc_crtc_irq()
602 set_scanout(crtc, 0); in tilcdc_crtc_irq()
605 set_scanout(crtc, 1); in tilcdc_crtc_irq()
631 void tilcdc_crtc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file) in tilcdc_crtc_cancel_page_flip() argument
633 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); in tilcdc_crtc_cancel_page_flip()
635 struct drm_device *dev = crtc->dev; in tilcdc_crtc_cancel_page_flip()
654 struct drm_crtc *crtc; in tilcdc_crtc_create() local
663 crtc = &tilcdc_crtc->base; in tilcdc_crtc_create()
671 ret = drm_crtc_init(dev, crtc, &tilcdc_crtc_funcs); in tilcdc_crtc_create()
675 drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs); in tilcdc_crtc_create()
677 return crtc; in tilcdc_crtc_create()
680 tilcdc_crtc_destroy(crtc); in tilcdc_crtc_create()