diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-30 20:04:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-30 20:04:56 -0500 |
commit | e4811a27842b4fa0d321d49de1b9d0534d05e455 (patch) | |
tree | 8b6bc171168d3e1d310686a2dc36bd82670b5fd9 | |
parent | bac22980b008ed810c56054d7f8bd73c02326b3f (diff) | |
parent | a32442d4f8b712b701ea577c841d6a0a7c5993c1 (diff) |
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
-rw-r--r-- | drivers/video/fbdev/core/fb_defio.c | 5 | ||||
-rw-r--r-- | drivers/video/fbdev/omap2/dss/hdmi_pll.c | 2 | ||||
-rw-r--r-- | drivers/video/fbdev/omap2/dss/pll.c | 3 | ||||
-rw-r--r-- | drivers/video/fbdev/omap2/dss/sdi.c | 2 | ||||
-rw-r--r-- | drivers/video/logo/logo.c | 17 |
5 files changed, 23 insertions, 6 deletions
diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c index 900aa4ecd617..d6cab1fd9a47 100644 --- a/drivers/video/fbdev/core/fb_defio.c +++ b/drivers/video/fbdev/core/fb_defio.c | |||
@@ -83,9 +83,10 @@ int fb_deferred_io_fsync(struct file *file, loff_t start, loff_t end, int datasy | |||
83 | cancel_delayed_work_sync(&info->deferred_work); | 83 | cancel_delayed_work_sync(&info->deferred_work); |
84 | 84 | ||
85 | /* Run it immediately */ | 85 | /* Run it immediately */ |
86 | err = schedule_delayed_work(&info->deferred_work, 0); | 86 | schedule_delayed_work(&info->deferred_work, 0); |
87 | mutex_unlock(&inode->i_mutex); | 87 | mutex_unlock(&inode->i_mutex); |
88 | return err; | 88 | |
89 | return 0; | ||
89 | } | 90 | } |
90 | EXPORT_SYMBOL_GPL(fb_deferred_io_fsync); | 91 | EXPORT_SYMBOL_GPL(fb_deferred_io_fsync); |
91 | 92 | ||
diff --git a/drivers/video/fbdev/omap2/dss/hdmi_pll.c b/drivers/video/fbdev/omap2/dss/hdmi_pll.c index 87accdb59c81..ac83ef5cfd7d 100644 --- a/drivers/video/fbdev/omap2/dss/hdmi_pll.c +++ b/drivers/video/fbdev/omap2/dss/hdmi_pll.c | |||
@@ -132,7 +132,6 @@ static const struct dss_pll_hw dss_omap4_hdmi_pll_hw = { | |||
132 | .mX_max = 127, | 132 | .mX_max = 127, |
133 | .fint_min = 500000, | 133 | .fint_min = 500000, |
134 | .fint_max = 2500000, | 134 | .fint_max = 2500000, |
135 | .clkdco_max = 1800000000, | ||
136 | 135 | ||
137 | .clkdco_min = 500000000, | 136 | .clkdco_min = 500000000, |
138 | .clkdco_low = 1000000000, | 137 | .clkdco_low = 1000000000, |
@@ -156,7 +155,6 @@ static const struct dss_pll_hw dss_omap5_hdmi_pll_hw = { | |||
156 | .mX_max = 127, | 155 | .mX_max = 127, |
157 | .fint_min = 620000, | 156 | .fint_min = 620000, |
158 | .fint_max = 2500000, | 157 | .fint_max = 2500000, |
159 | .clkdco_max = 1800000000, | ||
160 | 158 | ||
161 | .clkdco_min = 750000000, | 159 | .clkdco_min = 750000000, |
162 | .clkdco_low = 1500000000, | 160 | .clkdco_low = 1500000000, |
diff --git a/drivers/video/fbdev/omap2/dss/pll.c b/drivers/video/fbdev/omap2/dss/pll.c index 50bc62c5d367..335ffac224b9 100644 --- a/drivers/video/fbdev/omap2/dss/pll.c +++ b/drivers/video/fbdev/omap2/dss/pll.c | |||
@@ -97,7 +97,8 @@ int dss_pll_enable(struct dss_pll *pll) | |||
97 | return 0; | 97 | return 0; |
98 | 98 | ||
99 | err_enable: | 99 | err_enable: |
100 | regulator_disable(pll->regulator); | 100 | if (pll->regulator) |
101 | regulator_disable(pll->regulator); | ||
101 | err_reg: | 102 | err_reg: |
102 | clk_disable_unprepare(pll->clkin); | 103 | clk_disable_unprepare(pll->clkin); |
103 | return r; | 104 | return r; |
diff --git a/drivers/video/fbdev/omap2/dss/sdi.c b/drivers/video/fbdev/omap2/dss/sdi.c index d51a983075bc..5c2ccab5a958 100644 --- a/drivers/video/fbdev/omap2/dss/sdi.c +++ b/drivers/video/fbdev/omap2/dss/sdi.c | |||
@@ -342,6 +342,8 @@ static void sdi_init_output(struct platform_device *pdev) | |||
342 | out->output_type = OMAP_DISPLAY_TYPE_SDI; | 342 | out->output_type = OMAP_DISPLAY_TYPE_SDI; |
343 | out->name = "sdi.0"; | 343 | out->name = "sdi.0"; |
344 | out->dispc_channel = OMAP_DSS_CHANNEL_LCD; | 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 | out->ops.sdi = &sdi_ops; | 347 | out->ops.sdi = &sdi_ops; |
346 | out->owner = THIS_MODULE; | 348 | out->owner = THIS_MODULE; |
347 | 349 | ||
diff --git a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c index 940cd196eef5..10fbfd8ab963 100644 --- a/drivers/video/logo/logo.c +++ b/drivers/video/logo/logo.c | |||
@@ -21,6 +21,21 @@ static bool nologo; | |||
21 | module_param(nologo, bool, 0); | 21 | module_param(nologo, bool, 0); |
22 | MODULE_PARM_DESC(nologo, "Disables startup logo"); | 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 | /* logo's are marked __initdata. Use __init_refok to tell | 39 | /* logo's are marked __initdata. Use __init_refok to tell |
25 | * modpost that it is intended that this function uses data | 40 | * modpost that it is intended that this function uses data |
26 | * marked __initdata. | 41 | * marked __initdata. |
@@ -29,7 +44,7 @@ const struct linux_logo * __init_refok fb_find_logo(int depth) | |||
29 | { | 44 | { |
30 | const struct linux_logo *logo = NULL; | 45 | const struct linux_logo *logo = NULL; |
31 | 46 | ||
32 | if (nologo) | 47 | if (nologo || logos_freed) |
33 | return NULL; | 48 | return NULL; |
34 | 49 | ||
35 | if (depth >= 1) { | 50 | if (depth >= 1) { |