mt_pwm.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. #ifndef __MT_PWM_H__
  2. #define __MT_PWM_H__
  3. #endif
  4. #include <platform/mt_typedefs.h>
  5. #include <platform/mt_reg_base.h>
  6. /***********************************
  7. * PWM register address *
  8. ************************************/
  9. #define PWM_ENABLE (PWM_BASE+0x0000)
  10. #define PWM_3DLCM (PWM_BASE+0x1D0)
  11. #define PWM_3DLCM_ENABLE_OFFSET 0
  12. #define PWM_3DLCM_2_INV 2
  13. #define PWM_3DLCM_1_INV 1
  14. #define PWM_3DLCM_0_INV 0
  15. #define PWM_CON_CLKSEL_OLD_OFFSET 4
  16. #define PWM_INT_ENABLE (PWM_BASE+0x0200)
  17. #define PWM_INT_STATUS (PWM_BASE+0x0204)
  18. #define PWM_INT_ACK (PWM_BASE+0x0208)
  19. #define PWM_EN_STATUS (PWM_BASE+0x020c)
  20. /*PWM1~PWM3 control registers*/
  21. #define PWM_CON_CLKDIV_MASK 0x00000007
  22. #define PWM_CON_CLKDIV_OFFSET 0
  23. #define PWM_CON_CLKSEL_MASK 0x00000008
  24. #define PWM_CON_CLKSEL_OFFSET 3
  25. #define PWM_CON_SRCSEL_MASK 0x00000020
  26. #define PWM_CON_SRCSEL_OFFSET 5
  27. #define PWM_CON_MODE_MASK 0x00000040
  28. #define PWM_CON_MODE_OFFSET 6
  29. #define PWM_CON_IDLE_VALUE_MASK 0x00000080
  30. #define PWM_CON_IDLE_VALUE_OFFSET 7
  31. #define PWM_CON_GUARD_VALUE_MASK 0x00000100
  32. #define PWM_CON_GUARD_VALUE_OFFSET 8
  33. #define PWM_CON_STOP_BITS_MASK 0x00007E00
  34. #define PWM_CON_STOP_BITS_OFFSET 9
  35. #define PWM_CON_OLD_MODE_MASK 0x00008000
  36. #define PWM_CON_OLD_MODE_OFFSET 15
  37. /*********************************
  38. * Define Error Number
  39. **********************************/
  40. #define RSUCCESS 0
  41. #define EEXCESSPWMNO 1
  42. #define EPARMNOSUPPORT 2
  43. #define ERROR 3
  44. #define EBADADDR 4
  45. #define EEXCESSBITS 5
  46. #define EINVALID 6
  47. /**********************************
  48. * Global enum data
  49. ***********************************/
  50. enum PWN_NO {
  51. PWM_MIN,
  52. PWM1 = PWM_MIN,
  53. PWM2,
  54. PWM3,
  55. PWM_NUM,
  56. PWM_MAX=PWM_NUM
  57. };
  58. enum TEST_SEL_BIT {
  59. TEST_SEL_FALSE,
  60. TEST_SEL_TRUE
  61. };
  62. enum PWM_CON_MODE_BIT {
  63. PERIOD,
  64. RAND
  65. };
  66. enum PWM_CON_SRCSEL_BIT {
  67. FIFO,
  68. MEMORY
  69. };
  70. enum PWM_CON_IDLE_BIT {
  71. IDLE_FALSE,
  72. IDLE_TRUE,
  73. IDLE_MAX
  74. };
  75. enum PWM_CON_GUARD_BIT {
  76. GUARD_FALSE,
  77. GUARD_TRUE,
  78. GUARD_MAX
  79. };
  80. enum OLD_MODE_BIT {
  81. OLDMODE_DISABLE,
  82. OLDMODE_ENABLE
  83. };
  84. enum PWM_BUF_VALID_BIT {
  85. BUF0_VALID,
  86. BUF0_EN_VALID,
  87. BUF1_VALID,
  88. BUF1_EN_VALID,
  89. BUF_EN_MAX
  90. };
  91. enum CLOCK_SRC {
  92. CLK_BLOCK,
  93. CLK_BLOCK_BY_1625_OR_32K
  94. };
  95. enum PWM_CLK_DIV {
  96. CLK_DIV_MIN,
  97. CLK_DIV1 = CLK_DIV_MIN,
  98. CLK_DIV2,
  99. CLK_DIV4,
  100. CLK_DIV8,
  101. CLK_DIV16,
  102. CLK_DIV32,
  103. CLK_DIV64,
  104. CLK_DIV128,
  105. CLK_DIV_MAX
  106. };
  107. enum PWM_INT_ENABLE_BITS {
  108. PWM1_INT_FINISH_EN,
  109. PWM1_INT_UNDERFLOW_EN,
  110. PWM2_INT_FINISH_EN,
  111. PWM2_INT_UNDERFLOW_EN,
  112. PWM3_INT_FINISH_EN,
  113. PWM3_INT_UNDERFLOW_EN,
  114. PWM_INT_ENABLE_BITS_MAX,
  115. };
  116. enum PWM_INT_STATUS_BITS {
  117. PWM1_INT_FINISH_ST,
  118. PWM1_INT_UNDERFLOW_ST,
  119. PWM2_INT_FINISH_ST,
  120. PWM2_INT_UNDERFLOW_ST,
  121. PWM3_INT_FINISH_ST,
  122. PWM3_INT_UNDERFLOW_ST,
  123. PWM_INT_STATUS_BITS_MAX,
  124. };
  125. enum PWM_INT_ACK_BITS {
  126. PWM1_INT_FINISH_ACK,
  127. PWM1_INT_UNDERFLOW_ACK,
  128. PWM2_INT_FINISH_ACK,
  129. PWM2_INT_UNDERFLOW_ACK,
  130. PWM3_INT_FINISH_ACK,
  131. PWM3_INT_UNDERFLOW_ACK,
  132. PWM_INT_ACK_BITS_MAX,
  133. };
  134. enum PWM_CLOCK_SRC_ENUM {
  135. PWM_CLK_SRC_MIN,
  136. PWM_CLK_OLD_MODE_BLOCK = PWM_CLK_SRC_MIN,
  137. PWM_CLK_OLD_MODE_32K,
  138. PWM_CLK_NEW_MODE_BLOCK,
  139. PWM_CLK_NEW_MODE_BLOCK_DIV_BY_1625,
  140. PWM_CLK_SRC_NUM,
  141. PWM_CLK_SRC_INVALID,
  142. };
  143. enum PWM_MODE_ENUM {
  144. PWM_MODE_MIN,
  145. PWM_MODE_OLD = PWM_MODE_MIN,
  146. PWM_MODE_FIFO,
  147. PWM_MODE_MEMORY,
  148. PWM_MODE_RANDOM,
  149. PWM_MODE_DELAY,
  150. PWM_MODE_INVALID,
  151. };
  152. #define PWM_NEW_MODE_DUTY_TOTAL_BITS 64
  153. struct pwm_easy_config {
  154. U32 pwm_no;
  155. U32 duty;
  156. U32 clk_src;
  157. U32 clk_div;
  158. U16 duration;
  159. BOOL pmic_pad;
  160. };
  161. struct pwm_spec_config {
  162. U32 pwm_no;
  163. U32 mode;
  164. U32 clk_div;
  165. U32 clk_src;
  166. BOOL pmic_pad;
  167. int intr;
  168. union _MODE {
  169. //for old mode
  170. struct _PWM_OLDMODE_REGS {
  171. U16 IDLE_VALUE;
  172. U16 GUARD_VALUE;
  173. U16 GDURATION;
  174. U16 WAVE_NUM;
  175. U16 DATA_WIDTH;
  176. U16 THRESH;
  177. } PWM_MODE_OLD_REGS;
  178. //for fifo mode
  179. struct _PWM_MODE_FIFO_REGS {
  180. U32 IDLE_VALUE;
  181. U32 GUARD_VALUE;
  182. U32 STOP_BITPOS_VALUE;
  183. U16 HDURATION;
  184. U16 LDURATION;
  185. U32 GDURATION;
  186. U32 SEND_DATA0;
  187. U32 SEND_DATA1;
  188. U32 WAVE_NUM;
  189. } PWM_MODE_FIFO_REGS;
  190. /*
  191. //for memory mode
  192. struct _PWM_MODE_MEMORY_REGS {
  193. U32 IDLE_VALUE;
  194. U32 GUARD_VALUE;
  195. U32 STOP_BITPOS_VALUE;
  196. U16 HDURATION;
  197. U16 LDURATION;
  198. U16 GDURATION;
  199. U32 * BUF0_BASE_ADDR;
  200. U32 BUF0_SIZE;
  201. U16 WAVE_NUM;
  202. }PWM_MODE_MEMORY_REGS;
  203. //for RANDOM mode
  204. struct _PWM_MODE_RANDOM_REGS {
  205. U16 IDLE_VALUE;
  206. U16 GUARD_VALUE;
  207. U32 STOP_BITPOS_VALUE;
  208. U16 HDURATION;
  209. U16 LDURATION;
  210. U16 GDURATION;
  211. U32 * BUF0_BASE_ADDR;
  212. U32 BUF0_SIZE;
  213. U32 *BUF1_BASE_ADDR;
  214. U32 BUF1_SIZE;
  215. U16 WAVE_NUM;
  216. U32 VALID;
  217. }PWM_MODE_RANDOM_REGS;
  218. //for seq mode
  219. struct _PWM_MODE_DELAY_REGS {
  220. //U32 ENABLE_DELAY_VALUE;
  221. U16 PWM4_DELAY_DUR;
  222. U32 PWM4_DELAY_CLK; //0: block clock source, 1: block/1625 clock source
  223. U16 PWM5_DELAY_DUR;
  224. U32 PWM5_DELAY_CLK;
  225. U16 PWM6_DELAY_DUR;
  226. U32 PWM6_DELAY_CLK;
  227. }PWM_MODE_DELAY_REGS;
  228. */
  229. } pwm_mode;
  230. };
  231. S32 pwm_set_easy_config ( struct pwm_easy_config *);
  232. S32 pwm_set_spec_config(struct pwm_spec_config *);
  233. extern void pwm_init();
  234. void mt_pwm_disable(U32 pwm_no, BOOL pmic_pad);