Commit e4811a27 authored by Linus Torvalds's avatar 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
parents bac22980 a32442d4
...@@ -83,9 +83,10 @@ int fb_deferred_io_fsync(struct file *file, loff_t start, loff_t end, int datasy ...@@ -83,9 +83,10 @@ int fb_deferred_io_fsync(struct file *file, loff_t start, loff_t end, int datasy
cancel_delayed_work_sync(&info->deferred_work); cancel_delayed_work_sync(&info->deferred_work);
/* Run it immediately */ /* Run it immediately */
err = schedule_delayed_work(&info->deferred_work, 0); schedule_delayed_work(&info->deferred_work, 0);
mutex_unlock(&inode->i_mutex); mutex_unlock(&inode->i_mutex);
return err;
return 0;
} }
EXPORT_SYMBOL_GPL(fb_deferred_io_fsync); EXPORT_SYMBOL_GPL(fb_deferred_io_fsync);
......
...@@ -132,7 +132,6 @@ static const struct dss_pll_hw dss_omap4_hdmi_pll_hw = { ...@@ -132,7 +132,6 @@ static const struct dss_pll_hw dss_omap4_hdmi_pll_hw = {
.mX_max = 127, .mX_max = 127,
.fint_min = 500000, .fint_min = 500000,
.fint_max = 2500000, .fint_max = 2500000,
.clkdco_max = 1800000000,
.clkdco_min = 500000000, .clkdco_min = 500000000,
.clkdco_low = 1000000000, .clkdco_low = 1000000000,
...@@ -156,7 +155,6 @@ static const struct dss_pll_hw dss_omap5_hdmi_pll_hw = { ...@@ -156,7 +155,6 @@ static const struct dss_pll_hw dss_omap5_hdmi_pll_hw = {
.mX_max = 127, .mX_max = 127,
.fint_min = 620000, .fint_min = 620000,
.fint_max = 2500000, .fint_max = 2500000,
.clkdco_max = 1800000000,
.clkdco_min = 750000000, .clkdco_min = 750000000,
.clkdco_low = 1500000000, .clkdco_low = 1500000000,
......
...@@ -97,7 +97,8 @@ int dss_pll_enable(struct dss_pll *pll) ...@@ -97,7 +97,8 @@ int dss_pll_enable(struct dss_pll *pll)
return 0; return 0;
err_enable: err_enable:
regulator_disable(pll->regulator); if (pll->regulator)
regulator_disable(pll->regulator);
err_reg: err_reg:
clk_disable_unprepare(pll->clkin); clk_disable_unprepare(pll->clkin);
return r; return r;
......
...@@ -342,6 +342,8 @@ static void sdi_init_output(struct platform_device *pdev) ...@@ -342,6 +342,8 @@ static void sdi_init_output(struct platform_device *pdev)
out->output_type = OMAP_DISPLAY_TYPE_SDI; out->output_type = OMAP_DISPLAY_TYPE_SDI;
out->name = "sdi.0"; out->name = "sdi.0";
out->dispc_channel = OMAP_DSS_CHANNEL_LCD; out->dispc_channel = OMAP_DSS_CHANNEL_LCD;
/* We have SDI only on OMAP3, where it's on port 1 */
out->port_num = 1;
out->ops.sdi = &sdi_ops; out->ops.sdi = &sdi_ops;
out->owner = THIS_MODULE; out->owner = THIS_MODULE;
......
...@@ -21,6 +21,21 @@ static bool nologo; ...@@ -21,6 +21,21 @@ static bool nologo;
module_param(nologo, bool, 0); module_param(nologo, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo"); MODULE_PARM_DESC(nologo, "Disables startup logo");
/*
* Logos are located in the initdata, and will be freed in kernel_init.
* Use late_init to mark the logos as freed to prevent any further use.
*/
static bool logos_freed;
static int __init fb_logo_late_init(void)
{
logos_freed = true;
return 0;
}
late_initcall(fb_logo_late_init);
/* logo's are marked __initdata. Use __init_refok to tell /* logo's are marked __initdata. Use __init_refok to tell
* modpost that it is intended that this function uses data * modpost that it is intended that this function uses data
* marked __initdata. * marked __initdata.
...@@ -29,7 +44,7 @@ const struct linux_logo * __init_refok fb_find_logo(int depth) ...@@ -29,7 +44,7 @@ const struct linux_logo * __init_refok fb_find_logo(int depth)
{ {
const struct linux_logo *logo = NULL; const struct linux_logo *logo = NULL;
if (nologo) if (nologo || logos_freed)
return NULL; return NULL;
if (depth >= 1) { if (depth >= 1) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment