-/*
- * function: update extend win info acorrding to primary win info,
- the function is only used for dual display mode
- * @ext_dev_drv: the extend lcdc driver
- * @dev_drv: the primary lcdc driver
- * @ext_win: the lcdc win info of extend screen
- * @win: the lcdc win info of primary screen
- */
-static int rk_fb_update_ext_win(struct rk_lcdc_driver *ext_dev_drv,
- struct rk_lcdc_driver *dev_drv,
- struct rk_lcdc_win *ext_win,
- struct rk_lcdc_win *win)
-{
- struct rk_screen *screen = dev_drv->cur_screen;
- struct rk_screen *ext_screen = ext_dev_drv->cur_screen;
- int hdmi_xsize = ext_screen->xsize;
- int hdmi_ysize = ext_screen->ysize;
- int pixel_width, vir_width_bit, y_stride;
- bool is_yuv = false;
- int rotate_mode = 0;
-
- if (unlikely(!dev_drv) || unlikely(!ext_dev_drv) ||
- unlikely(!ext_win) || unlikely(!win))
- return -1;
-
- rotate_mode = ext_dev_drv->rotate_mode;
-
- if (ext_win->state == 0) {
- dev_info(ext_dev_drv->dev, "extend lcdc win is closed\n");
- return 0;
- }
-
- ext_win->area[0].state = win->area[0].state;
- ext_win->area_num = win->area_num;
- ext_win->format = win->format;
- ext_win->fmt_10 = win->fmt_10;
- ext_win->z_order = win->z_order;
- ext_win->alpha_en = win->alpha_en;
- ext_win->alpha_mode = win->alpha_mode;
- ext_win->g_alpha_val = win->g_alpha_val;
-
- switch (ext_win->format) {
- case YUV422:
- case YUV420:
- case YUV444:
- case YUV422_A:
- case YUV420_A:
- case YUV444_A:
- is_yuv = true;
- break;
- default:
- is_yuv = false;
- break;
- }
-
- if (rotate_mode == ROTATE_90 || rotate_mode == ROTATE_270) {
- ext_win->area[0].xact = win->area[0].yact;
- ext_win->area[0].yact = win->area[0].xact;
- ext_win->area[0].xvir = win->area[0].yact;
- ext_win->area[0].yvir = win->area[0].xact;
-
- pixel_width = rk_fb_pixel_width(ext_win->format);
- vir_width_bit = pixel_width * ext_win->area[0].xvir;
- y_stride = ALIGN_N_TIMES(vir_width_bit, 32) / 8;
- ext_win->area[0].y_vir_stride = y_stride >> 2;
- if (is_yuv)
- ext_win->area[0].uv_vir_stride = ext_win->area[0].y_vir_stride;
- else
- ext_win->area[0].uv_vir_stride = 0;
- } else {
- ext_win->area[0].xact = win->area[0].xact;
- ext_win->area[0].yact = win->area[0].yact;
- if (win->area[0].xvir == 0)
- ext_win->area[0].xvir = win->area[0].xact;
- else
- ext_win->area[0].xvir = win->area[0].xvir;
- if (win->area[0].yvir == 0)
- ext_win->area[0].yvir = win->area[0].yact;
- else
- ext_win->area[0].yvir = win->area[0].yvir;
- ext_win->area[0].y_vir_stride = win->area[0].y_vir_stride;
- if (is_yuv)
- ext_win->area[0].uv_vir_stride = win->area[0].uv_vir_stride;
- else
- ext_win->area[0].uv_vir_stride = 0;
- }
-
- if (win->area[0].xpos != 0 || win->area[0].ypos != 0) {
- if (rotate_mode == ROTATE_270) {
- int xbom_pos = 0, ybom_pos = 0;
- int xtop_pos = 0, ytop_pos = 0;
-
- ext_win->area[0].xsize =
- hdmi_xsize * win->area[0].ysize / screen->mode.yres;
- ext_win->area[0].ysize =
- hdmi_ysize * win->area[0].xsize / screen->mode.xres;
- xbom_pos =
- hdmi_xsize * win->area[0].ypos / screen->mode.yres;
- ybom_pos = hdmi_ysize * win->area[0].xpos / screen->mode.xres;
- xtop_pos = hdmi_xsize - ext_win->area[0].xsize - xbom_pos;
- ytop_pos = hdmi_ysize - ext_win->area[0].ysize - ybom_pos;
- ext_win->area[0].xpos =
- ((ext_screen->mode.xres - hdmi_xsize) >> 1) + xtop_pos;
- ext_win->area[0].ypos =
- ((ext_screen->mode.yres - hdmi_ysize) >> 1) + ytop_pos;
- } else if (rotate_mode == ROTATE_90) {
- ext_win->area[0].xsize =
- hdmi_xsize * win->area[0].ysize / screen->mode.yres;
- ext_win->area[0].ysize =
- hdmi_ysize * win->area[0].xsize / screen->mode.xres;
- ext_win->area[0].xpos =
- ((ext_screen->mode.xres - hdmi_xsize) >> 1) +
- hdmi_xsize * win->area[0].ypos / screen->mode.yres;
- ext_win->area[0].ypos =
- ((ext_screen->mode.yres - hdmi_ysize) >> 1) +
- hdmi_ysize * win->area[0].xpos / screen->mode.xres;
- } else {
- ext_win->area[0].xsize =
- hdmi_xsize * win->area[0].xsize / screen->mode.xres;
- ext_win->area[0].ysize =
- hdmi_ysize * win->area[0].ysize / screen->mode.yres;
- ext_win->area[0].xpos =
- ((ext_screen->mode.xres - hdmi_xsize) >> 1) +
- hdmi_xsize * win->area[0].xpos / screen->mode.xres;
- ext_win->area[0].ypos =
- ((ext_screen->mode.yres - hdmi_ysize) >> 1) +
- hdmi_ysize * win->area[0].ypos / screen->mode.yres;
- }
- } else {
- ext_win->area[0].xsize = hdmi_xsize;
- ext_win->area[0].ysize = hdmi_ysize;
- ext_win->area[0].xpos =
- (ext_screen->mode.xres - hdmi_xsize) >> 1;
- ext_win->area[0].ypos =
- (ext_screen->mode.yres - hdmi_ysize) >> 1;
- }
-
- return 0;
-}
-