157 lines
4.8 KiB
Diff
157 lines
4.8 KiB
Diff
Subject: [PATCH] decon fix
|
|
---
|
|
Index: drivers/video/fbdev/exynos/dpu_7885/decon_core.c
|
|
IDEA additional info:
|
|
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
|
<+>UTF-8
|
|
===================================================================
|
|
diff --git a/drivers/video/fbdev/exynos/dpu_7885/decon_core.c b/drivers/video/fbdev/exynos/dpu_7885/decon_core.c
|
|
--- a/drivers/video/fbdev/exynos/dpu_7885/decon_core.c (revision 5eeafe2bfcb93847b403fd92bd92f9d0a9f6341d)
|
|
+++ b/drivers/video/fbdev/exynos/dpu_7885/decon_core.c (date 1644158930000)
|
|
@@ -703,11 +703,15 @@
|
|
return ret;
|
|
}
|
|
|
|
+int decon_set_vsync_int(struct fb_info *info, bool active);
|
|
+extern int needs_pan;
|
|
+
|
|
static int decon_blank(int blank_mode, struct fb_info *info)
|
|
{
|
|
struct decon_win *win = info->par;
|
|
struct decon_device *decon = win->decon;
|
|
int ret = 0;
|
|
+ struct fb_info *fb_info;
|
|
|
|
decon_info("%s + blank_mode: %d, decon-%d %s mode: %dtype (0: DSI, 1: eDP, 2:DP, 3: WB)\n",
|
|
__func__, blank_mode,
|
|
@@ -741,6 +745,10 @@
|
|
goto blank_exit;
|
|
}
|
|
atomic_set(&decon->ffu_flag, 2);
|
|
+
|
|
+ needs_pan = true;
|
|
+ fb_info = decon->win[decon->dt.dft_win]->fbinfo;
|
|
+ decon_set_vsync_int(fb_info, true);
|
|
break;
|
|
case FB_BLANK_VSYNC_SUSPEND:
|
|
case FB_BLANK_HSYNC_SUSPEND:
|
|
@@ -2152,18 +2160,6 @@
|
|
return ret;
|
|
}
|
|
|
|
-static ssize_t decon_fb_read(struct fb_info *info, char __user *buf,
|
|
- size_t count, loff_t *ppos)
|
|
-{
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static ssize_t decon_fb_write(struct fb_info *info, const char __user *buf,
|
|
- size_t count, loff_t *ppos)
|
|
-{
|
|
- return 0;
|
|
-}
|
|
-
|
|
int decon_release(struct fb_info *info, int user)
|
|
{
|
|
struct decon_win *win = info->par;
|
|
@@ -2217,12 +2213,12 @@
|
|
.fb_blank = decon_blank,
|
|
.fb_setcolreg = decon_setcolreg,
|
|
.fb_fillrect = cfb_fillrect,
|
|
+ .fb_copyarea = cfb_copyarea,
|
|
+ .fb_imageblit = cfb_imageblit,
|
|
#ifdef CONFIG_COMPAT
|
|
.fb_compat_ioctl = decon_compat_ioctl,
|
|
#endif
|
|
.fb_ioctl = decon_ioctl,
|
|
- .fb_read = decon_fb_read,
|
|
- .fb_write = decon_fb_write,
|
|
.fb_pan_display = decon_pan_display,
|
|
.fb_mmap = decon_mmap,
|
|
.fb_release = decon_release,
|
|
@@ -2532,6 +2528,7 @@
|
|
}
|
|
|
|
fbinfo->fix.type = FB_TYPE_PACKED_PIXELS;
|
|
+ fbinfo->fix.visual = FB_VISUAL_TRUECOLOR,
|
|
fbinfo->fix.accel = FB_ACCEL_NONE;
|
|
fbinfo->var.activate = FB_ACTIVATE_NOW;
|
|
fbinfo->var.vmode = FB_VMODE_NONINTERLACED;
|
|
@@ -2846,7 +2843,7 @@
|
|
decon->bts.ops->bts_update_qos_disp(decon, decon->dt.disp_freq);
|
|
|
|
decon_to_init_param(decon, &p);
|
|
-#if !defined(BRINGUP_DECON_BIST)
|
|
+#if 0// !defined(BRINGUP_DECON_BIST)
|
|
if (decon_reg_init(decon->id, decon->dt.out_idx[0], &p) < 0)
|
|
goto decon_init_done;
|
|
#else
|
|
@@ -2879,7 +2876,7 @@
|
|
set_bit(decon->dt.dft_idma, &decon->prev_used_dpp);
|
|
memset(&config, 0, sizeof(struct decon_win_config));
|
|
config.dpp_parm.addr[0] = fbinfo->fix.smem_start;
|
|
- config.format = DECON_PIXEL_FORMAT_BGRA_8888;
|
|
+ config.format = DECON_PIXEL_FORMAT_ARGB_8888;
|
|
config.src.w = fbinfo->var.xres;
|
|
config.src.h = fbinfo->var.yres;
|
|
config.src.f_w = fbinfo->var.xres;
|
|
@@ -2922,10 +2919,11 @@
|
|
call_panel_ops(dsim, displayon, dsim);
|
|
decon_reg_start(decon->id, &psr);
|
|
decon_wait_for_vsync(decon, VSYNC_TIMEOUT_MSEC);
|
|
+ decon_set_vsync_int(fbinfo, true);
|
|
if (decon_reg_wait_update_done_and_mask(decon->id, &psr,
|
|
SHADOW_UPDATE_TIMEOUT) < 0)
|
|
decon_err("%s: wait_for_update_timeout\n", __func__);
|
|
-#if !defined(BRINGUP_DECON_BIST)
|
|
+#if 0 //!defined(BRINGUP_DECON_BIST)
|
|
decon_init_done:
|
|
#endif
|
|
decon->state = DECON_STATE_INIT;
|
|
Index: drivers/video/fbdev/exynos/dpu_7885/decon_dsi.c
|
|
IDEA additional info:
|
|
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
|
<+>UTF-8
|
|
===================================================================
|
|
diff --git a/drivers/video/fbdev/exynos/dpu_7885/decon_dsi.c b/drivers/video/fbdev/exynos/dpu_7885/decon_dsi.c
|
|
--- a/drivers/video/fbdev/exynos/dpu_7885/decon_dsi.c (revision 5eeafe2bfcb93847b403fd92bd92f9d0a9f6341d)
|
|
+++ b/drivers/video/fbdev/exynos/dpu_7885/decon_dsi.c (date 1644158930000)
|
|
@@ -353,6 +353,8 @@
|
|
}
|
|
static DEVICE_ATTR(vsync, S_IRUGO, decon_show_vsync, NULL);
|
|
|
|
+int needs_pan = false;
|
|
+
|
|
static int decon_vsync_thread(void *data)
|
|
{
|
|
struct decon_device *decon = data;
|
|
@@ -363,6 +365,20 @@
|
|
!ktime_equal(timestamp, decon->vsync.timestamp) &&
|
|
decon->vsync.active);
|
|
|
|
+ struct decon_mode_info psr;
|
|
+
|
|
+ if (needs_pan) {
|
|
+ //Verrrry hacky and bad... plox gib better solution
|
|
+ struct fb_info *fb_info = decon->win[decon->dt.dft_win]->fbinfo;
|
|
+ struct fb_var_screeninfo *var = &fb_info->var;
|
|
+ usleep_range(200000, 201000);
|
|
+ decon_pan_display(var, fb_info);
|
|
+ needs_pan = false;
|
|
+ }
|
|
+
|
|
+ decon_to_psr_info(decon, &psr);
|
|
+ decon_reg_start(decon->id, &psr);
|
|
+
|
|
if (!ret)
|
|
sysfs_notify(&decon->dev->kobj, NULL, "vsync");
|
|
}
|
|
@@ -692,7 +708,7 @@
|
|
break;
|
|
case 24:
|
|
case 32:
|
|
- config.format = DECON_PIXEL_FORMAT_ABGR_8888;
|
|
+ config.format = DECON_PIXEL_FORMAT_ARGB_8888;
|
|
shift = 4;
|
|
break;
|
|
default:
|