fb.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * arch/arm/mach-netx/fb.c
  3. *
  4. * Copyright (c) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2
  8. * as published by the Free Software Foundation.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. #include <linux/device.h>
  20. #include <linux/init.h>
  21. #include <linux/dma-mapping.h>
  22. #include <linux/amba/bus.h>
  23. #include <linux/amba/clcd.h>
  24. #include <linux/err.h>
  25. #include <linux/gfp.h>
  26. #include <asm/irq.h>
  27. #include <mach/netx-regs.h>
  28. #include <mach/hardware.h>
  29. static struct clcd_panel *netx_panel;
  30. void netx_clcd_enable(struct clcd_fb *fb)
  31. {
  32. }
  33. int netx_clcd_setup(struct clcd_fb *fb)
  34. {
  35. dma_addr_t dma;
  36. fb->panel = netx_panel;
  37. fb->fb.screen_base = dma_alloc_wc(&fb->dev->dev, 1024 * 1024, &dma,
  38. GFP_KERNEL);
  39. if (!fb->fb.screen_base) {
  40. printk(KERN_ERR "CLCD: unable to map framebuffer\n");
  41. return -ENOMEM;
  42. }
  43. fb->fb.fix.smem_start = dma;
  44. fb->fb.fix.smem_len = 1024*1024;
  45. return 0;
  46. }
  47. int netx_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma)
  48. {
  49. return dma_mmap_wc(&fb->dev->dev, vma, fb->fb.screen_base,
  50. fb->fb.fix.smem_start, fb->fb.fix.smem_len);
  51. }
  52. void netx_clcd_remove(struct clcd_fb *fb)
  53. {
  54. dma_free_wc(&fb->dev->dev, fb->fb.fix.smem_len, fb->fb.screen_base,
  55. fb->fb.fix.smem_start);
  56. }
  57. static AMBA_AHB_DEVICE(fb, "fb", 0, 0x00104000, { NETX_IRQ_LCD }, NULL);
  58. int netx_fb_init(struct clcd_board *board, struct clcd_panel *panel)
  59. {
  60. netx_panel = panel;
  61. fb_device.dev.platform_data = board;
  62. return amba_device_register(&fb_device, &iomem_resource);
  63. }