Skip to content

Commit

Permalink
fbdev: fix fbinfo flag dropped upstream
Browse files Browse the repository at this point in the history
This patch is a continuation of work performed in [d88ca7e]
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 <andrey.zhizhikin@leica-geosystems.com>
  • Loading branch information
zandrey committed Sep 10, 2020
1 parent 8fad04b commit bffbf24
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 20 deletions.
13 changes: 3 additions & 10 deletions drivers/media/platform/mxc/output/mxc_vout.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <linux/ipu-v3.h>
#include <linux/module.h>
#include <linux/mxcfb.h>
#include <linux/fbcon.h>
#include <linux/mxc_v4l2.h>
#include <linux/platform_device.h>
#include <linux/sched.h>
Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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? */
Expand All @@ -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();

}
Expand Down
6 changes: 3 additions & 3 deletions drivers/video/fbdev/mxc/mxc_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include <linux/irq.h>
#include <linux/io.h>
#include <linux/fb.h>
#include <linux/fbcon.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/delay.h>
Expand Down Expand Up @@ -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__);
Expand Down
9 changes: 5 additions & 4 deletions drivers/video/fbdev/mxc/mxc_ipuv3_fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <linux/dma-mapping.h>
#include <linux/errno.h>
#include <linux/fb.h>
#include <linux/fbcon.h>
#include <linux/fsl_devices.h>
#include <linux/init.h>
#include <linux/interrupt.h>
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
Expand Down
6 changes: 3 additions & 3 deletions drivers/video/fbdev/mxc/mxsfb_sii902x.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/fb.h>
#include <linux/fbcon.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/regulator/consumer.h>
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit bffbf24

Please sign in to comment.