aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2010-06-30 05:26:35 -0400
committerPaul Mundt <lethal@linux-sh.org>2010-08-04 03:03:02 -0400
commitdba6f385b83d7f19eb1d4df12f422bab945c7f10 (patch)
tree90dd9b477986bc568bc4445c7fbb0c9409a89451 /drivers/video
parent8a2b6beffc88b83089845d72eed2ed74eb5c9b1e (diff)
fbdev: sh-mobile-lcdc: fix potential Oops in SH-Mobile LCDC framebuffer driver
sh_mobile_lcdc_setup_clocks() can perform IO, therefore it has to be called after ioremap(). Also check return code of ioremap() and use resource_size() instead of open-coding it. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Acked-by: Magnus Damm <damm@opensource.se> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/sh_mobile_lcdcfb.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c
index 12c451a711e9..0c97509d0237 100644
--- a/drivers/video/sh_mobile_lcdcfb.c
+++ b/drivers/video/sh_mobile_lcdcfb.c
@@ -1020,14 +1020,16 @@ static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev)
1020 goto err1; 1020 goto err1;
1021 } 1021 }
1022 1022
1023 priv->base = ioremap_nocache(res->start, resource_size(res));
1024 if (!priv->base)
1025 goto err1;
1026
1023 error = sh_mobile_lcdc_setup_clocks(pdev, pdata->clock_source, priv); 1027 error = sh_mobile_lcdc_setup_clocks(pdev, pdata->clock_source, priv);
1024 if (error) { 1028 if (error) {
1025 dev_err(&pdev->dev, "unable to setup clocks\n"); 1029 dev_err(&pdev->dev, "unable to setup clocks\n");
1026 goto err1; 1030 goto err1;
1027 } 1031 }
1028 1032
1029 priv->base = ioremap_nocache(res->start, (res->end - res->start) + 1);
1030
1031 for (i = 0; i < j; i++) { 1033 for (i = 0; i < j; i++) {
1032 cfg = &priv->ch[i].cfg; 1034 cfg = &priv->ch[i].cfg;
1033 1035