aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/imx-drm/imx-ldb.c
diff options
context:
space:
mode:
authorMarkus Niebel <Markus.Niebel@tqs.de>2013-06-18 09:23:58 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-06-18 11:22:58 -0700
commit000d73fc3b89b34d55e0cf9c39700aff405fb97e (patch)
tree9350e8f47eea350f741d02ca681d4b3260114746 /drivers/staging/imx-drm/imx-ldb.c
parentstaging: drm/imx: Add LDB support (diff)
downloadlinux-dev-000d73fc3b89b34d55e0cf9c39700aff405fb97e.tar.xz
linux-dev-000d73fc3b89b34d55e0cf9c39700aff405fb97e.zip
staging: imx_drm: imx_ldb: fix 18 bit format
Since 18 bit is supported as datawidth in device tree it should be supported in driver. Beside the LDB channel the IPU channel has also to be configured to use BGR666. Signed-off-by: Markus Niebel <Markus.Niebel@tqs.de> Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/imx-drm/imx-ldb.c')
-rw-r--r--drivers/staging/imx-drm/imx-ldb.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/staging/imx-drm/imx-ldb.c b/drivers/staging/imx-drm/imx-ldb.c
index 75607b39d08b..8af7f3b40bae 100644
--- a/drivers/staging/imx-drm/imx-ldb.c
+++ b/drivers/staging/imx-drm/imx-ldb.c
@@ -177,6 +177,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->mode;
+ 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->imx_drm_encoder,
@@ -192,8 +193,23 @@ static void imx_ldb_encoder_prepare(struct drm_encoder *encoder)
imx_ldb_set_clock(ldb, mux, imx_ldb_ch->chno, serial_clk, di_clk);
}
+ switch (imx_ldb_ch->chno) {
+ case 0:
+ pixel_fmt = (ldb->ldb_ctrl & LDB_DATA_WIDTH_CH0_24) ?
+ V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_BGR666;
+ break;
+ case 1:
+ pixel_fmt = (ldb->ldb_ctrl & LDB_DATA_WIDTH_CH1_24) ?
+ V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_BGR666;
+ break;
+ default:
+ dev_err(ldb->dev, "unable to config di%d panel format\n",
+ imx_ldb_ch->chno);
+ pixel_fmt = V4L2_PIX_FMT_RGB24;
+ }
+
imx_drm_crtc_panel_format(encoder->crtc, DRM_MODE_ENCODER_LVDS,
- V4L2_PIX_FMT_RGB24);
+ pixel_fmt);
}
static void imx_ldb_encoder_commit(struct drm_encoder *encoder)