Commit e4811a27842b4fa0d321d49de1b9d0534d05e455

Authored by Linus Torvalds

Merge tag 'fbdev-fixes-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux

Pull fbdev fixes from Tomi Valkeinen:

 - Fix regression with Nokia N900 display

 - Fix crash on fbdev using freed __initdata logos

 - Fix fb_deferred_io_fsync() return value.

* tag 'fbdev-fixes-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux:
  OMAPDSS: SDI: fix output port_num
  video/fbdev: fix defio's fsync
  video/logo: prevent use of logos after they have been freed
  OMAPDSS: pll: NULL dereference in error handling
  OMAPDSS: HDMI: remove double initializer entries

Showing 5 changed files Side-by-side Diff

drivers/video/fbdev/core/fb_defio.c
... ... @@ -83,9 +83,10 @@
83 83 cancel_delayed_work_sync(&info->deferred_work);
84 84  
85 85 /* Run it immediately */
86   - err = schedule_delayed_work(&info->deferred_work, 0);
  86 + schedule_delayed_work(&info->deferred_work, 0);
87 87 mutex_unlock(&inode->i_mutex);
88   - return err;
  88 +
  89 + return 0;
89 90 }
90 91 EXPORT_SYMBOL_GPL(fb_deferred_io_fsync);
91 92  
drivers/video/fbdev/omap2/dss/hdmi_pll.c
... ... @@ -132,7 +132,6 @@
132 132 .mX_max = 127,
133 133 .fint_min = 500000,
134 134 .fint_max = 2500000,
135   - .clkdco_max = 1800000000,
136 135  
137 136 .clkdco_min = 500000000,
138 137 .clkdco_low = 1000000000,
... ... @@ -156,7 +155,6 @@
156 155 .mX_max = 127,
157 156 .fint_min = 620000,
158 157 .fint_max = 2500000,
159   - .clkdco_max = 1800000000,
160 158  
161 159 .clkdco_min = 750000000,
162 160 .clkdco_low = 1500000000,
drivers/video/fbdev/omap2/dss/pll.c
... ... @@ -97,7 +97,8 @@
97 97 return 0;
98 98  
99 99 err_enable:
100   - regulator_disable(pll->regulator);
  100 + if (pll->regulator)
  101 + regulator_disable(pll->regulator);
101 102 err_reg:
102 103 clk_disable_unprepare(pll->clkin);
103 104 return r;
drivers/video/fbdev/omap2/dss/sdi.c
... ... @@ -342,6 +342,8 @@
342 342 out->output_type = OMAP_DISPLAY_TYPE_SDI;
343 343 out->name = "sdi.0";
344 344 out->dispc_channel = OMAP_DSS_CHANNEL_LCD;
  345 + /* We have SDI only on OMAP3, where it's on port 1 */
  346 + out->port_num = 1;
345 347 out->ops.sdi = &sdi_ops;
346 348 out->owner = THIS_MODULE;
347 349  
drivers/video/logo/logo.c
... ... @@ -21,6 +21,21 @@
21 21 module_param(nologo, bool, 0);
22 22 MODULE_PARM_DESC(nologo, "Disables startup logo");
23 23  
  24 +/*
  25 + * Logos are located in the initdata, and will be freed in kernel_init.
  26 + * Use late_init to mark the logos as freed to prevent any further use.
  27 + */
  28 +
  29 +static bool logos_freed;
  30 +
  31 +static int __init fb_logo_late_init(void)
  32 +{
  33 + logos_freed = true;
  34 + return 0;
  35 +}
  36 +
  37 +late_initcall(fb_logo_late_init);
  38 +
24 39 /* logo's are marked __initdata. Use __init_refok to tell
25 40 * modpost that it is intended that this function uses data
26 41 * marked __initdata.
... ... @@ -29,7 +44,7 @@
29 44 {
30 45 const struct linux_logo *logo = NULL;
31 46  
32   - if (nologo)
  47 + if (nologo || logos_freed)
33 48 return NULL;
34 49  
35 50 if (depth >= 1) {