From bffbf24c88a75f0e0979fbd6eca034e010230e57 Mon Sep 17 00:00:00 2001 From: Andrey Zhizhikin Date: Thu, 10 Sep 2020 21:43:36 +0000 Subject: [PATCH] fbdev: fix fbinfo flag dropped upstream This patch is a continuation of work performed in [d88ca7e1a27e] upstream and propagates the fix into non-upstreamed part of NXP source tree. Since FBINFO_MISC_USEREVENT is completely dropped, all previous calls to fb_set_var() which were setting and dropping this flag are now calling fbcon_update_vcs(), but only if fb_set_var() return 0. Signed-off-by: Andrey Zhizhikin --- drivers/media/platform/mxc/output/mxc_vout.c | 13 +++---------- drivers/video/fbdev/mxc/mxc_hdmi.c | 6 +++--- drivers/video/fbdev/mxc/mxc_ipuv3_fb.c | 9 +++++---- drivers/video/fbdev/mxc/mxsfb_sii902x.c | 6 +++--- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/drivers/media/platform/mxc/output/mxc_vout.c b/drivers/media/platform/mxc/output/mxc_vout.c index a54df6146fda46..2082c1afe72498 100644 --- a/drivers/media/platform/mxc/output/mxc_vout.c +++ b/drivers/media/platform/mxc/output/mxc_vout.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -1870,9 +1871,7 @@ static int config_disp_output(struct mxc_vout_output *vout) * This procedure applies to non-overlay fbs as well. */ console_lock(); - fbi->flags |= FBINFO_MISC_USEREVENT; fb_blank(fbi, FB_BLANK_POWERDOWN); - fbi->flags &= ~FBINFO_MISC_USEREVENT; console_unlock(); pos.x = 0; @@ -1888,9 +1887,9 @@ static int config_disp_output(struct mxc_vout_output *vout) var.yoffset = 0; var.activate |= FB_ACTIVATE_FORCE; console_lock(); - fbi->flags |= FBINFO_MISC_USEREVENT; ret = fb_set_var(fbi, &var); - fbi->flags &= ~FBINFO_MISC_USEREVENT; + if (!ret) + fbcon_update_vcs(fbi, var.activate & FB_ACTIVATE_ALL); console_unlock(); if (ret < 0) { v4l2_err(vout->vfd->v4l2_dev, @@ -1952,9 +1951,7 @@ static int config_disp_output(struct mxc_vout_output *vout) *pixel++ = color; } console_lock(); - fbi->flags |= FBINFO_MISC_USEREVENT; ret = fb_blank(fbi, FB_BLANK_UNBLANK); - fbi->flags &= ~FBINFO_MISC_USEREVENT; console_unlock(); vout->release = false; @@ -1992,9 +1989,7 @@ static void release_disp_output(struct mxc_vout_output *vout) if (vout->release) return; console_lock(); - fbi->flags |= FBINFO_MISC_USEREVENT; fb_blank(fbi, FB_BLANK_POWERDOWN); - fbi->flags &= ~FBINFO_MISC_USEREVENT; console_unlock(); /* restore pos to 0,0 avoid fb pan display hang? */ @@ -2005,9 +2000,7 @@ static void release_disp_output(struct mxc_vout_output *vout) if (get_ipu_channel(fbi) == MEM_BG_SYNC) { console_lock(); fbi->fix.smem_start = vout->disp_bufs[0]; - fbi->flags |= FBINFO_MISC_USEREVENT; fb_blank(fbi, FB_BLANK_UNBLANK); - fbi->flags &= ~FBINFO_MISC_USEREVENT; console_unlock(); } diff --git a/drivers/video/fbdev/mxc/mxc_hdmi.c b/drivers/video/fbdev/mxc/mxc_hdmi.c index 310c00d6fe5cff..262d4b73009429 100644 --- a/drivers/video/fbdev/mxc/mxc_hdmi.c +++ b/drivers/video/fbdev/mxc/mxc_hdmi.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -1779,9 +1780,8 @@ static void mxc_hdmi_notify_fb(struct mxc_hdmi *hdmi) */ hdmi->fbi->var.activate |= FB_ACTIVATE_FORCE; console_lock(); - hdmi->fbi->flags |= FBINFO_MISC_USEREVENT; - fb_set_var(hdmi->fbi, &hdmi->fbi->var); - hdmi->fbi->flags &= ~FBINFO_MISC_USEREVENT; + if (!fb_set_var(hdmi->fbi, &hdmi->fbi->var)) + fbcon_update_vcs(hdmi->fbi, hdmi->fbi->var.activate & FB_ACTIVATE_ALL); console_unlock(); dev_dbg(&hdmi->pdev->dev, "%s exit\n", __func__); diff --git a/drivers/video/fbdev/mxc/mxc_ipuv3_fb.c b/drivers/video/fbdev/mxc/mxc_ipuv3_fb.c index 7ab5e0f217ba28..5c32176bfe6ff4 100644 --- a/drivers/video/fbdev/mxc/mxc_ipuv3_fb.c +++ b/drivers/video/fbdev/mxc/mxc_ipuv3_fb.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -2021,9 +2022,9 @@ static int mxcfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) fmt.var.activate = (fbi->var.activate & ~FB_ACTIVATE_MASK) | FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE; console_lock(); - fbi->flags |= FBINFO_MISC_USEREVENT; retval = fb_set_var(fbi, &fmt.var); - fbi->flags &= ~FBINFO_MISC_USEREVENT; + if (!retval) + fbcon_update_vcs(fbi, fbi->var.activate & FB_ACTIVATE_ALL); console_unlock(); break; } @@ -3196,9 +3197,9 @@ static int mxcfb_register(struct fb_info *fbi) if (!mxcfbi->late_init) { fbi->var.activate |= FB_ACTIVATE_FORCE; console_lock(); - fbi->flags |= FBINFO_MISC_USEREVENT; ret = fb_set_var(fbi, &fbi->var); - fbi->flags &= ~FBINFO_MISC_USEREVENT; + if (!ret) + fbcon_update_vcs(fbi, fbi->var.activate & FB_ACTIVATE_ALL); console_unlock(); if (ret < 0) { dev_err(fbi->device, "Error fb_set_var ret:%d\n", ret); diff --git a/drivers/video/fbdev/mxc/mxsfb_sii902x.c b/drivers/video/fbdev/mxc/mxsfb_sii902x.c index f4be1a5ecb175d..052befe9194c79 100644 --- a/drivers/video/fbdev/mxc/mxsfb_sii902x.c +++ b/drivers/video/fbdev/mxc/mxsfb_sii902x.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -266,9 +267,8 @@ static void sii902x_cable_connected(void) sii902x.fbi->var.activate |= FB_ACTIVATE_FORCE; console_lock(); - sii902x.fbi->flags |= FBINFO_MISC_USEREVENT; - fb_set_var(sii902x.fbi, &sii902x.fbi->var); - sii902x.fbi->flags &= ~FBINFO_MISC_USEREVENT; + if (!fb_set_var(sii902x.fbi, &sii902x.fbi->var)) + fbcon_update_vcs(sii902x.fbi, sii902x.fbi->var.activate & FB_ACTIVATE_ALL); console_unlock(); } /* Power on sii902x */