rk32xx lvds: add support lvds 10bit mode
authorhjc <hjc@rock-chips.com>
Fri, 13 Mar 2015 11:37:26 +0000 (19:37 +0800)
committerhjc <hjc@rock-chips.com>
Fri, 13 Mar 2015 11:37:26 +0000 (19:37 +0800)
Signed-off-by: hjc <hjc@rock-chips.com>
drivers/video/rockchip/lcdc/rk3288_lcdc.c
drivers/video/rockchip/rk_fb.c
drivers/video/rockchip/transmitter/rk32_lvds.c
include/dt-bindings/rkfb/rk_fb.h

index 062cbc1195b29e5d09c8c53d11ecebcb2a98b7a8..053cca4f7dd9b8a1b93cc9be3db48e718e270d70 100755 (executable)
@@ -1190,6 +1190,14 @@ static int rk3288_load_screen(struct rk_lcdc_driver *dev_drv, bool initscreen)
                        v = 1 << (3+16);
                        v |= (lcdc_dev->id << 3);
                        break;
+               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;
                        mask = m_HDMI_OUT_EN;
index 46f43534f1e3d566794cadcae43b3cb7417f7eb1..6b9d8082d590d92a376158a2070889e69e463c18 100755 (executable)
@@ -99,6 +99,8 @@ int rk_fb_trsm_ops_register(struct rk_fb_trsm_ops *ops, int type)
        case SCREEN_RGB:
        case SCREEN_LVDS:
        case SCREEN_DUAL_LVDS:
+       case SCREEN_LVDS_10BIT:
+       case SCREEN_DUAL_LVDS_10BIT:
                trsm_lvds_ops = ops;
                break;
        case SCREEN_EDP:
@@ -123,6 +125,8 @@ struct rk_fb_trsm_ops *rk_fb_trsm_ops_get(int type)
        case SCREEN_RGB:
        case SCREEN_LVDS:
        case SCREEN_DUAL_LVDS:
+       case SCREEN_LVDS_10BIT:
+       case SCREEN_DUAL_LVDS_10BIT:
                ops = trsm_lvds_ops;
                break;
        case SCREEN_EDP:
index c90abdd49cae95e190827cbd98357f074aaa08e8..d0a8b7a78780a018bb9e222dd38fb174d8175850 100755 (executable)
@@ -73,9 +73,11 @@ static int rk32_lvds_en(void)
 
        /* set lvds format */
        val = screen->lvds_format;
-       if (screen->type == SCREEN_DUAL_LVDS)
+       if ((screen->type == SCREEN_DUAL_LVDS) ||
+           (screen->type == SCREEN_DUAL_LVDS_10BIT))
                val |= LVDS_DUAL | LVDS_CH0_EN | LVDS_CH1_EN;
-       else if(screen->type == SCREEN_LVDS)
+       else if((screen->type == SCREEN_LVDS) ||
+               (screen->type == SCREEN_LVDS_10BIT))
                val |= LVDS_CH0_EN;
        else if (screen->type == SCREEN_RGB)
                val |= LVDS_TTL_EN | LVDS_CH0_EN | LVDS_CH1_EN;
@@ -153,7 +155,9 @@ static int rk32_lvds_probe(struct platform_device *pdev)
        rk_fb_get_prmry_screen(&lvds->screen);
        if ((lvds->screen.type != SCREEN_RGB) && 
                (lvds->screen.type != SCREEN_LVDS) &&
-               (lvds->screen.type != SCREEN_DUAL_LVDS)) {
+               (lvds->screen.type != SCREEN_DUAL_LVDS) &&
+               (lvds->screen.type != SCREEN_LVDS_10BIT) &&
+               (lvds->screen.type != SCREEN_DUAL_LVDS_10BIT)) {
                dev_err(&pdev->dev, "screen is not lvds/rgb!\n");               
                writel_relaxed(0xffff8000, RK_GRF_VIRT + RK3288_GRF_SOC_CON7);
                return -EINVAL;
index 6cf49df8b0e4d644f220195cea513a99b706205c..9116f9ad2d4f9edee111effa06897069e273815b 100755 (executable)
 #define SCREEN_DUAL_MIPI   8
 #define SCREEN_EDP         9
 #define SCREEN_TVOUT_TEST  10
+#define SCREEN_LVDS_10BIT       11
+#define SCREEN_DUAL_LVDS_10BIT   12
 
 #define LVDS_8BIT_1     0
 #define LVDS_8BIT_2     1
 #define LVDS_8BIT_3     2
 #define LVDS_6BIT       3
+#define LVDS_10BIT_1    4
+#define LVDS_10BIT_2    5
 
 #define NO_MIRROR      0
 #define X_MIRROR       1
@@ -103,6 +107,49 @@ Y  TX11    G7              G1              GND             GND
        TX17    B7              B1              GND             GND
        TX23    RSVD            RSVD            RSVD            RSVD
 ----------------------------------------------------------------------
+
+ *             LVDS_10BIT_1    LVDS_10BIT_2
+----------------------------------------------------------------------
+       TX0     R0              R4
+       TX1     R1              R5
+       TX2     R2              R6
+Y      TX3     R3              R7
+0      TX4     R4              R8
+       TX6     R5              R9
+       TX7     G0              G4
+----------------------------------------------------------------------
+       TX8     G1              G5
+       TX9     G2              G6
+Y      TX12    G3              G7
+1      TX13    G4              G8
+       TX14    G5              G9
+       TX15    B0              B4
+       TX18    B1              B5
+----------------------------------------------------------------------
+       TX19    B2              B6
+       TX20    B3              B7
+       TX21    B4              B8
+Y      TX22    B5              B9
+2      TX24    HSYNC           HSYNC
+        TX25   VSYNC           VSYNC
+       TX26    ENABLE          ENABLE
+----------------------------------------------------------------------
+       TX27    R6              R2
+       TX5     R7              R3
+       TX10    G6              G2
+Y      TX11    G7              G3
+3      TX16    B6              B2
+       TX17    B7              B3
+       TX23    GND             GND
+----------------------------------------------------------------------
+       TX27    R8              R0
+       TX5     R9              R1
+       TX10    G8              G0
+Y      TX11    G9              G1
+4      TX16    B8              B0
+       TX17    B9              B1
+       TX23    GND             GND
+------------------------------------------------------------------------
 */
 
 #endif