diff options
Diffstat (limited to 'drivers/gpu/drm/imx/imx-ldb.c')
| -rw-r--r-- | drivers/gpu/drm/imx/imx-ldb.c | 28 | 
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c index 1b86aac0b341..2d6dc94e1e64 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -163,22 +163,7 @@ static void imx_ldb_encoder_prepare(struct drm_encoder *encoder)  {  	struct imx_ldb_channel *imx_ldb_ch = enc_to_imx_ldb_ch(encoder);  	struct imx_ldb *ldb = imx_ldb_ch->ldb; -	struct drm_display_mode *mode = &encoder->crtc->hwmode;  	u32 pixel_fmt; -	unsigned long serial_clk; -	unsigned long di_clk = mode->clock * 1000; -	int mux = imx_drm_encoder_get_mux_id(imx_ldb_ch->child, encoder); - -	if (ldb->ldb_ctrl & LDB_SPLIT_MODE_EN) { -		/* dual channel LVDS mode */ -		serial_clk = 3500UL * mode->clock; -		imx_ldb_set_clock(ldb, mux, 0, serial_clk, di_clk); -		imx_ldb_set_clock(ldb, mux, 1, serial_clk, di_clk); -	} else { -		serial_clk = 7000UL * mode->clock; -		imx_ldb_set_clock(ldb, mux, imx_ldb_ch->chno, serial_clk, -				di_clk); -	}  	switch (imx_ldb_ch->chno) {  	case 0: @@ -247,6 +232,9 @@ static void imx_ldb_encoder_mode_set(struct drm_encoder *encoder,  	struct imx_ldb_channel *imx_ldb_ch = enc_to_imx_ldb_ch(encoder);  	struct imx_ldb *ldb = imx_ldb_ch->ldb;  	int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; +	unsigned long serial_clk; +	unsigned long di_clk = mode->clock * 1000; +	int mux = imx_drm_encoder_get_mux_id(imx_ldb_ch->child, encoder);  	if (mode->clock > 170000) {  		dev_warn(ldb->dev, @@ -257,6 +245,16 @@ static void imx_ldb_encoder_mode_set(struct drm_encoder *encoder,  			 "%s: mode exceeds 85 MHz pixel clock\n", __func__);  	} +	if (dual) { +		serial_clk = 3500UL * mode->clock; +		imx_ldb_set_clock(ldb, mux, 0, serial_clk, di_clk); +		imx_ldb_set_clock(ldb, mux, 1, serial_clk, di_clk); +	} else { +		serial_clk = 7000UL * mode->clock; +		imx_ldb_set_clock(ldb, mux, imx_ldb_ch->chno, serial_clk, +				  di_clk); +	} +  	/* FIXME - assumes straight connections DI0 --> CH0, DI1 --> CH1 */  	if (imx_ldb_ch == &ldb->channel[0]) {  		if (mode->flags & DRM_MODE_FLAG_NVSYNC)  | 
