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;
fb_id = 3;
else if (!strcmp(id, "fb4") && (dev_drv->lcdc_win_num > 4))
fb_id = 4;
- else
- dev_err(dev_drv->dev, "get_extend_fb_id info error\n");
return fb_id;
}
}
/* x y mirror ,jump line */
- if (screen->y_mirror == 1) {
+ if ((screen->y_mirror == 1) ||
+ (win->mirror_en == 1)) {
if (screen->interlace == 1) {
win->area[0].y_offset = yoffset * stride * 2 +
((win->area[0].yact - 1) * 2 + 1) * stride +
}
}
if (is_pic_yuv == 1) {
- if (screen->y_mirror == 1) {
+ if ((screen->y_mirror == 1) ||
+ (win->mirror_en == 1)) {
if (screen->interlace == 1) {
win->area[0].c_offset =
uv_y_off * uv_stride * 2 +
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 */
break;
}
- /* x y mirror ,jump line */
- if (screen->y_mirror == 1) {
- if (screen->interlace == 1) {
- win->area[0].y_offset = yoffset * stride * 2 +
- ((win->area[0].yact - 1) * 2 + 1) * stride +
- xoffset * pixel_width / 8;
- } else {
- win->area[0].y_offset = yoffset * stride +
- (win->area[0].yact - 1) * stride +
- xoffset * pixel_width / 8;
- }
- } else {
- if (screen->interlace == 1) {
- win->area[0].y_offset =
- yoffset * stride * 2 + xoffset * pixel_width / 8;
- } else {
- win->area[0].y_offset =
- yoffset * stride + xoffset * pixel_width / 8;
- }
- }
- if (is_pic_yuv == 1) {
- if (screen->y_mirror == 1) {
- if (screen->interlace == 1) {
- win->area[0].c_offset =
- uv_y_off * uv_stride * 2 +
- ((uv_y_act - 1) * 2 + 1) * uv_stride +
- uv_x_off * pixel_width / 8;
- } else {
- win->area[0].c_offset = uv_y_off * uv_stride +
- (uv_y_act - 1) * uv_stride +
- uv_x_off * pixel_width / 8;
- }
- } else {
- if (screen->interlace == 1) {
- win->area[0].c_offset =
- uv_y_off * uv_stride * 2 +
- uv_x_off * pixel_width / 8;
- } else {
- win->area[0].c_offset =
- uv_y_off * uv_stride +
- uv_x_off * pixel_width / 8;
- }
- }
- }
-
win->area[0].format = fb_data_fmt;
win->area[0].y_vir_stride = stride >> 2;
win->area[0].uv_vir_stride = uv_stride >> 2;
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;
.fb_set_par = rk_fb_set_par,
.fb_blank = rk_fb_blank,
.fb_ioctl = rk_fb_ioctl,
+ .fb_compat_ioctl = rk_fb_ioctl,
.fb_pan_display = rk_fb_pan_display,
.fb_read = rk_fb_read,
.fb_write = rk_fb_write,
if (enable == 2 /*&& dev_drv->enable*/)
return 0;
- if (rk_fb->disp_mode == ONE_DUAL) {
+ if ((rk_fb->disp_mode == ONE_DUAL) ||
+ (rk_fb->disp_mode == NO_DUAL)) {
+ if ((dev_drv->ops->backlight_close) &&
+ (rk_fb->disp_policy != DISPLAY_POLICY_BOX))
+ dev_drv->ops->backlight_close(dev_drv, 1);
if (dev_drv->ops->dsp_black)
dev_drv->ops->dsp_black(dev_drv, 1);
- if (dev_drv->ops->set_screen_scaler)
- dev_drv->ops->set_screen_scaler(dev_drv, dev_drv->screen0, 0);
+ if ((dev_drv->ops->set_screen_scaler) &&
+ (rk_fb->disp_policy != DISPLAY_POLICY_BOX))
+ dev_drv->ops->set_screen_scaler(dev_drv,
+ dev_drv->screen0, 0);
}
if (!enable) {
return 0;
/* if used one lcdc to dual disp, no need to close win */
- if (rk_fb->disp_mode == ONE_DUAL) {
+ if ((rk_fb->disp_mode == ONE_DUAL) ||
+ (rk_fb->disp_mode == NO_DUAL)) {
dev_drv->cur_screen = dev_drv->screen0;
dev_drv->ops->load_screen(dev_drv, 1);
if (dev_drv->ops->dsp_black)
dev_drv->ops->dsp_black(dev_drv, 0);
+ if ((dev_drv->ops->backlight_close) &&
+ (rk_fb->disp_policy != DISPLAY_POLICY_BOX))
+ dev_drv->ops->backlight_close(dev_drv, 0);
} else if (rk_fb->num_lcdc > 1) {
/* If there is more than one lcdc device, we disable
the layer which attached to this device */
dev_drv->uboot_logo = 0;
}
hdmi_switch_complete = 1;
- if (rk_fb->disp_mode == ONE_DUAL) {
- if (dev_drv->ops->set_screen_scaler)
+ if ((rk_fb->disp_mode == ONE_DUAL) || (rk_fb->disp_mode == NO_DUAL)) {
+ if ((dev_drv->ops->set_screen_scaler) &&
+ (rk_fb->disp_policy != DISPLAY_POLICY_BOX))
dev_drv->ops->set_screen_scaler(dev_drv, dev_drv->screen0, 1);
if (dev_drv->ops->dsp_black)
dev_drv->ops->dsp_black(dev_drv, 0);
+ if ((dev_drv->ops->backlight_close) &&
+ (rk_fb->disp_policy != DISPLAY_POLICY_BOX) &&
+ (rk_fb->disp_mode == ONE_DUAL))
+ dev_drv->ops->backlight_close(dev_drv, 0);
}
return 0;
}
vaddr = vmap(pages, nr_pages, VM_MAP,
pgprot_writecombine(PAGE_KERNEL));
if (!vaddr) {
- pr_err("failed to vmap phy addr %x\n",
- uboot_logo_base + uboot_logo_offset);
+ pr_err("failed to vmap phy addr 0x%lx\n",
+ (long)(uboot_logo_base +
+ uboot_logo_offset));
return -1;
}