aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/pxa168fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/pxa168fb.c')
-rw-r--r--drivers/video/pxa168fb.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/video/pxa168fb.c b/drivers/video/pxa168fb.c
index a31a77ff6f3d..cea6403ae71c 100644
--- a/drivers/video/pxa168fb.c
+++ b/drivers/video/pxa168fb.c
@@ -784,12 +784,53 @@ failed:
784 return ret; 784 return ret;
785} 785}
786 786
787static int __devexit pxa168fb_remove(struct platform_device *pdev)
788{
789 struct pxa168fb_info *fbi = platform_get_drvdata(pdev);
790 struct fb_info *info;
791 int irq;
792 unsigned int data;
793
794 if (!fbi)
795 return 0;
796
797 /* disable DMA transfer */
798 data = readl(fbi->reg_base + LCD_SPU_DMA_CTRL0);
799 data &= ~CFG_GRA_ENA_MASK;
800 writel(data, fbi->reg_base + LCD_SPU_DMA_CTRL0);
801
802 info = fbi->info;
803
804 unregister_framebuffer(info);
805
806 writel(GRA_FRAME_IRQ0_ENA(0x0), fbi->reg_base + SPU_IRQ_ENA);
807
808 if (info->cmap.len)
809 fb_dealloc_cmap(&info->cmap);
810
811 irq = platform_get_irq(pdev, 0);
812 free_irq(irq, fbi);
813
814 dma_free_writecombine(fbi->dev, PAGE_ALIGN(info->fix.smem_len),
815 info->screen_base, info->fix.smem_start);
816
817 iounmap(fbi->reg_base);
818
819 clk_disable(fbi->clk);
820 clk_put(fbi->clk);
821
822 framebuffer_release(info);
823
824 return 0;
825}
826
787static struct platform_driver pxa168fb_driver = { 827static struct platform_driver pxa168fb_driver = {
788 .driver = { 828 .driver = {
789 .name = "pxa168-fb", 829 .name = "pxa168-fb",
790 .owner = THIS_MODULE, 830 .owner = THIS_MODULE,
791 }, 831 },
792 .probe = pxa168fb_probe, 832 .probe = pxa168fb_probe,
833 .remove = __devexit_p(pxa168fb_remove),
793}; 834};
794 835
795static int __init pxa168fb_init(void) 836static int __init pxa168fb_init(void)
@@ -798,6 +839,12 @@ static int __init pxa168fb_init(void)
798} 839}
799module_init(pxa168fb_init); 840module_init(pxa168fb_init);
800 841
842static void __exit pxa168fb_exit(void)
843{
844 platform_driver_unregister(&pxa168fb_driver);
845}
846module_exit(pxa168fb_exit);
847
801MODULE_AUTHOR("Lennert Buytenhek <buytenh@marvell.com> " 848MODULE_AUTHOR("Lennert Buytenhek <buytenh@marvell.com> "
802 "Green Wan <gwan@marvell.com>"); 849 "Green Wan <gwan@marvell.com>");
803MODULE_DESCRIPTION("Framebuffer driver for PXA168/910"); 850MODULE_DESCRIPTION("Framebuffer driver for PXA168/910");