drm/sun4i: tcon: Move out the tcon0 common setup
Some channel0 setup has to be done, no matter what the output interface is (RGB, CPU, LVDS). Move that code into a common function in order to avoid duplication. Reviewed-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Link: https://patchwork.freedesktop.org/patch/183100/
This commit is contained in:
parent
5b8f09100d
commit
ba19c53704
|
@ -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,
|
||||
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:
|
||||
|
|
Loading…
Reference in New Issue