aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/pmag-ba-fb.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/drivers/video/pmag-ba-fb.c b/drivers/video/pmag-ba-fb.c
index 264d37243fad..3a3f80f65219 100644
--- a/drivers/video/pmag-ba-fb.c
+++ b/drivers/video/pmag-ba-fb.c
@@ -147,16 +147,23 @@ static int __init pmagbafb_probe(struct device *dev)
147 resource_size_t start, len; 147 resource_size_t start, len;
148 struct fb_info *info; 148 struct fb_info *info;
149 struct pmagbafb_par *par; 149 struct pmagbafb_par *par;
150 int err;
150 151
151 info = framebuffer_alloc(sizeof(struct pmagbafb_par), dev); 152 info = framebuffer_alloc(sizeof(struct pmagbafb_par), dev);
152 if (!info) 153 if (!info) {
154 printk(KERN_ERR "%s: Cannot allocate memory\n", dev->bus_id);
153 return -ENOMEM; 155 return -ENOMEM;
156 }
154 157
155 par = info->par; 158 par = info->par;
156 dev_set_drvdata(dev, info); 159 dev_set_drvdata(dev, info);
157 160
158 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) 161 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
162 printk(KERN_ERR "%s: Cannot allocate color map\n",
163 dev->bus_id);
164 err = -ENOMEM;
159 goto err_alloc; 165 goto err_alloc;
166 }
160 167
161 info->fbops = &pmagbafb_ops; 168 info->fbops = &pmagbafb_ops;
162 info->fix = pmagbafb_fix; 169 info->fix = pmagbafb_fix;
@@ -166,28 +173,41 @@ static int __init pmagbafb_probe(struct device *dev)
166 /* Request the I/O MEM resource. */ 173 /* Request the I/O MEM resource. */
167 start = tdev->resource.start; 174 start = tdev->resource.start;
168 len = tdev->resource.end - start + 1; 175 len = tdev->resource.end - start + 1;
169 if (!request_mem_region(start, len, dev->bus_id)) 176 if (!request_mem_region(start, len, dev->bus_id)) {
177 printk(KERN_ERR "%s: Cannot reserve FB region\n", dev->bus_id);
178 err = -EBUSY;
170 goto err_cmap; 179 goto err_cmap;
180 }
171 181
172 /* MMIO mapping setup. */ 182 /* MMIO mapping setup. */
173 info->fix.mmio_start = start; 183 info->fix.mmio_start = start;
174 par->mmio = ioremap_nocache(info->fix.mmio_start, info->fix.mmio_len); 184 par->mmio = ioremap_nocache(info->fix.mmio_start, info->fix.mmio_len);
175 if (!par->mmio) 185 if (!par->mmio) {
186 printk(KERN_ERR "%s: Cannot map MMIO\n", dev->bus_id);
187 err = -ENOMEM;
176 goto err_resource; 188 goto err_resource;
189 }
177 par->dac = par->mmio + PMAG_BA_BT459; 190 par->dac = par->mmio + PMAG_BA_BT459;
178 191
179 /* Frame buffer mapping setup. */ 192 /* Frame buffer mapping setup. */
180 info->fix.smem_start = start + PMAG_BA_FBMEM; 193 info->fix.smem_start = start + PMAG_BA_FBMEM;
181 info->screen_base = ioremap_nocache(info->fix.smem_start, 194 info->screen_base = ioremap_nocache(info->fix.smem_start,
182 info->fix.smem_len); 195 info->fix.smem_len);
183 if (!info->screen_base) 196 if (!info->screen_base) {
197 printk(KERN_ERR "%s: Cannot map FB\n", dev->bus_id);
198 err = -ENOMEM;
184 goto err_mmio_map; 199 goto err_mmio_map;
200 }
185 info->screen_size = info->fix.smem_len; 201 info->screen_size = info->fix.smem_len;
186 202
187 pmagbafb_erase_cursor(info); 203 pmagbafb_erase_cursor(info);
188 204
189 if (register_framebuffer(info) < 0) 205 err = register_framebuffer(info);
206 if (err < 0) {
207 printk(KERN_ERR "%s: Cannot register framebuffer\n",
208 dev->bus_id);
190 goto err_smem_map; 209 goto err_smem_map;
210 }
191 211
192 get_device(dev); 212 get_device(dev);
193 213
@@ -211,7 +231,7 @@ err_cmap:
211 231
212err_alloc: 232err_alloc:
213 framebuffer_release(info); 233 framebuffer_release(info);
214 return -ENXIO; 234 return err;
215} 235}
216 236
217static int __exit pmagbafb_remove(struct device *dev) 237static int __exit pmagbafb_remove(struct device *dev)