sun8iw19-codec.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. /*
  2. * Copyright (c) 2019-2025 Allwinner Technology Co., Ltd. ALL rights reserved.
  3. *
  4. * Allwinner is a trademark of Allwinner Technology Co.,Ltd., registered in
  5. * the the people's Republic of China and other countries.
  6. * All Allwinner Technology Co.,Ltd. trademarks are used with permission.
  7. *
  8. * DISCLAIMER
  9. * THIRD PARTY LICENCES MAY BE REQUIRED TO IMPLEMENT THE SOLUTION/PRODUCT.
  10. * IF YOU NEED TO INTEGRATE THIRD PARTY’S TECHNOLOGY (SONY, DTS, DOLBY, AVS OR MPEGLA, ETC.)
  11. * IN ALLWINNERS’SDK OR PRODUCTS, YOU SHALL BE SOLELY RESPONSIBLE TO OBTAIN
  12. * ALL APPROPRIATELY REQUIRED THIRD PARTY LICENCES.
  13. * ALLWINNER SHALL HAVE NO WARRANTY, INDEMNITY OR OTHER OBLIGATIONS WITH RESPECT TO MATTERS
  14. * COVERED UNDER ANY REQUIRED THIRD PARTY LICENSE.
  15. * YOU ARE SOLELY RESPONSIBLE FOR YOUR USAGE OF THIRD PARTY’S TECHNOLOGY.
  16. *
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY ALLWINNER"AS IS" AND TO THE MAXIMUM EXTENT
  19. * PERMITTED BY LAW, ALLWINNER EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND,
  20. * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION REGARDING
  21. * THE TITLE, NON-INFRINGEMENT, ACCURACY, CONDITION, COMPLETENESS, PERFORMANCE
  22. * OR MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  23. * IN NO EVENT SHALL ALLWINNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  25. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  26. * LOSS OF USE, DATA, OR PROFITS, OR BUSINESS INTERRUPTION)
  27. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  28. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  30. * OF THE POSSIBILITY OF SUCH DAMAGE.
  31. */
  32. #ifndef _SUN8IW19_CODEC_H
  33. #define _SUN8IW19_CODEC_H
  34. #define SUNXI_CODEC_BASE_ADDR (0x05096000)
  35. #define SUNXI_DAC_DPC 0x00
  36. #define SUNXI_DAC_FIFOC 0x10
  37. #define SUNXI_DAC_FIFOS 0x14
  38. #define SUNXI_DAC_TXDATA 0X20
  39. #define SUNXI_DAC_CNT 0x24
  40. #define SUNXI_DAC_DG 0x28
  41. #define SUNXI_ADC_FIFOC 0x30
  42. #define SUNXI_ADC_FIFOS 0x38
  43. #define SUNXI_ADC_RXDATA 0x40
  44. #define SUNXI_ADC_CNT 0x44
  45. #define SUNXI_ADC_DG 0x4C
  46. #define SUNXI_DAC_DAP_CTL 0xF0
  47. #define SUNXI_ADC_DAP_CTL 0xF8
  48. #define SUNXI_DAC_DRC_HHPFC 0x100
  49. #define SUNXI_DAC_DRC_LHPFC 0x104
  50. #define SUNXI_DAC_DRC_CTRL 0x108
  51. #define SUNXI_DAC_DRC_LPFHAT 0x10C
  52. #define SUNXI_DAC_DRC_LPFLAT 0x110
  53. #define SUNXI_DAC_DRC_RPFHAT 0x114
  54. #define SUNXI_DAC_DRC_RPFLAT 0x118
  55. #define SUNXI_DAC_DRC_LPFHRT 0x11C
  56. #define SUNXI_DAC_DRC_LPFLRT 0x120
  57. #define SUNXI_DAC_DRC_RPFHRT 0x124
  58. #define SUNXI_DAC_DRC_RPFLRT 0x128
  59. #define SUNXI_DAC_DRC_LRMSHAT 0x12C
  60. #define SUNXI_DAC_DRC_LRMSLAT 0x130
  61. #define SUNXI_DAC_DRC_RRMSHAT 0x134
  62. #define SUNXI_DAC_DRC_RRMSLAT 0x138
  63. #define SUNXI_DAC_DRC_HCT 0x13C
  64. #define SUNXI_DAC_DRC_LCT 0x140
  65. #define SUNXI_DAC_DRC_HKC 0x144
  66. #define SUNXI_DAC_DRC_LKC 0x148
  67. #define SUNXI_DAC_DRC_HOPC 0x14C
  68. #define SUNXI_DAC_DRC_LOPC 0x150
  69. #define SUNXI_DAC_DRC_HLT 0x154
  70. #define SUNXI_DAC_DRC_LLT 0x158
  71. #define SUNXI_DAC_DRC_HKI 0x15C
  72. #define SUNXI_DAC_DRC_LKI 0x160
  73. #define SUNXI_DAC_DRC_HOPL 0x164
  74. #define SUNXI_DAC_DRC_LOPL 0x168
  75. #define SUNXI_DAC_DRC_HET 0x16C
  76. #define SUNXI_DAC_DRC_LET 0x170
  77. #define SUNXI_DAC_DRC_HKE 0x174
  78. #define SUNXI_DAC_DRC_LKE 0x178
  79. #define SUNXI_DAC_DRC_HOPE 0x17C
  80. #define SUNXI_DAC_DRC_LOPE 0x180
  81. #define SUNXI_DAC_DRC_HKN 0x184
  82. #define SUNXI_DAC_DRC_LKN 0x188
  83. #define SUNXI_DAC_DRC_SFHAT 0x18C
  84. #define SUNXI_DAC_DRC_SFLAT 0x190
  85. #define SUNXI_DAC_DRC_SFHRT 0x194
  86. #define SUNXI_DAC_DRC_SFLRT 0x198
  87. #define SUNXI_DAC_DRC_MXGHS 0x19C
  88. #define SUNXI_DAC_DRC_MXGLS 0x1A0
  89. #define SUNXI_DAC_DRC_MNGHS 0x1A4
  90. #define SUNXI_DAC_DRC_MNGLS 0x1A8
  91. #define SUNXI_DAC_DRC_EPSHC 0x1AC
  92. #define SUNXI_DAC_DRC_EPSLC 0x1B0
  93. #define SUNXI_DAC_DRC_OPT 0x1B4
  94. #define SUNXI_DAC_DRC_HPFHGAIN 0x1B8
  95. #define SUNXI_DAC_DRC_HPFLGAIN 0x1BC
  96. #define SUNXI_ADC_DRC_HHPFC 0x200
  97. #define SUNXI_ADC_DRC_LHPFC 0x204
  98. #define SUNXI_ADC_DRC_CTRL 0x208
  99. #define SUNXI_ADC_DRC_LPFHAT 0x20C
  100. #define SUNXI_ADC_DRC_LPFLAT 0x210
  101. #define SUNXI_ADC_DRC_RPFHAT 0x214
  102. #define SUNXI_ADC_DRC_RPFLAT 0x218
  103. #define SUNXI_ADC_DRC_LPFHRT 0x21C
  104. #define SUNXI_ADC_DRC_LPFLRT 0x220
  105. #define SUNXI_ADC_DRC_RPFHRT 0x224
  106. #define SUNXI_ADC_DRC_RPFLRT 0x228
  107. #define SUNXI_ADC_DRC_LRMSHAT 0x22C
  108. #define SUNXI_ADC_DRC_LRMSLAT 0x230
  109. #define SUNXI_ADC_DRC_HCT 0x23C
  110. #define SUNXI_ADC_DRC_LCT 0x240
  111. #define SUNXI_ADC_DRC_HKC 0x244
  112. #define SUNXI_ADC_DRC_LKC 0x248
  113. #define SUNXI_ADC_DRC_HOPC 0x24C
  114. #define SUNXI_ADC_DRC_LOPC 0x250
  115. #define SUNXI_ADC_DRC_HLT 0x254
  116. #define SUNXI_ADC_DRC_LLT 0x258
  117. #define SUNXI_ADC_DRC_HKI 0x25C
  118. #define SUNXI_ADC_DRC_LKI 0x260
  119. #define SUNXI_ADC_DRC_HOPL 0x264
  120. #define SUNXI_ADC_DRC_LOPL 0x268
  121. #define SUNXI_ADC_DRC_HET 0x26C
  122. #define SUNXI_ADC_DRC_LET 0x270
  123. #define SUNXI_ADC_DRC_HKE 0x274
  124. #define SUNXI_ADC_DRC_LKE 0x278
  125. #define SUNXI_ADC_DRC_HOPE 0x27C
  126. #define SUNXI_ADC_DRC_LOPE 0x280
  127. #define SUNXI_ADC_DRC_HKN 0x284
  128. #define SUNXI_ADC_DRC_LKN 0x288
  129. #define SUNXI_ADC_DRC_SFHAT 0x28C
  130. #define SUNXI_ADC_DRC_SFLAT 0x290
  131. #define SUNXI_ADC_DRC_SFHRT 0x294
  132. #define SUNXI_ADC_DRC_SFLRT 0x298
  133. #define SUNXI_ADC_DRC_MXGHS 0x29C
  134. #define SUNXI_ADC_DRC_MXGLS 0x2A0
  135. #define SUNXI_ADC_DRC_MNGHS 0x2A4
  136. #define SUNXI_ADC_DRC_MNGLS 0x2A8
  137. #define SUNXI_ADC_DRC_EPSHC 0x2AC
  138. #define SUNXI_ADC_DRC_EPSLC 0x2B0
  139. #define SUNXI_ADC_DRC_OPT 0x2B4
  140. #define SUNXI_ADC_DRC_HPFHGAIN 0x2B8
  141. #define SUNXI_ADC_DRC_HPFLGAIN 0x2BC
  142. #define SUNXI_AC_VERSION 0x2C0
  143. /* Analog register base - Digital register base */
  144. /*SUNXI_PR_CFG is to tear the acreg and dcreg, it is of no real meaning*/
  145. #define SUNXI_PR_CFG (0x300)
  146. #define SUNXI_ADCL_ANA_CTL (SUNXI_PR_CFG + 0x00)
  147. #define SUNXI_DAC_ANA_CTL (SUNXI_PR_CFG + 0x10)
  148. #define SUNXI_MICBIAS_ANA_CTL (SUNXI_PR_CFG + 0x18)
  149. #define SUNXI_BIAS_ANA_CTL (SUNXI_PR_CFG + 0x20)
  150. /* SUNXI_DAC_DPC:0x00 */
  151. #define EN_DAC 31
  152. #define MODQU 25
  153. #define DWA_EN 24
  154. #define HPF_EN 18
  155. #define DVOL 12
  156. #define DAC_HUB_EN 0
  157. /* SUNXI_DAC_FIFOC:0x10 */
  158. #define DAC_FS 29
  159. #define FIR_VER 28
  160. #define SEND_LASAT 26
  161. #define FIFO_MODE 24
  162. #define DAC_DRQ_CLR_CNT 21
  163. #define TX_TRIG_LEVEL 8
  164. #define DAC_MONO_EN 6
  165. #define TX_SAMPLE_BITS 5
  166. #define DAC_DRQ_EN 4
  167. #define DAC_IRQ_EN 3
  168. #define FIFO_UNDERRUN_IRQ_EN 2
  169. #define FIFO_OVERRUN_IRQ_EN 1
  170. #define FIFO_FLUSH 0
  171. /* SUNXI_DAC_FIFOS:0x14 */
  172. #define TX_EMPTY 23
  173. #define DAC_TXE_CNT 8
  174. #define DAC_TXE_INT 3
  175. #define DAC_TXU_INT 2
  176. #define DAC_TXO_INT 1
  177. /* SUNXI_DAC_DG:0x28 */
  178. #define DAC_MODU_SEL 11
  179. #define DAC_PATTERN_SEL 9
  180. #define DAC_CODEC_CLK_SEL 8
  181. #define DAC_SWP 6
  182. #define ADDA_LOOP_MODE 0
  183. /* SUNXI_ADC_FIFOC:0x30 */
  184. #define ADC_FS 29
  185. #define EN_AD 28
  186. #define ADCFDT 26
  187. #define ADCDFEN 25
  188. #define RX_FIFO_MODE 24
  189. #define RX_SAMPLE_BITS 16
  190. #define ADC_CHAN_SEL 12
  191. #define RX_FIFO_TRG_LEVEL 4
  192. #define ADC_DRQ_EN 3
  193. #define ADC_IRQ_EN 2
  194. #define ADC_OVERRUN_IRQ_EN 1
  195. #define ADC_FIFO_FLUSH 0
  196. /* SUNXI_ADC_FIFOS:0x38 */
  197. #define RXA 23
  198. #define ADC_RXA_CNT 8
  199. #define ADC_RXA_INT 3
  200. #define ADC_RXO_INT 1
  201. /* SUNXI_ADC_DG:0x4C */
  202. #define AD_SWP 24
  203. /* SUNXI_DAC_DAP_CTL:0xf0 */
  204. #define DDAP_EN 31
  205. #define DDAP_DRC_EN 29
  206. #define DDAP_HPF_EN 28
  207. /* SUNXI_ADC_DAP_CTL:0xf8 */
  208. #define ADC_DAP0_EN 31
  209. #define ADC_DRC0_EN 29
  210. #define ADC_HPF0_EN 28
  211. /* SUNXI_DAC_DRC_HHPFC : 0x100*/
  212. #define DAC_HHPF_CONF 0
  213. /* SUNXI_DAC_DRC_LHPFC : 0x104*/
  214. #define DAC_LHPF_CONF 0
  215. /* SUNXI_DAC_DRC_CTRL : 0x108*/
  216. #define DAC_DRC_DELAY_OUT_STATE 15
  217. #define DAC_DRC_SIGNAL_DELAY 8
  218. #define DAC_DRC_DELAY_BUF_EN 7
  219. #define DAC_DRC_GAIN_MAX_EN 6
  220. #define DAC_DRC_GAIN_MIN_EN 5
  221. #define DAC_DRC_NOISE_DET_EN 4
  222. #define DAC_DRC_SIGNAL_SEL 3
  223. #define DAC_DRC_DELAY_EN 2
  224. #define DAC_DRC_LT_EN 1
  225. #define DAC_DRC_ET_EN 0
  226. /* SUNXI_ADC_DRC_HHPFC : 0x200*/
  227. #define ADC_HHPF_CONF 0
  228. /* SUNXI_ADC_DRC_LHPFC : 0x204*/
  229. #define ADC_LHPF_CONF 0
  230. /* SUNXI_ADC_DRC_CTRL : 0x208*/
  231. #define ADC_DRC_DELAY_OUT_STATE 15
  232. #define ADC_DRC_SIGNAL_DELAY 8
  233. #define ADC_DRC_DELAY_BUF_EN 7
  234. #define ADC_DRC_GAIN_MAX_EN 6
  235. #define ADC_DRC_GAIN_MIN_EN 5
  236. #define ADC_DRC_NOISE_DET_EN 4
  237. #define ADC_DRC_SIGNAL_SEL 3
  238. #define ADC_DRC_DELAY_EN 2
  239. #define ADC_DRC_LT_EN 1
  240. #define ADC_DRC_ER_EN 0
  241. /* SUNXI_ADCL_ANA_CTL: SUNXI_PR_CFG + 0x00 */
  242. #define ADCLEN 31
  243. #define MIC1AMPEN 30
  244. #define ADC_DITHER_RESET 29
  245. #define LINEINLEN 23
  246. #define LINEINLG 22
  247. #define IOPLINE 20
  248. #define PGA_CTRL_RCM 18
  249. #define PGA_IN_VCM_CTRL 16
  250. #define PGA_GAIN_CTRL 8
  251. #define ADCL_IOPAAFL 6
  252. #define ADCLIOPSDML1 4
  253. #define ADCLIOPSDML2 2
  254. #define PGA_IOPMICL 0
  255. /* SUNXI_DAC_ANA_CTL: SUNXI_PR_CFG + 0x10 */
  256. #define CURRENT_TEST_SELECT 23
  257. #define VRA2_IOPVRS 20
  258. #define ILINEOUTAMPS 18
  259. #define IOPDACS 16
  260. #define DACLEN 15
  261. #define LINEOUTL_EN 13
  262. #define DACLMUTE 12
  263. #define LINEOUTLDIFFEN 6
  264. #define LINEOUT_VOL 0
  265. /* SUNXI_MICBIAS_ANA_CTL: SUNXI_PR_CFG + 0x18 */
  266. #define MMICBIASEN 7
  267. #define MBIASSEL 5
  268. #define MMICBIAS_CHOP_EN 4
  269. #define MMICBIAS_CHOP_CLK_SEL 2
  270. /* SUNXI_BIAS_ANA_CTL: SUNXI_PR_CFG + 0x20 */
  271. #define AC_BIASDATA 0
  272. #define CODEC_REG_LABEL(constant) {#constant, constant, 0}
  273. #define CODEC_REG_LABEL_END {NULL, 0, 0}
  274. /* SUNXI_CODEC_DAP_ENABLE: Whether to use the adc/dac drc/hpf function */
  275. #define SUNXI_CODEC_DAP_ENABLE
  276. /* SUNXI_ADC_DAUDIO_SYNC: Whether to enable ADC AEC Drive adaptation */
  277. /* #define SUNXI_ADC_DAUDIO_SYNC */
  278. extern int sunxi_codec_get_pcm_trigger_substream_mode(void);
  279. extern void sunxi_codec_set_pcm_trigger_substream_mode(int value);
  280. extern int sunxi_codec_get_pcm_adc_sync_flag(void);
  281. extern void sunxi_codec_set_pcm_adc_sync_flag(int value);
  282. extern void sunxi_cpudai_adc_drq_enable(bool enable);
  283. #endif /* __SUN8IW19_CODEC_H */