From 34ba62af49fb3b148fb98e09206234d2cf42d841 Mon Sep 17 00:00:00 2001 From: hjc Date: Fri, 5 Jun 2015 15:03:05 +0800 Subject: [PATCH] vop: rk3288: update dither config for 10bit output mode example for 10bit dual lvds output: timing0 { screen-type = ; out-face = ; color-mode = ; ... } Signed-off-by: hjc --- drivers/video/rockchip/lcdc/rk3288_lcdc.c | 57 +++++++++++++---------- include/dt-bindings/rkfb/rk_fb.h | 1 + include/linux/rk_fb.h | 2 +- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/drivers/video/rockchip/lcdc/rk3288_lcdc.c b/drivers/video/rockchip/lcdc/rk3288_lcdc.c index b6af8382737e..8d333957aa3c 100755 --- a/drivers/video/rockchip/lcdc/rk3288_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3288_lcdc.c @@ -1157,39 +1157,57 @@ static int rk3288_load_screen(struct rk_lcdc_driver *dev_drv, bool initscreen) case OUT_P565: face = OUT_P565; mask = m_DITHER_DOWN_EN | m_DITHER_DOWN_MODE | - m_DITHER_DOWN_SEL; + m_DITHER_DOWN_SEL | m_DITHER_UP_EN | + m_PRE_DITHER_DOWN_EN; val = v_DITHER_DOWN_EN(1) | v_DITHER_DOWN_MODE(0) | - v_DITHER_DOWN_SEL(1); + v_DITHER_DOWN_SEL(1) | v_DITHER_UP_EN(1) | + v_PRE_DITHER_DOWN_EN(1); lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); break; case OUT_P666: face = OUT_P666; mask = m_DITHER_DOWN_EN | m_DITHER_DOWN_MODE | - m_DITHER_DOWN_SEL; + m_DITHER_DOWN_SEL | m_DITHER_UP_EN | + m_PRE_DITHER_DOWN_EN; val = v_DITHER_DOWN_EN(1) | v_DITHER_DOWN_MODE(1) | - v_DITHER_DOWN_SEL(1); + v_DITHER_DOWN_SEL(1) | v_DITHER_UP_EN(1) | + v_PRE_DITHER_DOWN_EN(1); lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); break; case OUT_D888_P565: face = OUT_P888; mask = m_DITHER_DOWN_EN | m_DITHER_DOWN_MODE | - m_DITHER_DOWN_SEL; + m_DITHER_DOWN_SEL | m_DITHER_UP_EN | + m_PRE_DITHER_DOWN_EN; val = v_DITHER_DOWN_EN(1) | v_DITHER_DOWN_MODE(0) | - v_DITHER_DOWN_SEL(1); + v_DITHER_DOWN_SEL(1) | v_DITHER_UP_EN(1) | + v_PRE_DITHER_DOWN_EN(1); lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); break; case OUT_D888_P666: face = OUT_P888; mask = m_DITHER_DOWN_EN | m_DITHER_DOWN_MODE | - m_DITHER_DOWN_SEL; + m_DITHER_DOWN_SEL | m_DITHER_UP_EN | + m_PRE_DITHER_DOWN_EN; val = v_DITHER_DOWN_EN(1) | v_DITHER_DOWN_MODE(1) | - v_DITHER_DOWN_SEL(1); + v_DITHER_DOWN_SEL(1) | v_DITHER_UP_EN(1) | + v_PRE_DITHER_DOWN_EN(1); lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); break; case OUT_P888: face = OUT_P888; - mask = m_DITHER_DOWN_EN | m_DITHER_UP_EN; - val = v_DITHER_DOWN_EN(0) | v_DITHER_UP_EN(0); + mask = m_DITHER_DOWN_EN | m_DITHER_UP_EN | + m_PRE_DITHER_DOWN_EN; + val = v_DITHER_DOWN_EN(0) | v_DITHER_UP_EN(1) | + v_PRE_DITHER_DOWN_EN(1); + lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); + break; + case OUT_P101010: + face = OUT_P101010; + mask = m_DITHER_DOWN_EN | m_DITHER_UP_EN | + m_PRE_DITHER_DOWN_EN; + val = v_DITHER_DOWN_EN(0) | v_DITHER_UP_EN(1) | + v_PRE_DITHER_DOWN_EN(0); lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); break; default: @@ -1199,24 +1217,18 @@ static int rk3288_load_screen(struct rk_lcdc_driver *dev_drv, bool initscreen) switch(screen->type){ case SCREEN_RGB: case SCREEN_LVDS: - case SCREEN_DUAL_LVDS: - mask = m_RGB_OUT_EN; - val = v_RGB_OUT_EN(1); - v = 1 << (3+16); - v |= (lcdc_dev->id << 3); - break; + case SCREEN_DUAL_LVDS: case SCREEN_LVDS_10BIT: case SCREEN_DUAL_LVDS_10BIT: mask = m_RGB_OUT_EN; val = v_RGB_OUT_EN(1); v = 1 << (3+16); v |= (lcdc_dev->id << 3); - face = OUT_RGB_AAA; /*RGB AAA output*/ break; case SCREEN_HDMI: - face = OUT_RGB_AAA; + face = OUT_P101010;/*RGB 101010 output*/ mask = m_HDMI_OUT_EN; - val = v_HDMI_OUT_EN(1); + val = v_HDMI_OUT_EN(1); break; case SCREEN_MIPI: mask = m_MIPI_OUT_EN; @@ -1227,12 +1239,9 @@ static int rk3288_load_screen(struct rk_lcdc_driver *dev_drv, bool initscreen) val = v_MIPI_OUT_EN(1) | v_DOUB_CHANNEL_EN(1); break; case SCREEN_EDP: - face = OUT_RGB_AAA; /*RGB AAA output*/ - mask = m_DITHER_DOWN_EN | m_DITHER_UP_EN; - val = v_DITHER_DOWN_EN(0) | v_DITHER_UP_EN(0); - lcdc_msk_reg(lcdc_dev, DSP_CTRL1, mask, val); + face = OUT_P101010; /*RGB 101010 output*/ mask = m_EDP_OUT_EN; - val = v_EDP_OUT_EN(1); + val = v_EDP_OUT_EN(1); break; } lcdc_msk_reg(lcdc_dev, SYS_CTRL, mask, val); diff --git a/include/dt-bindings/rkfb/rk_fb.h b/include/dt-bindings/rkfb/rk_fb.h index e1daff3c1c69..a6d7e8983ae6 100755 --- a/include/dt-bindings/rkfb/rk_fb.h +++ b/include/dt-bindings/rkfb/rk_fb.h @@ -21,6 +21,7 @@ #define OUT_S888 8 #define OUT_S888DUMY 12 #define OUT_YUV_420 14 +#define OUT_P101010 15 #define OUT_P16BPP4 24 #define OUT_D888_P666 0x21 //18bit screen,connect to lcdc D2~D7, D10~D15, D18~D23 #define OUT_D888_P565 0x22 diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index 386a124b1889..a8dcfa03d802 100755 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -129,7 +129,7 @@ extern bool rk_fb_poll_wait_frame_complete(void); #define OUT_S888 8 #define OUT_S888DUMY 12 #define OUT_YUV_420 14 -#define OUT_RGB_AAA 15 +#define OUT_P101010 15 #define OUT_P16BPP4 24 #define OUT_D888_P666 0x21 //18bit screen,connect to lcdc D2~D7, D10~D15, D18~D23 #define OUT_D888_P565 0x22 -- 2.34.1