arkn141s_lcdc.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Header file for ARKn141s LCD Controller
  3. *
  4. */
  5. #ifndef __ARKn141s_LCDC_H__
  6. #define __ARKn141s_LCDC_H__
  7. #include <linux/workqueue.h>
  8. #include <linux/pwm.h>
  9. #include <linux/soc/arkmicro/arkn141s_lcdc_regs.h>
  10. #include "ark_lcdc_common.h"
  11. enum arkn141s_interface_type {
  12. ARKN141S_LCDC_INTERFACE_TTL,
  13. ARKN141S_LCDC_INTERFACE_LVDS,
  14. };
  15. enum arkn141s_lcdc_format {
  16. ARKN141S_LCDC_FORMAT_PALETTE,
  17. ARKN141S_LCDC_FORMAT_BMP24BIT,
  18. ARKN141S_LCDC_FORMAT_VYUY,
  19. ARKN141S_LCDC_FORMAT_YUV,
  20. ARKN141S_LCDC_FORMAT_RGBI555,
  21. ARKN141S_LCDC_FORMAT_R5G6B5,
  22. ARKN141S_LCDC_FORMAT_RGBA888,
  23. ARKN141S_LCDC_FORMAT_RGB888,
  24. };
  25. /* Way LCD wires are connected to the chip:
  26. * A swapped wiring onboard can bring to RGB mode.
  27. */
  28. #define ARKN141S_LCDC_WIRING_BGR 0
  29. #define ARKN141S_LCDC_WIRING_GBR 1
  30. #define ARKN141S_LCDC_WIRING_RBG 2
  31. #define ARKN141S_LCDC_WIRING_BRG 3
  32. #define ARKN141S_LCDC_WIRING_GRB 4
  33. #define ARKN141S_LCDC_WIRING_RGB 5
  34. /* LCD Controller info data structure, stored in device platform_data */
  35. struct arkn141s_lcdfb_pdata {
  36. u8 default_bpp;
  37. u8 lcd_wiring_mode;
  38. u8 interface_type;
  39. u32 lvds_con;
  40. bool de_active_high;
  41. bool pixelclk_active_high;
  42. bool lcdcon_is_backlight;
  43. struct pwm_device *pwm;
  44. struct timer_list backlight_timer;
  45. int backlight_value;
  46. int backlight_delay;
  47. void (*arkn141s_lcdfb_power_control)(struct arkn141s_lcdfb_pdata *pdata, int on);
  48. struct list_head pwr_gpios;
  49. };
  50. /* LCD Controller info data structure, stored in device platform_data */
  51. struct arkn141s_lcdfb_info {
  52. spinlock_t lock;
  53. struct fb_info *info;
  54. void __iomem *mmio;
  55. void __iomem *sysreg;
  56. int irq_base;
  57. struct work_struct task;
  58. wait_queue_head_t vsync_waitq;
  59. int vsync_flag;
  60. unsigned int smem_len;
  61. struct platform_device *pdev;
  62. struct clk *lcdc_clk;
  63. struct backlight_device *backlight;
  64. u8 bl_power;
  65. u8 saved_lcdcon;
  66. bool have_intensity_bit;
  67. struct arkn141s_lcdfb_pdata pdata;
  68. };
  69. enum arkn141s_lcdc_osdlayer {
  70. OSD_LAYER1,
  71. OSD_LAYER_MAX,
  72. };
  73. enum arkn141s_lcdc_videolayer {
  74. VIDEO_LAYER1,
  75. VIDEO_LAYER_MAX,
  76. };
  77. int arkn141s_lcdc_funcs_init(struct arkn141s_lcdfb_info *info);
  78. int arkn141s_lcdc_wait_for_vsync(struct arkn141s_lcdfb_info *sinfo);
  79. int arkn141s_lcdfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  80. #endif /* __ARKn141s_LCDC_H__ */