for (i = 0; i < win->area_num; i++) {
ppixel_alpha |= ((win->area[i].format == ARGB888) ||
+ (win->area[i].format == FBDC_ARGB_888) ||
(win->area[i].format == ABGR888)) ? 1 : 0;
}
global_alpha = (win->g_alpha_val == 0) ? 0 : 1;
(fbdc_mb_yst * fbdc_mb_vir_width) + fbdc_mb_xst;
}
/*fbdc fmt maybe need to change*/
- win->area[0].fbdc_fmt_cfg = win->area[0].fbdc_data_format;
win->area[0].fbdc_dsp_width_ratio = fbdc_dsp_width_ratio;
win->area[0].fbdc_mb_vir_width = fbdc_mb_vir_width;
win->area[0].fbdc_mb_vir_height = fbdc_mb_vir_height;
if (win->state == 1) {
rk3368_lcdc_csc_mode(lcdc_dev, win);
- if (win->area[0].fbdc_en)
+ if (win->area[0].fbdc_en) {
rk3368_fbdc_reg_update(&lcdc_dev->driver, win_id);
+ } else {
+ mask = m_IFBDC_CTRL_FBDC_EN;
+ val = v_IFBDC_CTRL_FBDC_EN(0);
+ lcdc_msk_reg(lcdc_dev, IFBDC_CTRL, mask, val);
+ }
mask = m_WIN0_EN | m_WIN0_DATA_FMT | m_WIN0_FMT_10 |
m_WIN0_LB_MODE | m_WIN0_RB_SWAP | m_WIN0_X_MIRROR |
m_WIN0_Y_MIRROR | m_WIN0_CSC_MODE;
if (win->state == 1) {
rk3368_lcdc_csc_mode(lcdc_dev, win);
- if (win->area[0].fbdc_en)
+ if (win->area[0].fbdc_en) {
rk3368_fbdc_reg_update(&lcdc_dev->driver, win_id);
+ } else {
+ mask = m_IFBDC_CTRL_FBDC_EN;
+ val = v_IFBDC_CTRL_FBDC_EN(0);
+ lcdc_msk_reg(lcdc_dev, IFBDC_CTRL, mask, val);
+ }
mask = m_WIN2_EN | m_WIN2_CSC_MODE;
val = v_WIN2_EN(1) | v_WIN1_CSC_MODE(win->csc_mode);
if (likely(lcdc_dev->clk_on)) {
rk3368_lcdc_cal_scl_fac(win); /*fac,lb,gt2,gt4 */
switch (win->area[0].format) {
+ case FBDC_RGB_565:
+ fmt_cfg = 2;
+ swap_rb = 0;
+ win->fmt_10 = 0;
+ win->area[0].fbdc_fmt_cfg = 0x05;
+ break;
+ case FBDC_ARGB_888:
+ fmt_cfg = 0;
+ swap_rb = 0;
+ win->fmt_10 = 0;
+ win->area[0].fbdc_fmt_cfg = 0x0c;
+ break;
+ case FBDC_RGBX_888:
+ fmt_cfg = 0;
+ swap_rb = 0;
+ win->fmt_10 = 0;
+ win->area[0].fbdc_fmt_cfg = 0x3a;
+ break;
case ARGB888:
fmt_cfg = 0;
swap_rb = 0;
DBG(2, "lcdc[%d]:win[%d]>>\n>\n", lcdc_dev->id, win->id);
for (i = 0; i < win->area_num; i++) {
switch (win->area[i].format) {
+ case FBDC_RGB_565:
+ fmt_cfg = 2;
+ swap_rb = 0;
+ win->fmt_10 = 0;
+ win->area[0].fbdc_fmt_cfg = 0x05;
+ break;
+ case FBDC_ARGB_888:
+ fmt_cfg = 0;
+ swap_rb = 0;
+ win->fmt_10 = 0;
+ win->area[0].fbdc_fmt_cfg = 0x0c;
+ break;
+ case FBDC_RGBX_888:
+ fmt_cfg = 0;
+ swap_rb = 0;
+ win->fmt_10 = 0;
+ win->area[0].fbdc_fmt_cfg = 0x3a;
+ break;
case ARGB888:
fmt_cfg = 0;
swap_rb = 0;
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:
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);
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;
rk_fb_get_prmry_screen(&primary_screen);
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++) {
if (rk_fb->disp_policy == DISPLAY_POLICY_BOX)
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;
}
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 */
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;
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:
+ break;
}
return "invalid";
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
ABGR888,
YUV420_A = 10,
YUV422_A,
- YUV444_A,
+ YUV444_A,
+ FBDC_RGB_565 = 0x26,
+ FBDC_ARGB_888,
+ FBDC_RGBX_888,
};
enum