From b9a63d51f6ea02abd7f55addddd8c5dfc3204217 Mon Sep 17 00:00:00 2001 From: hjc Date: Fri, 26 Dec 2014 18:57:32 +0800 Subject: [PATCH] rk fb: define data format for fbdc Signed-off-by: hjc 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 | 42 +++++++++++++++++++++++++---- drivers/video/rockchip/rkfb_sysfs.c | 6 +++++ include/linux/rk_fb.h | 8 ++++-- 3 files changed, 49 insertions(+), 7 deletions(-) mode change 100755 => 100644 drivers/video/rockchip/rkfb_sysfs.c diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index c9ceab40b325..ba1ce33b311c 100755 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -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; diff --git a/drivers/video/rockchip/rkfb_sysfs.c b/drivers/video/rockchip/rkfb_sysfs.c old mode 100755 new mode 100644 index bbac53ff86f0..ffbc0fc3df1c --- a/drivers/video/rockchip/rkfb_sysfs.c +++ b/drivers/video/rockchip/rkfb_sysfs.c @@ -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"; } diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index 51608d8f03f1..176bafe4b345 100755 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -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 -- 2.34.1