rk fb: define data format for fbdc
authorhjc <hjc@rock-chips.com>
Fri, 26 Dec 2014 10:57:32 +0000 (18:57 +0800)
committerhjc <hjc@rock-chips.com>
Mon, 9 Mar 2015 04:43:53 +0000 (12:43 +0800)
Signed-off-by: hjc <hjc@rock-chips.com>
Conflicts:
drivers/video/rockchip/lcdc/rk3368_lcdc.c
drivers/video/rockchip/rkfb_sysfs.c
include/linux/rk_fb.h

drivers/video/rockchip/rk_fb.c
drivers/video/rockchip/rkfb_sysfs.c [changed mode: 0755->0644]
include/linux/rk_fb.h

index c9ceab40b32554ae57add29203d71da2f4c0a419..ba1ce33b311ca100b7e4635d1c77ea5c5ca33579 100755 (executable)
@@ -148,12 +148,15 @@ int rk_fb_pixel_width(int data_format)
        case XBGR888:
        case ABGR888:
        case ARGB888:
+       case FBDC_ARGB_888:
+       case FBDC_RGBX_888:
                pixel_width = 4 * 8;
                break;
        case RGB888:
                pixel_width = 3 * 8;
                break;
        case RGB565:
+       case FBDC_RGB_565:
                pixel_width = 2 * 8;
                break;
        case YUV422:
@@ -216,6 +219,15 @@ static int rk_fb_data_fmt(int data_format, int bits_per_pixel)
                case HAL_PIXEL_FORMAT_YCrCb_420_SP_10:  /* yuv444 */
                        fb_data_fmt = YUV444_A;
                        break;
+               case HAL_PIXEL_FORMAT_FBDC_RGB565:      /* fbdc rgb565*/
+                       fb_data_fmt = FBDC_RGB_565;
+                       break;
+               case HAL_PIXEL_FORMAT_FBDC_U8U8U8U8:    /* fbdc argb888 */
+                       fb_data_fmt = FBDC_ARGB_888;
+                       break;
+               case HAL_PIXEL_FORMAT_FBDC_U8U8U8:      /* fbdc rgb888 */
+                       fb_data_fmt = FBDC_RGBX_888;
+                       break;
                default:
                        printk(KERN_WARNING "%s:un supported format:0x%x\n",
                               __func__, data_format);
@@ -534,6 +546,15 @@ char *get_format_string(enum data_format format, char *fmt)
        case ABGR888:
                strcpy(fmt, "ABGR888");
                break;
+       case FBDC_RGB_565:
+               strcpy(fmt, "FBDC_RGB_565");
+               break;
+       case FBDC_ARGB_888:
+               strcpy(fmt, "FBDC_ARGB_888");
+               break;
+       case FBDC_RGBX_888:
+               strcpy(fmt, "FBDC_RGBX_888");
+               break;
        default:
                strcpy(fmt, "invalid");
                break;
@@ -1892,19 +1913,22 @@ static int rk_fb_set_win_buffer(struct fb_info *info,
        }
 
        reg_win_data->mirror_en = win_par->mirror_en;
-       reg_win_data->reg_area_data[0].fbdc_en = win_par->area_par[0].fbdc_en;
-       reg_win_data->reg_area_data[0].fbdc_cor_en =
-               win_par->area_par[0].fbdc_cor_en;
-       reg_win_data->reg_area_data[0].fbdc_data_format =
-               win_par->area_par[0].fbdc_data_format;
        for (i = 0; i < reg_win_data->area_num; i++) {
                rk_fb_check_config_var(&win_par->area_par[i], screen);
 
                fb_data_fmt = rk_fb_data_fmt(win_par->area_par[i].data_format, 0);
                reg_win_data->reg_area_data[i].data_format = fb_data_fmt;
+               if (fb_data_fmt >= FBDC_RGB_565) {
+                       reg_win_data->reg_area_data[i].fbdc_en = 1;
+                       reg_win_data->reg_area_data[i].fbdc_cor_en = 1;
+               } else {
+                       reg_win_data->reg_area_data[i].fbdc_en = 0;
+                       reg_win_data->reg_area_data[i].fbdc_cor_en = 0;
+               }
                pixel_width = rk_fb_pixel_width(fb_data_fmt);
 
                ppixel_a |= ((fb_data_fmt == ARGB888) ||
+                            (fb_data_fmt == FBDC_ARGB_888) ||
                             (fb_data_fmt == ABGR888)) ? 1 : 0;
                /* visiable pos in panel */
                reg_win_data->reg_area_data[i].xpos = win_par->area_par[i].xpos;
@@ -2784,6 +2808,13 @@ static int rk_fb_set_par(struct fb_info *info)
        }
 
        fb_data_fmt = rk_fb_data_fmt(data_format, var->bits_per_pixel);
+       if (fb_data_fmt >= FBDC_RGB_565) {
+               win->area[0].fbdc_en = 1;
+               win->area[0].fbdc_cor_en = 1;
+       } else {
+               win->area[0].fbdc_en = 0;
+               win->area[0].fbdc_cor_en = 0;
+       }
        pixel_width = rk_fb_pixel_width(fb_data_fmt);
        vir_width_bit = pixel_width * xvir;
        /* pixel_width = byte_num * 8 */
@@ -2893,6 +2924,7 @@ static int rk_fb_set_par(struct fb_info *info)
        win->area_num = 1;
        win->alpha_mode = 4;    /* AB_SRC_OVER; */
        win->alpha_en = ((win->area[0].format == ARGB888) ||
+                        (win->area[0].format == FBDC_ARGB_888) ||
                         (win->area[0].format == ABGR888)) ? 1 : 0;
        win->g_alpha_val = 0;
 
old mode 100755 (executable)
new mode 100644 (file)
index bbac53f..ffbc0fc
@@ -66,6 +66,12 @@ static char *get_format_str(enum data_format format)
                return "XBGR888";
        case ABGR888:
                return "ABGR888";
+       case FBDC_RGB_565:
+               return "FBDC_RGB_565";
+       case FBDC_ARGB_888:
+               return "FBDC_ARGB_888";
+       case FBDC_RGBX_888:
+               return "FBDC_RGBX_888";
        default:
                return "invalid";        
        }
index 51608d8f03f194fa35c20c966adb3c8a9decbb5c..176bafe4b345c45f7825e73341731bf119a93d12 100755 (executable)
@@ -196,8 +196,9 @@ enum {
        HAL_PIXEL_FORMAT_YCrCb_420_SP_10        = 0x24, //YUV444_1obit
 
        HAL_PIXEL_FORMAT_YCrCb_444 = 0x25,      //yuv444
-       
-
+       HAL_PIXEL_FORMAT_FBDC_RGB565    = 0x26,
+       HAL_PIXEL_FORMAT_FBDC_U8U8U8U8  = 0x27, /*ARGB888*/
+       HAL_PIXEL_FORMAT_FBDC_U8U8U8    = 0x28, /*RGBP888*/
 };
 
 //display data format
@@ -215,6 +216,9 @@ enum data_format {
        YUV422_A,
        YUV444_A,
        YUV420_NV21,
+       FBDC_RGB_565 = 0x26,
+       FBDC_ARGB_888,
+       FBDC_RGBX_888,
 };
 
 enum