mddihost.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. /* Copyright (c) 2008-2009, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. */
  13. #ifndef MDDIHOST_H
  14. #define MDDIHOST_H
  15. #include <linux/kernel.h>
  16. #include <linux/sched.h>
  17. #include <linux/time.h>
  18. #include <linux/init.h>
  19. #include <linux/interrupt.h>
  20. #include "linux/proc_fs.h"
  21. #include <linux/types.h>
  22. #include <linux/dma-mapping.h>
  23. #include <linux/clk.h>
  24. #include <mach/hardware.h>
  25. #include <linux/io.h>
  26. #include <asm/system.h>
  27. #include <asm/mach-types.h>
  28. #include <linux/types.h>
  29. #include <linux/dma-mapping.h>
  30. #include "msm_fb_panel.h"
  31. #undef FEATURE_MDDI_MC4
  32. #undef FEATURE_MDDI_S6D0142
  33. #undef FEATURE_MDDI_HITACHI
  34. #define FEATURE_MDDI_SHARP
  35. #define FEATURE_MDDI_TOSHIBA
  36. #undef FEATURE_MDDI_E751
  37. #define FEATURE_MDDI_CORONA
  38. #define FEATURE_MDDI_PRISM
  39. #define T_MSM7500
  40. typedef enum {
  41. format_16bpp,
  42. format_18bpp,
  43. format_24bpp
  44. } mddi_video_format;
  45. typedef enum {
  46. MDDI_LCD_NONE = 0,
  47. MDDI_LCD_MC4,
  48. MDDI_LCD_S6D0142,
  49. MDDI_LCD_SHARP,
  50. MDDI_LCD_E751,
  51. MDDI_LCD_CORONA,
  52. MDDI_LCD_HITACHI,
  53. MDDI_LCD_TOSHIBA,
  54. MDDI_LCD_PRISM,
  55. MDDI_LCD_TP2,
  56. MDDI_NUM_LCD_TYPES,
  57. MDDI_LCD_DEFAULT = MDDI_LCD_TOSHIBA
  58. } mddi_lcd_type;
  59. typedef enum {
  60. MDDI_HOST_PRIM = 0,
  61. MDDI_HOST_EXT,
  62. MDDI_NUM_HOST_CORES
  63. } mddi_host_type;
  64. typedef enum {
  65. MDDI_DRIVER_RESET, /* host core registers have not been written. */
  66. MDDI_DRIVER_DISABLED, /* registers written, interrupts disabled. */
  67. MDDI_DRIVER_ENABLED /* registers written, interrupts enabled. */
  68. } mddi_host_driver_state_type;
  69. typedef enum {
  70. MDDI_GPIO_INT_0 = 0,
  71. MDDI_GPIO_INT_1,
  72. MDDI_GPIO_INT_2,
  73. MDDI_GPIO_INT_3,
  74. MDDI_GPIO_INT_4,
  75. MDDI_GPIO_INT_5,
  76. MDDI_GPIO_INT_6,
  77. MDDI_GPIO_INT_7,
  78. MDDI_GPIO_INT_8,
  79. MDDI_GPIO_INT_9,
  80. MDDI_GPIO_INT_10,
  81. MDDI_GPIO_INT_11,
  82. MDDI_GPIO_INT_12,
  83. MDDI_GPIO_INT_13,
  84. MDDI_GPIO_INT_14,
  85. MDDI_GPIO_INT_15,
  86. MDDI_GPIO_NUM_INTS
  87. } mddi_gpio_int_type;
  88. enum mddi_data_packet_size_type {
  89. MDDI_DATA_PACKET_4_BYTES = 4,
  90. MDDI_DATA_PACKET_8_BYTES = 8,
  91. MDDI_DATA_PACKET_12_BYTES = 12,
  92. MDDI_DATA_PACKET_16_BYTES = 16,
  93. MDDI_DATA_PACKET_24_BYTES = 24
  94. };
  95. typedef struct {
  96. uint32 addr;
  97. uint32 value;
  98. } mddi_reg_write_type;
  99. boolean mddi_vsync_set_handler(msm_fb_vsync_handler_type handler, void *arg);
  100. typedef void (*mddi_llist_done_cb_type) (void);
  101. typedef void (*mddi_rev_handler_type) (void *);
  102. boolean mddi_set_rev_handler(mddi_rev_handler_type handler, uint16 pkt_type);
  103. #define MDDI_DEFAULT_PRIM_PIX_ATTR 0xC3
  104. #define MDDI_DEFAULT_SECD_PIX_ATTR 0xC0
  105. typedef int gpio_int_polarity_type;
  106. typedef int gpio_int_handler_type;
  107. typedef struct {
  108. void (*vsync_detected) (boolean);
  109. } mddi_lcd_func_type;
  110. extern mddi_lcd_func_type mddi_lcd;
  111. extern int irq_enabled;
  112. extern unsigned char mddi_timer_shutdown_flag;
  113. extern struct mutex mddi_timer_lock;
  114. void mddi_init(void);
  115. void mddi_powerdown(void);
  116. void mddi_host_start_ext_display(void);
  117. void mddi_host_stop_ext_display(void);
  118. extern spinlock_t mddi_host_spin_lock;
  119. #ifdef T_MSM7500
  120. void mddi_reset(void);
  121. #ifdef FEATURE_DUAL_PROC_MODEM_DISPLAY
  122. void mddi_host_switch_proc_control(boolean on);
  123. #endif
  124. #endif
  125. void mddi_host_exit_power_collapse(void);
  126. void mddi_queue_splash_screen
  127. (void *buf_ptr,
  128. boolean clear_area,
  129. int16 src_width,
  130. int16 src_starting_row,
  131. int16 src_starting_column,
  132. int16 num_of_rows,
  133. int16 num_of_columns, int16 dst_starting_row, int16 dst_starting_column);
  134. void mddi_queue_image
  135. (void *buf_ptr,
  136. uint8 stereo_video,
  137. boolean clear_area,
  138. int16 src_width,
  139. int16 src_starting_row,
  140. int16 src_starting_column,
  141. int16 num_of_rows,
  142. int16 num_of_columns, int16 dst_starting_row, int16 dst_starting_column);
  143. int mddi_host_register_read
  144. (uint32 reg_addr,
  145. uint32 *reg_value_ptr, boolean wait, mddi_host_type host_idx);
  146. int mddi_host_register_write
  147. (uint32 reg_addr, uint32 reg_val,
  148. enum mddi_data_packet_size_type packet_size,
  149. boolean wait, mddi_llist_done_cb_type done_cb, mddi_host_type host);
  150. boolean mddi_host_register_write_int
  151. (uint32 reg_addr,
  152. uint32 reg_val, mddi_llist_done_cb_type done_cb, mddi_host_type host);
  153. boolean mddi_host_register_read_int
  154. (uint32 reg_addr, uint32 *reg_value_ptr, mddi_host_type host_idx);
  155. void mddi_queue_register_write_static
  156. (uint32 reg_addr,
  157. uint32 reg_val, boolean wait, mddi_llist_done_cb_type done_cb);
  158. void mddi_queue_static_window_adjust
  159. (const mddi_reg_write_type *reg_write,
  160. uint16 num_writes, mddi_llist_done_cb_type done_cb);
  161. #ifdef ENABLE_MDDI_MULTI_READ_WRITE
  162. int mddi_host_register_multiwrite(uint32 reg_addr,
  163. uint32 *value_list_ptr, uint32 value_count,
  164. boolean wait, mddi_llist_done_cb_type done_cb,
  165. mddi_host_type host);
  166. int mddi_host_register_multiread(uint32 reg_addr,
  167. uint32 *value_list_ptr, uint32 value_count,
  168. boolean wait, mddi_host_type host);
  169. #endif
  170. #define mddi_queue_register_read(reg, val_ptr, wait, sig) \
  171. mddi_host_register_read(reg, val_ptr, wait, MDDI_HOST_PRIM)
  172. #define mddi_queue_register_write(reg, val, wait, sig) \
  173. mddi_host_register_write(reg, val, MDDI_DATA_PACKET_4_BYTES,\
  174. wait, NULL, MDDI_HOST_PRIM)
  175. #define mddi_queue_register_write_extn(reg, val, pkt_size, wait, sig) \
  176. mddi_host_register_write(reg, val, pkt_size, \
  177. wait, NULL, MDDI_HOST_PRIM)
  178. #define mddi_queue_register_write_int(reg, val) \
  179. mddi_host_register_write_int(reg, val, NULL, MDDI_HOST_PRIM)
  180. #define mddi_queue_register_read_int(reg, val_ptr) \
  181. mddi_host_register_read_int(reg, val_ptr, MDDI_HOST_PRIM)
  182. #define mddi_queue_register_writes(reg_ptr, val, wait, sig) \
  183. mddi_host_register_writes(reg_ptr, val, wait, sig, MDDI_HOST_PRIM)
  184. void mddi_wait(uint16 time_ms);
  185. void mddi_assign_max_pkt_dimensions(uint16 image_cols,
  186. uint16 image_rows,
  187. uint16 bpp,
  188. uint16 *max_cols, uint16 * max_rows);
  189. #ifdef MDDI_HOST_WINDOW_WORKAROUND
  190. uint16 mddi_assign_pkt_height(uint16 pkt_width, uint16 pkt_height, uint16 bpp);
  191. #endif
  192. void mddi_queue_reverse_encapsulation(boolean wait);
  193. int mddi_client_power(unsigned int client_id);
  194. void mddi_disable(int lock);
  195. void mddi_window_adjust(struct msm_fb_data_type *mfd,
  196. uint16 x1, uint16 x2, uint16 y1, uint16 y2);
  197. void mddi_send_fw_link_skew_cal(mddi_host_type host_idx);
  198. int pmdh_clk_func(int enable);
  199. #endif /* MDDIHOST_H */