ark1668_lcdc.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * Header file for ARK1668 LCD Controller
  3. *
  4. */
  5. #ifndef __ARK1668_LCDC_H__
  6. #define __ARK1668_LCDC_H__
  7. #include <linux/workqueue.h>
  8. #include <linux/pwm.h>
  9. #include <linux/soc/arkmicro/ark1668_lcdc_regs.h>
  10. #include "ark_lcdc_common.h"
  11. #define ARK1668_LAYER_MAX 5
  12. enum ark1668_interface_type {
  13. ARK1668_LCDC_INTERFACE_TTL,
  14. ARK1668_LCDC_INTERFACE_LVDS,
  15. };
  16. enum ark1668_lcdc_format {
  17. ARK1668_LCDC_FORMAT_PALETTE,
  18. ARK1668_LCDC_FORMAT_BMP24BIT,
  19. ARK1668_LCDC_FORMAT_VYUY,
  20. ARK1668_LCDC_FORMAT_YUV,
  21. ARK1668_LCDC_FORMAT_RGBI555,
  22. ARK1668_LCDC_FORMAT_R5G6B5,
  23. ARK1668_LCDC_FORMAT_RGBA888,
  24. ARK1668_LCDC_FORMAT_RGB888,
  25. };
  26. enum ark1668_lcdc_osdlayer {
  27. OSD_LAYER1,
  28. OSD_LAYER2,
  29. OSD_LAYER3,
  30. OSD_LAYER_MAX,
  31. };
  32. enum ark1668_lcdc_videolayer {
  33. VIDEO_LAYER1,
  34. VIDEO_LAYER2,
  35. VIDEO_LAYER_MAX,
  36. };
  37. /* LCD Controller info data structure, stored in device platform_data */
  38. struct ark1668_lcdfb_pdata {
  39. u8 default_bpp;
  40. u8 lcd_wiring_mode;
  41. u8 interface_type;
  42. u32 lvds_con;
  43. bool de_active_high;
  44. bool pixelclk_active_high;
  45. bool lcdcon_is_backlight;
  46. struct pwm_device *pwm;
  47. struct timer_list backlight_timer;
  48. int backlight_value;
  49. int backlight_delay;
  50. void (*ark1668_lcdfb_power_control)(struct ark1668_lcdfb_pdata *pdata, int on);
  51. struct list_head pwr_gpios;
  52. u32 dithering_con;
  53. u32 osd1_vp;
  54. u32 osd2_vp;
  55. u32 osd3_vp;
  56. u32 video1_vp;
  57. u32 video2_vp;
  58. };
  59. /* LCD Controller info data structure, stored in device platform_data */
  60. struct ark1668_lcdfb_info {
  61. spinlock_t lock;
  62. struct fb_info *info;
  63. void __iomem *mmio;
  64. void __iomem *sysreg;
  65. int irq_base;
  66. struct work_struct task;
  67. wait_queue_head_t vsync_waitq;
  68. int vsync_flag;
  69. unsigned int smem_len;
  70. struct platform_device *pdev;
  71. struct clk *lcdc_clk;
  72. struct backlight_device *backlight;
  73. u8 bl_power;
  74. u8 saved_lcdcon;
  75. bool have_intensity_bit;
  76. struct ark1668_lcdfb_pdata pdata;
  77. u8 atomic_flag;
  78. struct ark_disp_atomic patomic[ARK1668_LAYER_MAX];
  79. struct ark_disp_addr render_addr[ARK1668_LAYER_MAX];
  80. };
  81. int ark1668_lcdc_funcs_init(struct ark1668_lcdfb_info *info);
  82. int ark1668_lcdc_wait_for_vsync(void);
  83. int ark1668_lcdfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  84. void ark1668_lcdc_set_osd_addr(int id, unsigned int addr);
  85. void ark1668_lcdc_set_video_addr(int id, unsigned int yaddr,unsigned int cbaddr, unsigned int craddr);
  86. #endif /* __ARK1668_LCDC_H__ */