fsl_esai.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. /*
  2. * fsl_esai.h - ALSA ESAI interface for the Freescale i.MX SoC
  3. *
  4. * Copyright (C) 2014 Freescale Semiconductor, Inc.
  5. *
  6. * Author: Nicolin Chen <Guangyu.Chen@freescale.com>
  7. *
  8. * This file is licensed under the terms of the GNU General Public License
  9. * version 2. This program is licensed "as is" without any warranty of any
  10. * kind, whether express or implied.
  11. */
  12. #ifndef _FSL_ESAI_DAI_H
  13. #define _FSL_ESAI_DAI_H
  14. /* ESAI Register Map */
  15. #define REG_ESAI_ETDR 0x00
  16. #define REG_ESAI_ERDR 0x04
  17. #define REG_ESAI_ECR 0x08
  18. #define REG_ESAI_ESR 0x0C
  19. #define REG_ESAI_TFCR 0x10
  20. #define REG_ESAI_TFSR 0x14
  21. #define REG_ESAI_RFCR 0x18
  22. #define REG_ESAI_RFSR 0x1C
  23. #define REG_ESAI_xFCR(tx) (tx ? REG_ESAI_TFCR : REG_ESAI_RFCR)
  24. #define REG_ESAI_xFSR(tx) (tx ? REG_ESAI_TFSR : REG_ESAI_RFSR)
  25. #define REG_ESAI_TX0 0x80
  26. #define REG_ESAI_TX1 0x84
  27. #define REG_ESAI_TX2 0x88
  28. #define REG_ESAI_TX3 0x8C
  29. #define REG_ESAI_TX4 0x90
  30. #define REG_ESAI_TX5 0x94
  31. #define REG_ESAI_TSR 0x98
  32. #define REG_ESAI_RX0 0xA0
  33. #define REG_ESAI_RX1 0xA4
  34. #define REG_ESAI_RX2 0xA8
  35. #define REG_ESAI_RX3 0xAC
  36. #define REG_ESAI_SAISR 0xCC
  37. #define REG_ESAI_SAICR 0xD0
  38. #define REG_ESAI_TCR 0xD4
  39. #define REG_ESAI_TCCR 0xD8
  40. #define REG_ESAI_RCR 0xDC
  41. #define REG_ESAI_RCCR 0xE0
  42. #define REG_ESAI_xCR(tx) (tx ? REG_ESAI_TCR : REG_ESAI_RCR)
  43. #define REG_ESAI_xCCR(tx) (tx ? REG_ESAI_TCCR : REG_ESAI_RCCR)
  44. #define REG_ESAI_TSMA 0xE4
  45. #define REG_ESAI_TSMB 0xE8
  46. #define REG_ESAI_RSMA 0xEC
  47. #define REG_ESAI_RSMB 0xF0
  48. #define REG_ESAI_xSMA(tx) (tx ? REG_ESAI_TSMA : REG_ESAI_RSMA)
  49. #define REG_ESAI_xSMB(tx) (tx ? REG_ESAI_TSMB : REG_ESAI_RSMB)
  50. #define REG_ESAI_PRRC 0xF8
  51. #define REG_ESAI_PCRC 0xFC
  52. /* ESAI Control Register -- REG_ESAI_ECR 0x8 */
  53. #define ESAI_ECR_ETI_SHIFT 19
  54. #define ESAI_ECR_ETI_MASK (1 << ESAI_ECR_ETI_SHIFT)
  55. #define ESAI_ECR_ETI (1 << ESAI_ECR_ETI_SHIFT)
  56. #define ESAI_ECR_ETO_SHIFT 18
  57. #define ESAI_ECR_ETO_MASK (1 << ESAI_ECR_ETO_SHIFT)
  58. #define ESAI_ECR_ETO (1 << ESAI_ECR_ETO_SHIFT)
  59. #define ESAI_ECR_ERI_SHIFT 17
  60. #define ESAI_ECR_ERI_MASK (1 << ESAI_ECR_ERI_SHIFT)
  61. #define ESAI_ECR_ERI (1 << ESAI_ECR_ERI_SHIFT)
  62. #define ESAI_ECR_ERO_SHIFT 16
  63. #define ESAI_ECR_ERO_MASK (1 << ESAI_ECR_ERO_SHIFT)
  64. #define ESAI_ECR_ERO (1 << ESAI_ECR_ERO_SHIFT)
  65. #define ESAI_ECR_ERST_SHIFT 1
  66. #define ESAI_ECR_ERST_MASK (1 << ESAI_ECR_ERST_SHIFT)
  67. #define ESAI_ECR_ERST (1 << ESAI_ECR_ERST_SHIFT)
  68. #define ESAI_ECR_ESAIEN_SHIFT 0
  69. #define ESAI_ECR_ESAIEN_MASK (1 << ESAI_ECR_ESAIEN_SHIFT)
  70. #define ESAI_ECR_ESAIEN (1 << ESAI_ECR_ESAIEN_SHIFT)
  71. /* ESAI Status Register -- REG_ESAI_ESR 0xC */
  72. #define ESAI_ESR_TINIT_SHIFT 10
  73. #define ESAI_ESR_TINIT_MASK (1 << ESAI_ESR_TINIT_SHIFT)
  74. #define ESAI_ESR_TINIT (1 << ESAI_ESR_TINIT_SHIFT)
  75. #define ESAI_ESR_RFF_SHIFT 9
  76. #define ESAI_ESR_RFF_MASK (1 << ESAI_ESR_RFF_SHIFT)
  77. #define ESAI_ESR_RFF (1 << ESAI_ESR_RFF_SHIFT)
  78. #define ESAI_ESR_TFE_SHIFT 8
  79. #define ESAI_ESR_TFE_MASK (1 << ESAI_ESR_TFE_SHIFT)
  80. #define ESAI_ESR_TFE (1 << ESAI_ESR_TFE_SHIFT)
  81. #define ESAI_ESR_TLS_SHIFT 7
  82. #define ESAI_ESR_TLS_MASK (1 << ESAI_ESR_TLS_SHIFT)
  83. #define ESAI_ESR_TLS (1 << ESAI_ESR_TLS_SHIFT)
  84. #define ESAI_ESR_TDE_SHIFT 6
  85. #define ESAI_ESR_TDE_MASK (1 << ESAI_ESR_TDE_SHIFT)
  86. #define ESAI_ESR_TDE (1 << ESAI_ESR_TDE_SHIFT)
  87. #define ESAI_ESR_TED_SHIFT 5
  88. #define ESAI_ESR_TED_MASK (1 << ESAI_ESR_TED_SHIFT)
  89. #define ESAI_ESR_TED (1 << ESAI_ESR_TED_SHIFT)
  90. #define ESAI_ESR_TD_SHIFT 4
  91. #define ESAI_ESR_TD_MASK (1 << ESAI_ESR_TD_SHIFT)
  92. #define ESAI_ESR_TD (1 << ESAI_ESR_TD_SHIFT)
  93. #define ESAI_ESR_RLS_SHIFT 3
  94. #define ESAI_ESR_RLS_MASK (1 << ESAI_ESR_RLS_SHIFT)
  95. #define ESAI_ESR_RLS (1 << ESAI_ESR_RLS_SHIFT)
  96. #define ESAI_ESR_RDE_SHIFT 2
  97. #define ESAI_ESR_RDE_MASK (1 << ESAI_ESR_RDE_SHIFT)
  98. #define ESAI_ESR_RDE (1 << ESAI_ESR_RDE_SHIFT)
  99. #define ESAI_ESR_RED_SHIFT 1
  100. #define ESAI_ESR_RED_MASK (1 << ESAI_ESR_RED_SHIFT)
  101. #define ESAI_ESR_RED (1 << ESAI_ESR_RED_SHIFT)
  102. #define ESAI_ESR_RD_SHIFT 0
  103. #define ESAI_ESR_RD_MASK (1 << ESAI_ESR_RD_SHIFT)
  104. #define ESAI_ESR_RD (1 << ESAI_ESR_RD_SHIFT)
  105. /*
  106. * Transmit FIFO Configuration Register -- REG_ESAI_TFCR 0x10
  107. * Receive FIFO Configuration Register -- REG_ESAI_RFCR 0x18
  108. */
  109. #define ESAI_xFCR_TIEN_SHIFT 19
  110. #define ESAI_xFCR_TIEN_MASK (1 << ESAI_xFCR_TIEN_SHIFT)
  111. #define ESAI_xFCR_TIEN (1 << ESAI_xFCR_TIEN_SHIFT)
  112. #define ESAI_xFCR_REXT_SHIFT 19
  113. #define ESAI_xFCR_REXT_MASK (1 << ESAI_xFCR_REXT_SHIFT)
  114. #define ESAI_xFCR_REXT (1 << ESAI_xFCR_REXT_SHIFT)
  115. #define ESAI_xFCR_xWA_SHIFT 16
  116. #define ESAI_xFCR_xWA_WIDTH 3
  117. #define ESAI_xFCR_xWA_MASK (((1 << ESAI_xFCR_xWA_WIDTH) - 1) << ESAI_xFCR_xWA_SHIFT)
  118. #define ESAI_xFCR_xWA(v) (((8 - ((v) >> 2)) << ESAI_xFCR_xWA_SHIFT) & ESAI_xFCR_xWA_MASK)
  119. #define ESAI_xFCR_xFWM_SHIFT 8
  120. #define ESAI_xFCR_xFWM_WIDTH 8
  121. #define ESAI_xFCR_xFWM_MASK (((1 << ESAI_xFCR_xFWM_WIDTH) - 1) << ESAI_xFCR_xFWM_SHIFT)
  122. #define ESAI_xFCR_xFWM(v) ((((v) - 1) << ESAI_xFCR_xFWM_SHIFT) & ESAI_xFCR_xFWM_MASK)
  123. #define ESAI_xFCR_xE_SHIFT 2
  124. #define ESAI_xFCR_TE_WIDTH 6
  125. #define ESAI_xFCR_RE_WIDTH 4
  126. #define ESAI_xFCR_TE_MASK (((1 << ESAI_xFCR_TE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
  127. #define ESAI_xFCR_RE_MASK (((1 << ESAI_xFCR_RE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
  128. #define ESAI_xFCR_TE(x) ((ESAI_xFCR_TE_MASK >> (ESAI_xFCR_TE_WIDTH - x)) & ESAI_xFCR_TE_MASK)
  129. #define ESAI_xFCR_RE(x) ((ESAI_xFCR_RE_MASK >> (ESAI_xFCR_RE_WIDTH - x)) & ESAI_xFCR_RE_MASK)
  130. #define ESAI_xFCR_xFR_SHIFT 1
  131. #define ESAI_xFCR_xFR_MASK (1 << ESAI_xFCR_xFR_SHIFT)
  132. #define ESAI_xFCR_xFR (1 << ESAI_xFCR_xFR_SHIFT)
  133. #define ESAI_xFCR_xFEN_SHIFT 0
  134. #define ESAI_xFCR_xFEN_MASK (1 << ESAI_xFCR_xFEN_SHIFT)
  135. #define ESAI_xFCR_xFEN (1 << ESAI_xFCR_xFEN_SHIFT)
  136. /*
  137. * Transmit FIFO Status Register -- REG_ESAI_TFSR 0x14
  138. * Receive FIFO Status Register --REG_ESAI_RFSR 0x1C
  139. */
  140. #define ESAI_xFSR_NTFO_SHIFT 12
  141. #define ESAI_xFSR_NRFI_SHIFT 12
  142. #define ESAI_xFSR_NTFI_SHIFT 8
  143. #define ESAI_xFSR_NRFO_SHIFT 8
  144. #define ESAI_xFSR_NTFx_WIDTH 3
  145. #define ESAI_xFSR_NRFx_WIDTH 2
  146. #define ESAI_xFSR_NTFO_MASK (((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFO_SHIFT)
  147. #define ESAI_xFSR_NTFI_MASK (((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFI_SHIFT)
  148. #define ESAI_xFSR_NRFO_MASK (((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFO_SHIFT)
  149. #define ESAI_xFSR_NRFI_MASK (((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFI_SHIFT)
  150. #define ESAI_xFSR_xFCNT_SHIFT 0
  151. #define ESAI_xFSR_xFCNT_WIDTH 8
  152. #define ESAI_xFSR_xFCNT_MASK (((1 << ESAI_xFSR_xFCNT_WIDTH) - 1) << ESAI_xFSR_xFCNT_SHIFT)
  153. /* ESAI Transmit Slot Register -- REG_ESAI_TSR 0x98 */
  154. #define ESAI_TSR_SHIFT 0
  155. #define ESAI_TSR_WIDTH 24
  156. #define ESAI_TSR_MASK (((1 << ESAI_TSR_WIDTH) - 1) << ESAI_TSR_SHIFT)
  157. /* Serial Audio Interface Status Register -- REG_ESAI_SAISR 0xCC */
  158. #define ESAI_SAISR_TODFE_SHIFT 17
  159. #define ESAI_SAISR_TODFE_MASK (1 << ESAI_SAISR_TODFE_SHIFT)
  160. #define ESAI_SAISR_TODFE (1 << ESAI_SAISR_TODFE_SHIFT)
  161. #define ESAI_SAISR_TEDE_SHIFT 16
  162. #define ESAI_SAISR_TEDE_MASK (1 << ESAI_SAISR_TEDE_SHIFT)
  163. #define ESAI_SAISR_TEDE (1 << ESAI_SAISR_TEDE_SHIFT)
  164. #define ESAI_SAISR_TDE_SHIFT 15
  165. #define ESAI_SAISR_TDE_MASK (1 << ESAI_SAISR_TDE_SHIFT)
  166. #define ESAI_SAISR_TDE (1 << ESAI_SAISR_TDE_SHIFT)
  167. #define ESAI_SAISR_TUE_SHIFT 14
  168. #define ESAI_SAISR_TUE_MASK (1 << ESAI_SAISR_TUE_SHIFT)
  169. #define ESAI_SAISR_TUE (1 << ESAI_SAISR_TUE_SHIFT)
  170. #define ESAI_SAISR_TFS_SHIFT 13
  171. #define ESAI_SAISR_TFS_MASK (1 << ESAI_SAISR_TFS_SHIFT)
  172. #define ESAI_SAISR_TFS (1 << ESAI_SAISR_TFS_SHIFT)
  173. #define ESAI_SAISR_RODF_SHIFT 10
  174. #define ESAI_SAISR_RODF_MASK (1 << ESAI_SAISR_RODF_SHIFT)
  175. #define ESAI_SAISR_RODF (1 << ESAI_SAISR_RODF_SHIFT)
  176. #define ESAI_SAISR_REDF_SHIFT 9
  177. #define ESAI_SAISR_REDF_MASK (1 << ESAI_SAISR_REDF_SHIFT)
  178. #define ESAI_SAISR_REDF (1 << ESAI_SAISR_REDF_SHIFT)
  179. #define ESAI_SAISR_RDF_SHIFT 8
  180. #define ESAI_SAISR_RDF_MASK (1 << ESAI_SAISR_RDF_SHIFT)
  181. #define ESAI_SAISR_RDF (1 << ESAI_SAISR_RDF_SHIFT)
  182. #define ESAI_SAISR_ROE_SHIFT 7
  183. #define ESAI_SAISR_ROE_MASK (1 << ESAI_SAISR_ROE_SHIFT)
  184. #define ESAI_SAISR_ROE (1 << ESAI_SAISR_ROE_SHIFT)
  185. #define ESAI_SAISR_RFS_SHIFT 6
  186. #define ESAI_SAISR_RFS_MASK (1 << ESAI_SAISR_RFS_SHIFT)
  187. #define ESAI_SAISR_RFS (1 << ESAI_SAISR_RFS_SHIFT)
  188. #define ESAI_SAISR_IF2_SHIFT 2
  189. #define ESAI_SAISR_IF2_MASK (1 << ESAI_SAISR_IF2_SHIFT)
  190. #define ESAI_SAISR_IF2 (1 << ESAI_SAISR_IF2_SHIFT)
  191. #define ESAI_SAISR_IF1_SHIFT 1
  192. #define ESAI_SAISR_IF1_MASK (1 << ESAI_SAISR_IF1_SHIFT)
  193. #define ESAI_SAISR_IF1 (1 << ESAI_SAISR_IF1_SHIFT)
  194. #define ESAI_SAISR_IF0_SHIFT 0
  195. #define ESAI_SAISR_IF0_MASK (1 << ESAI_SAISR_IF0_SHIFT)
  196. #define ESAI_SAISR_IF0 (1 << ESAI_SAISR_IF0_SHIFT)
  197. /* Serial Audio Interface Control Register -- REG_ESAI_SAICR 0xD0 */
  198. #define ESAI_SAICR_ALC_SHIFT 8
  199. #define ESAI_SAICR_ALC_MASK (1 << ESAI_SAICR_ALC_SHIFT)
  200. #define ESAI_SAICR_ALC (1 << ESAI_SAICR_ALC_SHIFT)
  201. #define ESAI_SAICR_TEBE_SHIFT 7
  202. #define ESAI_SAICR_TEBE_MASK (1 << ESAI_SAICR_TEBE_SHIFT)
  203. #define ESAI_SAICR_TEBE (1 << ESAI_SAICR_TEBE_SHIFT)
  204. #define ESAI_SAICR_SYNC_SHIFT 6
  205. #define ESAI_SAICR_SYNC_MASK (1 << ESAI_SAICR_SYNC_SHIFT)
  206. #define ESAI_SAICR_SYNC (1 << ESAI_SAICR_SYNC_SHIFT)
  207. #define ESAI_SAICR_OF2_SHIFT 2
  208. #define ESAI_SAICR_OF2_MASK (1 << ESAI_SAICR_OF2_SHIFT)
  209. #define ESAI_SAICR_OF2 (1 << ESAI_SAICR_OF2_SHIFT)
  210. #define ESAI_SAICR_OF1_SHIFT 1
  211. #define ESAI_SAICR_OF1_MASK (1 << ESAI_SAICR_OF1_SHIFT)
  212. #define ESAI_SAICR_OF1 (1 << ESAI_SAICR_OF1_SHIFT)
  213. #define ESAI_SAICR_OF0_SHIFT 0
  214. #define ESAI_SAICR_OF0_MASK (1 << ESAI_SAICR_OF0_SHIFT)
  215. #define ESAI_SAICR_OF0 (1 << ESAI_SAICR_OF0_SHIFT)
  216. /*
  217. * Transmit Control Register -- REG_ESAI_TCR 0xD4
  218. * Receive Control Register -- REG_ESAI_RCR 0xDC
  219. */
  220. #define ESAI_xCR_xLIE_SHIFT 23
  221. #define ESAI_xCR_xLIE_MASK (1 << ESAI_xCR_xLIE_SHIFT)
  222. #define ESAI_xCR_xLIE (1 << ESAI_xCR_xLIE_SHIFT)
  223. #define ESAI_xCR_xIE_SHIFT 22
  224. #define ESAI_xCR_xIE_MASK (1 << ESAI_xCR_xIE_SHIFT)
  225. #define ESAI_xCR_xIE (1 << ESAI_xCR_xIE_SHIFT)
  226. #define ESAI_xCR_xEDIE_SHIFT 21
  227. #define ESAI_xCR_xEDIE_MASK (1 << ESAI_xCR_xEDIE_SHIFT)
  228. #define ESAI_xCR_xEDIE (1 << ESAI_xCR_xEDIE_SHIFT)
  229. #define ESAI_xCR_xEIE_SHIFT 20
  230. #define ESAI_xCR_xEIE_MASK (1 << ESAI_xCR_xEIE_SHIFT)
  231. #define ESAI_xCR_xEIE (1 << ESAI_xCR_xEIE_SHIFT)
  232. #define ESAI_xCR_xPR_SHIFT 19
  233. #define ESAI_xCR_xPR_MASK (1 << ESAI_xCR_xPR_SHIFT)
  234. #define ESAI_xCR_xPR (1 << ESAI_xCR_xPR_SHIFT)
  235. #define ESAI_xCR_PADC_SHIFT 17
  236. #define ESAI_xCR_PADC_MASK (1 << ESAI_xCR_PADC_SHIFT)
  237. #define ESAI_xCR_PADC (1 << ESAI_xCR_PADC_SHIFT)
  238. #define ESAI_xCR_xFSR_SHIFT 16
  239. #define ESAI_xCR_xFSR_MASK (1 << ESAI_xCR_xFSR_SHIFT)
  240. #define ESAI_xCR_xFSR (1 << ESAI_xCR_xFSR_SHIFT)
  241. #define ESAI_xCR_xFSL_SHIFT 15
  242. #define ESAI_xCR_xFSL_MASK (1 << ESAI_xCR_xFSL_SHIFT)
  243. #define ESAI_xCR_xFSL (1 << ESAI_xCR_xFSL_SHIFT)
  244. #define ESAI_xCR_xSWS_SHIFT 10
  245. #define ESAI_xCR_xSWS_WIDTH 5
  246. #define ESAI_xCR_xSWS_MASK (((1 << ESAI_xCR_xSWS_WIDTH) - 1) << ESAI_xCR_xSWS_SHIFT)
  247. #define ESAI_xCR_xSWS(s, w) ((w < 24 ? (s - w + ((w - 8) >> 2)) : (s < 32 ? 0x1e : 0x1f)) << ESAI_xCR_xSWS_SHIFT)
  248. #define ESAI_xCR_xMOD_SHIFT 8
  249. #define ESAI_xCR_xMOD_WIDTH 2
  250. #define ESAI_xCR_xMOD_MASK (((1 << ESAI_xCR_xMOD_WIDTH) - 1) << ESAI_xCR_xMOD_SHIFT)
  251. #define ESAI_xCR_xMOD_ONDEMAND (0x1 << ESAI_xCR_xMOD_SHIFT)
  252. #define ESAI_xCR_xMOD_NETWORK (0x1 << ESAI_xCR_xMOD_SHIFT)
  253. #define ESAI_xCR_xMOD_AC97 (0x3 << ESAI_xCR_xMOD_SHIFT)
  254. #define ESAI_xCR_xWA_SHIFT 7
  255. #define ESAI_xCR_xWA_MASK (1 << ESAI_xCR_xWA_SHIFT)
  256. #define ESAI_xCR_xWA (1 << ESAI_xCR_xWA_SHIFT)
  257. #define ESAI_xCR_xSHFD_SHIFT 6
  258. #define ESAI_xCR_xSHFD_MASK (1 << ESAI_xCR_xSHFD_SHIFT)
  259. #define ESAI_xCR_xSHFD (1 << ESAI_xCR_xSHFD_SHIFT)
  260. #define ESAI_xCR_xE_SHIFT 0
  261. #define ESAI_xCR_TE_WIDTH 6
  262. #define ESAI_xCR_RE_WIDTH 4
  263. #define ESAI_xCR_TE_MASK (((1 << ESAI_xCR_TE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
  264. #define ESAI_xCR_RE_MASK (((1 << ESAI_xCR_RE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
  265. #define ESAI_xCR_TE(x) ((ESAI_xCR_TE_MASK >> (ESAI_xCR_TE_WIDTH - x)) & ESAI_xCR_TE_MASK)
  266. #define ESAI_xCR_RE(x) ((ESAI_xCR_RE_MASK >> (ESAI_xCR_RE_WIDTH - x)) & ESAI_xCR_RE_MASK)
  267. /*
  268. * Transmit Clock Control Register -- REG_ESAI_TCCR 0xD8
  269. * Receive Clock Control Register -- REG_ESAI_RCCR 0xE0
  270. */
  271. #define ESAI_xCCR_xHCKD_SHIFT 23
  272. #define ESAI_xCCR_xHCKD_MASK (1 << ESAI_xCCR_xHCKD_SHIFT)
  273. #define ESAI_xCCR_xHCKD (1 << ESAI_xCCR_xHCKD_SHIFT)
  274. #define ESAI_xCCR_xFSD_SHIFT 22
  275. #define ESAI_xCCR_xFSD_MASK (1 << ESAI_xCCR_xFSD_SHIFT)
  276. #define ESAI_xCCR_xFSD (1 << ESAI_xCCR_xFSD_SHIFT)
  277. #define ESAI_xCCR_xCKD_SHIFT 21
  278. #define ESAI_xCCR_xCKD_MASK (1 << ESAI_xCCR_xCKD_SHIFT)
  279. #define ESAI_xCCR_xCKD (1 << ESAI_xCCR_xCKD_SHIFT)
  280. #define ESAI_xCCR_xHCKP_SHIFT 20
  281. #define ESAI_xCCR_xHCKP_MASK (1 << ESAI_xCCR_xHCKP_SHIFT)
  282. #define ESAI_xCCR_xHCKP (1 << ESAI_xCCR_xHCKP_SHIFT)
  283. #define ESAI_xCCR_xFSP_SHIFT 19
  284. #define ESAI_xCCR_xFSP_MASK (1 << ESAI_xCCR_xFSP_SHIFT)
  285. #define ESAI_xCCR_xFSP (1 << ESAI_xCCR_xFSP_SHIFT)
  286. #define ESAI_xCCR_xCKP_SHIFT 18
  287. #define ESAI_xCCR_xCKP_MASK (1 << ESAI_xCCR_xCKP_SHIFT)
  288. #define ESAI_xCCR_xCKP (1 << ESAI_xCCR_xCKP_SHIFT)
  289. #define ESAI_xCCR_xFP_SHIFT 14
  290. #define ESAI_xCCR_xFP_WIDTH 4
  291. #define ESAI_xCCR_xFP_MASK (((1 << ESAI_xCCR_xFP_WIDTH) - 1) << ESAI_xCCR_xFP_SHIFT)
  292. #define ESAI_xCCR_xFP(v) ((((v) - 1) << ESAI_xCCR_xFP_SHIFT) & ESAI_xCCR_xFP_MASK)
  293. #define ESAI_xCCR_xDC_SHIFT 9
  294. #define ESAI_xCCR_xDC_WIDTH 5
  295. #define ESAI_xCCR_xDC_MASK (((1 << ESAI_xCCR_xDC_WIDTH) - 1) << ESAI_xCCR_xDC_SHIFT)
  296. #define ESAI_xCCR_xDC(v) ((((v) - 1) << ESAI_xCCR_xDC_SHIFT) & ESAI_xCCR_xDC_MASK)
  297. #define ESAI_xCCR_xPSR_SHIFT 8
  298. #define ESAI_xCCR_xPSR_MASK (1 << ESAI_xCCR_xPSR_SHIFT)
  299. #define ESAI_xCCR_xPSR_BYPASS (1 << ESAI_xCCR_xPSR_SHIFT)
  300. #define ESAI_xCCR_xPSR_DIV8 (0 << ESAI_xCCR_xPSR_SHIFT)
  301. #define ESAI_xCCR_xPM_SHIFT 0
  302. #define ESAI_xCCR_xPM_WIDTH 8
  303. #define ESAI_xCCR_xPM_MASK (((1 << ESAI_xCCR_xPM_WIDTH) - 1) << ESAI_xCCR_xPM_SHIFT)
  304. #define ESAI_xCCR_xPM(v) ((((v) - 1) << ESAI_xCCR_xPM_SHIFT) & ESAI_xCCR_xPM_MASK)
  305. /* Transmit Slot Mask Register A/B -- REG_ESAI_TSMA/B 0xE4 ~ 0xF0 */
  306. #define ESAI_xSMA_xS_SHIFT 0
  307. #define ESAI_xSMA_xS_WIDTH 16
  308. #define ESAI_xSMA_xS_MASK (((1 << ESAI_xSMA_xS_WIDTH) - 1) << ESAI_xSMA_xS_SHIFT)
  309. #define ESAI_xSMA_xS(v) ((v) & ESAI_xSMA_xS_MASK)
  310. #define ESAI_xSMB_xS_SHIFT 0
  311. #define ESAI_xSMB_xS_WIDTH 16
  312. #define ESAI_xSMB_xS_MASK (((1 << ESAI_xSMB_xS_WIDTH) - 1) << ESAI_xSMB_xS_SHIFT)
  313. #define ESAI_xSMB_xS(v) (((v) >> ESAI_xSMA_xS_WIDTH) & ESAI_xSMB_xS_MASK)
  314. /* Port C Direction Register -- REG_ESAI_PRRC 0xF8 */
  315. #define ESAI_PRRC_PDC_SHIFT 0
  316. #define ESAI_PRRC_PDC_WIDTH 12
  317. #define ESAI_PRRC_PDC_MASK (((1 << ESAI_PRRC_PDC_WIDTH) - 1) << ESAI_PRRC_PDC_SHIFT)
  318. #define ESAI_PRRC_PDC(v) ((v) & ESAI_PRRC_PDC_MASK)
  319. /* Port C Control Register -- REG_ESAI_PCRC 0xFC */
  320. #define ESAI_PCRC_PC_SHIFT 0
  321. #define ESAI_PCRC_PC_WIDTH 12
  322. #define ESAI_PCRC_PC_MASK (((1 << ESAI_PCRC_PC_WIDTH) - 1) << ESAI_PCRC_PC_SHIFT)
  323. #define ESAI_PCRC_PC(v) ((v) & ESAI_PCRC_PC_MASK)
  324. #define ESAI_GPIO 0xfff
  325. /* ESAI clock source */
  326. #define ESAI_HCKT_FSYS 0
  327. #define ESAI_HCKT_EXTAL 1
  328. #define ESAI_HCKR_FSYS 2
  329. #define ESAI_HCKR_EXTAL 3
  330. /* ESAI clock divider */
  331. #define ESAI_TX_DIV_PSR 0
  332. #define ESAI_TX_DIV_PM 1
  333. #define ESAI_TX_DIV_FP 2
  334. #define ESAI_RX_DIV_PSR 3
  335. #define ESAI_RX_DIV_PM 4
  336. #define ESAI_RX_DIV_FP 5
  337. #endif /* _FSL_ESAI_DAI_H */