summaryrefslogtreecommitdiff
path: root/drivers/video/mxc
diff options
context:
space:
mode:
authorDanny Nold <dannynold@freescale.com>2010-07-30 10:57:54 -0500
committerAlan Tull <r80115@freescale.com>2010-09-25 09:49:43 -0500
commita8ae0d6193cad4f58f204f50b6dad6610db067b5 (patch)
tree1304aba1c0690187a7168fcab33787fd10072c34 /drivers/video/mxc
parent6ba91fdb42a31a8d4b74ca2594b93ace2abd45ba (diff)
ENGR00125779 - EPDC fb module load/unload
Modified mxc_epdc_fb_remove() to prevent crashes and errors when the FB driver is removed. deferred_io must be unloaded before FB memory is freed. Signed-off-by: Danny Nold <dannynold@freescale.com>
Diffstat (limited to 'drivers/video/mxc')
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index d3dee60e5907..109fa314a3cf 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -2429,11 +2429,11 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
mxc_epdc_fb_default.xres = pentry->x_res;
mxc_epdc_fb_default.yres = pentry->y_res;
mxc_epdc_fb_default.xres_virtual = pentry->x_res;
- mxc_epdc_fb_default.yres_virtual = pentry->y_res * 2; /* FB doubled in virtual space */
+ /* Additional screens allow for panning and buffer flipping */
+ mxc_epdc_fb_default.yres_virtual = pentry->y_res * NUM_SCREENS;
mxc_epdc_fb_fix.smem_start = fb_data->phys_start;
- mxc_epdc_fb_fix.smem_len = mxc_epdc_fb_default.yres_virtual
- * pentry->x_res * 2 * pentry->bpp / 8;
+ mxc_epdc_fb_fix.smem_len = fb_data->map_size;
mxc_epdc_fb_fix.ypanstep = 0;
switch (pentry->bpp) {
@@ -2779,9 +2779,12 @@ static int mxc_epdc_fb_remove(struct platform_device *pdev)
unregister_framebuffer(&fb_data->info);
free_irq(fb_data->epdc_irq, fb_data);
- dma_free_writecombine(&pdev->dev, fb_data->working_buffer_size, fb_data->working_buffer_virt,
+ dma_free_writecombine(&pdev->dev, fb_data->working_buffer_size,
+ fb_data->working_buffer_virt,
fb_data->working_buffer_phys);
- dma_free_writecombine(&pdev->dev, fb_data->waveform_buffer_size, fb_data->waveform_buffer_virt,
+ if (fb_data->waveform_buffer_virt != NULL)
+ dma_free_writecombine(&pdev->dev, fb_data->waveform_buffer_size,
+ fb_data->waveform_buffer_virt,
fb_data->waveform_buffer_phys);
list_for_each_entry_safe(plist, temp_list, &fb_data->upd_buf_free_list->list, list) {
list_del(&plist->list);
@@ -2789,6 +2792,10 @@ static int mxc_epdc_fb_remove(struct platform_device *pdev)
plist->phys_addr);
kfree(plist);
}
+#ifdef CONFIG_FB_MXC_EINK_AUTO_UPDATE_MODE
+ fb_deferred_io_cleanup(&fb_data->info);
+#endif
+
dma_free_writecombine(&pdev->dev, fb_data->map_size, fb_data->info.screen_base,
fb_data->phys_start);