diff options
author | Andy Whitcroft <apw@canonical.com> | 2010-07-29 09:42:21 +0100 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2011-09-12 09:02:34 -0600 |
commit | 42fb2a7288e935b1a430f4d60268061657c703fd (patch) | |
tree | 90ad6f23f12a2b37b4bb9d3bb51c5a2a491f8e93 /drivers | |
parent | 2e3bc3fd1b5b2d9e9ceefdd3eed8e91777cfd1e3 (diff) |
UBUNTU: SAUCE: (no-up) Modularize vesafb -- fix initialisation
When this patch was rolled forward, likely between Dapper and Hardy
a chunk of initialisation was lost. Pull this back in so we actually
have an vesafb_info structure initialised. Else we may well panic when
we rmmod vesafb.
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Brad Figg <brad.figg@canonical.com>
Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/vesafb.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c index 97af4869c5a..e3acd0131ee 100644 --- a/drivers/video/vesafb.c +++ b/drivers/video/vesafb.c @@ -258,6 +258,7 @@ static int __init vesafb_setup(char *options) static int __init vesafb_probe(struct platform_device *dev) { struct fb_info *info; + struct vesafb_info *vfb_info; int i, err; unsigned int size_vmode; unsigned int size_remap; @@ -316,13 +317,14 @@ static int __init vesafb_probe(struct platform_device *dev) spaces our resource handlers simply don't know about */ } - info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev); + info = framebuffer_alloc(sizeof(struct vesafb_info), &dev->dev); if (!info) { release_mem_region(vesafb_fix.smem_start, size_total); return -ENOMEM; } - info->pseudo_palette = info->par; - info->par = NULL; + vfb_info = (struct vesafb_info *) info->par; + vfb_info->mtrr_hdl = -1; + info->pseudo_palette = vfb_info->pseudo_palette; /* set vesafb aperture size for generic probing */ info->apertures = alloc_apertures(1); @@ -452,17 +454,15 @@ static int __init vesafb_probe(struct platform_device *dev) } if (type) { - int rc; - /* Find the largest power-of-two */ temp_size = roundup_pow_of_two(temp_size); /* Try and find a power of two to add */ do { - rc = mtrr_add(vesafb_fix.smem_start, temp_size, + vfb_info->mtrr_hdl = mtrr_add(vesafb_fix.smem_start, temp_size, type, 1); temp_size >>= 1; - } while (temp_size >= PAGE_SIZE && rc == -EINVAL); + } while (temp_size >= PAGE_SIZE && vfb_info->mtrr_hdl == -EINVAL); } } #endif |