mt_pwm.h 5.3 KB

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