-static int rk_fb_reg_effect(struct rk_lcdc_driver *dev_drv,
- struct rk_fb_reg_data *regs,
- int count)
-{
- struct rk_fb *rk_fb = platform_get_drvdata(fb_pdev);
- int i, j, wait_for_vsync = false;
- unsigned int dsp_addr[5][4];
- unsigned int area_support[5] = {1, 1, 1, 1, 1};
- int win_status = 0;
- u32 temp;
-
- memset(dsp_addr, 0, sizeof(dsp_addr));
- if (dev_drv->ops->get_dsp_addr)
- dev_drv->ops->get_dsp_addr(dev_drv, dsp_addr);
-
- if (dev_drv->ops->area_support_num)
- dev_drv->ops->area_support_num(dev_drv, area_support);
-
- for (i = 0; i < dev_drv->lcdc_win_num; i++) {
- if (rk_fb->disp_policy == DISPLAY_POLICY_BOX &&
- (!strcmp(dev_drv->win[i]->name, "hwc")))
- continue;
-
- for (j = 0;j < RK_WIN_MAX_AREA; j++) {
- if ((j > 0) && (area_support[i] == 1)) {
- continue;
- }
- temp = dsp_addr[i][j];
- win_status =
- dev_drv->ops->get_win_state(dev_drv, i, j);
- if (dev_drv->win[i]->area[j].state == 1) {
- u32 new_start =
- dev_drv->win[i]->area[j].smem_start +
- dev_drv->win[i]->area[j].y_offset;
- u32 reg_start = dsp_addr[i][j];
- if ((rk_fb->disp_policy ==
- DISPLAY_POLICY_BOX) &&
- (dev_drv->suspend_flag))
- continue;
- if (unlikely(new_start != reg_start)) {
- wait_for_vsync = true;
- dev_info(dev_drv->dev,
- "win%d:new_addr:0x%08x cur_addr:0x%08x--%d\n",
- i, new_start, reg_start, 101 - count);
- break;
- }
- } else if (dev_drv->win[i]->area[j].state == 0) {
- if (dev_drv->ops->get_win_state) {
- win_status =
- dev_drv->ops->get_win_state(dev_drv, i, j);
- if (win_status)
- wait_for_vsync = true;
- }
- } else {
- pr_err("!!!win[%d]state:%d,error!!!\n",
- i, dev_drv->win[i]->state);
- }
- printk("win[%d]area[%d]reg_start = 0x%x,state=%d\n",i,j,temp,win_status);
- }
- }
-
- return wait_for_vsync;
-}
-