|
@@ -158,15 +158,26 @@ static int sun4i_tcon_get_clk_delay(const struct drm_display_mode *mode,
|
|
|
return delay;
|
|
|
}
|
|
|
|
|
|
-static void sun4i_tcon0_mode_set(struct sun4i_tcon *tcon,
|
|
|
- const struct drm_display_mode *mode)
|
|
|
+static void sun4i_tcon0_mode_set_common(struct sun4i_tcon *tcon,
|
|
|
+ const struct drm_display_mode *mode)
|
|
|
+{
|
|
|
+ /* Configure the dot clock */
|
|
|
+ clk_set_rate(tcon->dclk, mode->crtc_clock * 1000);
|
|
|
+
|
|
|
+ /* Set the resolution */
|
|
|
+ regmap_write(tcon->regs, SUN4I_TCON0_BASIC0_REG,
|
|
|
+ SUN4I_TCON0_BASIC0_X(mode->crtc_hdisplay) |
|
|
|
+ SUN4I_TCON0_BASIC0_Y(mode->crtc_vdisplay));
|
|
|
+}
|
|
|
+
|
|
|
+static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
|
|
|
+ const struct drm_display_mode *mode)
|
|
|
{
|
|
|
unsigned int bp, hsync, vsync;
|
|
|
u8 clk_delay;
|
|
|
u32 val = 0;
|
|
|
|
|
|
- /* Configure the dot clock */
|
|
|
- clk_set_rate(tcon->dclk, mode->crtc_clock * 1000);
|
|
|
+ sun4i_tcon0_mode_set_common(tcon, mode);
|
|
|
|
|
|
/* Adjust clock delay */
|
|
|
clk_delay = sun4i_tcon_get_clk_delay(mode, 0);
|
|
@@ -174,11 +185,6 @@ static void sun4i_tcon0_mode_set(struct sun4i_tcon *tcon,
|
|
|
SUN4I_TCON0_CTL_CLK_DELAY_MASK,
|
|
|
SUN4I_TCON0_CTL_CLK_DELAY(clk_delay));
|
|
|
|
|
|
- /* Set the resolution */
|
|
|
- regmap_write(tcon->regs, SUN4I_TCON0_BASIC0_REG,
|
|
|
- SUN4I_TCON0_BASIC0_X(mode->crtc_hdisplay) |
|
|
|
- SUN4I_TCON0_BASIC0_Y(mode->crtc_vdisplay));
|
|
|
-
|
|
|
/*
|
|
|
* This is called a backporch in the register documentation,
|
|
|
* but it really is the back porch + hsync
|
|
@@ -329,7 +335,7 @@ void sun4i_tcon_mode_set(struct sun4i_tcon *tcon,
|
|
|
{
|
|
|
switch (encoder->encoder_type) {
|
|
|
case DRM_MODE_ENCODER_NONE:
|
|
|
- sun4i_tcon0_mode_set(tcon, mode);
|
|
|
+ sun4i_tcon0_mode_set_rgb(tcon, mode);
|
|
|
sun4i_tcon_set_mux(tcon, 0, encoder);
|
|
|
break;
|
|
|
case DRM_MODE_ENCODER_TVDAC:
|