sun8iw20-codec.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  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 _SUN8IW20_CODEC_H
  33. #define _SUN8IW20_CODEC_H
  34. #define SUNXI_CODEC_BASE_ADDR (0x02030000ul)
  35. #define SUNXI_CODEC_IRQ 41
  36. #define SUNXI_CODEC_JACK_DET GPIOE(9)
  37. #define SUNXI_DAC_DPC 0x00
  38. #define SUNXI_DAC_VOL_CTL 0x04
  39. #define SUNXI_DAC_FIFOC 0x10
  40. #define SUNXI_DAC_FIFOS 0x14
  41. #define SUNXI_DAC_TXDATA 0X20
  42. #define SUNXI_DAC_CNT 0x24
  43. #define SUNXI_DAC_DG 0x28
  44. #define SUNXI_ADC_FIFOC 0x30
  45. #define SUNXI_ADC_VOL_CTL1 0x34
  46. #define SUNXI_ADC_FIFOS 0x38
  47. #define SUNXI_ADC_RXDATA 0x40
  48. #define SUNXI_ADC_CNT 0x44
  49. #define SUNXI_ADC_DG 0x4C
  50. #define SUNXI_ADC_DIG_CTL 0x50
  51. #define SUNXI_DAC_DAP_CTL 0xF0
  52. #define SUNXI_ADC_DAP_CTL 0xF8
  53. #define SUNXI_DAC_DRC_HHPFC 0x100
  54. #define SUNXI_DAC_DRC_LHPFC 0x104
  55. #define SUNXI_DAC_DRC_CTRL 0x108
  56. #define SUNXI_DAC_DRC_LPFHAT 0x10C
  57. #define SUNXI_DAC_DRC_LPFLAT 0x110
  58. #define SUNXI_DAC_DRC_RPFHAT 0x114
  59. #define SUNXI_DAC_DRC_RPFLAT 0x118
  60. #define SUNXI_DAC_DRC_LPFHRT 0x11C
  61. #define SUNXI_DAC_DRC_LPFLRT 0x120
  62. #define SUNXI_DAC_DRC_RPFHRT 0x124
  63. #define SUNXI_DAC_DRC_RPFLRT 0x128
  64. #define SUNXI_DAC_DRC_LRMSHAT 0x12C
  65. #define SUNXI_DAC_DRC_LRMSLAT 0x130
  66. #define SUNXI_DAC_DRC_RRMSHAT 0x134
  67. #define SUNXI_DAC_DRC_RRMSLAT 0x138
  68. #define SUNXI_DAC_DRC_HCT 0x13C
  69. #define SUNXI_DAC_DRC_LCT 0x140
  70. #define SUNXI_DAC_DRC_HKC 0x144
  71. #define SUNXI_DAC_DRC_LKC 0x148
  72. #define SUNXI_DAC_DRC_HOPC 0x14C
  73. #define SUNXI_DAC_DRC_LOPC 0x150
  74. #define SUNXI_DAC_DRC_HLT 0x154
  75. #define SUNXI_DAC_DRC_LLT 0x158
  76. #define SUNXI_DAC_DRC_HKI 0x15C
  77. #define SUNXI_DAC_DRC_LKI 0x160
  78. #define SUNXI_DAC_DRC_HOPL 0x164
  79. #define SUNXI_DAC_DRC_LOPL 0x168
  80. #define SUNXI_DAC_DRC_HET 0x16C
  81. #define SUNXI_DAC_DRC_LET 0x170
  82. #define SUNXI_DAC_DRC_HKE 0x174
  83. #define SUNXI_DAC_DRC_LKE 0x178
  84. #define SUNXI_DAC_DRC_HOPE 0x17C
  85. #define SUNXI_DAC_DRC_LOPE 0x180
  86. #define SUNXI_DAC_DRC_HKN 0x184
  87. #define SUNXI_DAC_DRC_LKN 0x188
  88. #define SUNXI_DAC_DRC_SFHAT 0x18C
  89. #define SUNXI_DAC_DRC_SFLAT 0x190
  90. #define SUNXI_DAC_DRC_SFHRT 0x194
  91. #define SUNXI_DAC_DRC_SFLRT 0x198
  92. #define SUNXI_DAC_DRC_MXGHS 0x19C
  93. #define SUNXI_DAC_DRC_MXGLS 0x1A0
  94. #define SUNXI_DAC_DRC_MNGHS 0x1A4
  95. #define SUNXI_DAC_DRC_MNGLS 0x1A8
  96. #define SUNXI_DAC_DRC_EPSHC 0x1AC
  97. #define SUNXI_DAC_DRC_EPSLC 0x1B0
  98. #define SUNXI_DAC_DRC_OPT 0x1B4
  99. #define SUNXI_DAC_DRC_HPFHGAIN 0x1B8
  100. #define SUNXI_DAC_DRC_HPFLGAIN 0x1BC
  101. #define SUNXI_ADC_DRC_HHPFC 0x200
  102. #define SUNXI_ADC_DRC_LHPFC 0x204
  103. #define SUNXI_ADC_DRC_CTRL 0x208
  104. #define SUNXI_ADC_DRC_LPFHAT 0x20C
  105. #define SUNXI_ADC_DRC_LPFLAT 0x210
  106. #define SUNXI_ADC_DRC_RPFHAT 0x214
  107. #define SUNXI_ADC_DRC_RPFLAT 0x218
  108. #define SUNXI_ADC_DRC_LPFHRT 0x21C
  109. #define SUNXI_ADC_DRC_LPFLRT 0x220
  110. #define SUNXI_ADC_DRC_RPFHRT 0x224
  111. #define SUNXI_ADC_DRC_RPFLRT 0x228
  112. #define SUNXI_ADC_DRC_LRMSHAT 0x22C
  113. #define SUNXI_ADC_DRC_LRMSLAT 0x230
  114. #define SUNXI_ADC_DRC_HCT 0x23C
  115. #define SUNXI_ADC_DRC_LCT 0x240
  116. #define SUNXI_ADC_DRC_HKC 0x244
  117. #define SUNXI_ADC_DRC_LKC 0x248
  118. #define SUNXI_ADC_DRC_HOPC 0x24C
  119. #define SUNXI_ADC_DRC_LOPC 0x250
  120. #define SUNXI_ADC_DRC_HLT 0x254
  121. #define SUNXI_ADC_DRC_LLT 0x258
  122. #define SUNXI_ADC_DRC_HKI 0x25C
  123. #define SUNXI_ADC_DRC_LKI 0x260
  124. #define SUNXI_ADC_DRC_HOPL 0x264
  125. #define SUNXI_ADC_DRC_LOPL 0x268
  126. #define SUNXI_ADC_DRC_HET 0x26C
  127. #define SUNXI_ADC_DRC_LET 0x270
  128. #define SUNXI_ADC_DRC_HKE 0x274
  129. #define SUNXI_ADC_DRC_LKE 0x278
  130. #define SUNXI_ADC_DRC_HOPE 0x27C
  131. #define SUNXI_ADC_DRC_LOPE 0x280
  132. #define SUNXI_ADC_DRC_HKN 0x284
  133. #define SUNXI_ADC_DRC_LKN 0x288
  134. #define SUNXI_ADC_DRC_SFHAT 0x28C
  135. #define SUNXI_ADC_DRC_SFLAT 0x290
  136. #define SUNXI_ADC_DRC_SFHRT 0x294
  137. #define SUNXI_ADC_DRC_SFLRT 0x298
  138. #define SUNXI_ADC_DRC_MXGHS 0x29C
  139. #define SUNXI_ADC_DRC_MXGLS 0x2A0
  140. #define SUNXI_ADC_DRC_MNGHS 0x2A4
  141. #define SUNXI_ADC_DRC_MNGLS 0x2A8
  142. #define SUNXI_ADC_DRC_EPSHC 0x2AC
  143. #define SUNXI_ADC_DRC_EPSLC 0x2B0
  144. #define SUNXI_ADC_DRC_OPT 0x2B4
  145. #define SUNXI_ADC_DRC_HPFHGAIN 0x2B8
  146. #define SUNXI_ADC_DRC_HPFLGAIN 0x2BC
  147. #define SUNXI_AC_VERSION 0x2C0
  148. /* Analog register */
  149. #define SUNXI_ADCL_REG 0x300
  150. #define SUNXI_ADCR_REG 0x304
  151. #define SUNXI_DAC_REG 0x310
  152. #define SUNXI_MICBIAS_REG 0x318
  153. #define SUNXI_BIAS_REG 0x320
  154. #define SUNXI_HEADPHONE_REG 0x324
  155. #define SUNXI_HMIC_CTRL 0x328
  156. #define SUNXI_HMIC_STS 0x32c
  157. /* Analog register base - Digital register base */
  158. /*SUNXI_PR_CFG is to tear the acreg and dcreg, it is of no real meaning*/
  159. #define SUNXI_PR_CFG (0x300)
  160. #define SUNXI_ADC1_ANA_CTL (SUNXI_PR_CFG + 0x00)
  161. #define SUNXI_ADC2_ANA_CTL (SUNXI_PR_CFG + 0x04)
  162. #define SUNXI_ADC3_ANA_CTL (SUNXI_PR_CFG + 0x08)
  163. #define SUNXI_DAC_ANA_CTL (SUNXI_PR_CFG + 0x10)
  164. #define SUNXI_MICBIAS_ANA_CTL (SUNXI_PR_CFG + 0x18)
  165. #define SUNXI_RAMP_ANA_CTL (SUNXI_PR_CFG + 0x1c)
  166. #define SUNXI_BIAS_ANA_CTL (SUNXI_PR_CFG + 0x20)
  167. #define SUNXI_HP_ANA_CTL (SUNXI_PR_CFG + 0x40)
  168. #define SUNXI_POWER_ANA_CTL (SUNXI_PR_CFG + 0x48)
  169. /* SUNXI_DAC_DPC:0x00 */
  170. #define EN_DAC 31
  171. #define MODQU 25
  172. #define DWA_EN 24
  173. #define HPF_EN 18
  174. #define DVOL 12
  175. #define DAC_HUB_EN 0
  176. /* SUNXI_DAC_VOL_CTL:0x04 */
  177. #define DAC_VOL_SEL 16
  178. #define DAC_VOL_L 8
  179. #define DAC_VOL_R 0
  180. /* SUNXI_DAC_FIFOC:0x10 */
  181. #define DAC_FS 29
  182. #define FIR_VER 28
  183. #define SEND_LASAT 26
  184. #define FIFO_MODE 24
  185. #define DAC_DRQ_CLR_CNT 21
  186. #define TX_TRIG_LEVEL 8
  187. #define DAC_MONO_EN 6
  188. #define TX_SAMPLE_BITS 5
  189. #define DAC_DRQ_EN 4
  190. #define DAC_IRQ_EN 3
  191. #define FIFO_UNDERRUN_IRQ_EN 2
  192. #define FIFO_OVERRUN_IRQ_EN 1
  193. #define FIFO_FLUSH 0
  194. /* SUNXI_DAC_FIFOS:0x14 */
  195. #define TX_EMPTY 23
  196. #define DAC_TXE_CNT 8
  197. #define DAC_TXE_INT 3
  198. #define DAC_TXU_INT 2
  199. #define DAC_TXO_INT 1
  200. /* SUNXI_DAC_DG:0x28 */
  201. #define DAC_MODU_SEL 11
  202. #define DAC_PATTERN_SEL 9
  203. #define DAC_CODEC_CLK_SEL 8
  204. #define DAC_SWP 6
  205. #define ADDA_LOOP_MODE 0
  206. /* SUNXI_ADC_FIFOC:0x30 */
  207. #define ADC_FS 29
  208. #define EN_AD 28
  209. #define ADCFDT 26
  210. #define ADCDFEN 25
  211. #define RX_FIFO_MODE 24
  212. #define RX_SAMPLE_BITS 16
  213. #define RX_FIFO_TRG_LEVEL 4
  214. #define ADC_DRQ_EN 3
  215. #define ADC_IRQ_EN 2
  216. #define ADC_OVERRUN_IRQ_EN 1
  217. #define ADC_FIFO_FLUSH 0
  218. /* SUNXI_ADC_VOL_CTL1:0x34 */
  219. #define ADC3_VOL 16
  220. #define ADC2_VOL 8
  221. #define ADC1_VOL 0
  222. /* SUNXI_ADC_FIFOS:0x38 */
  223. #define RXA 23
  224. #define ADC_RXA_CNT 8
  225. #define ADC_RXA_INT 3
  226. #define ADC_RXO_INT 1
  227. /* SUNXI_ADC_DG:0x4C */
  228. #define AD_SWP 24
  229. /* SUNXI_ADC_DIG_CTL:0x50 */
  230. #define ADC3_VOL_EN 17
  231. #define ADC1_2_VOL_EN 16
  232. #define ADC_CHANNEL_EN 0
  233. /* SUNXI_DAC_DAP_CTL:0xf0 */
  234. #define DDAP_EN 31
  235. #define DDAP_DRC_EN 29
  236. #define DDAP_HPF_EN 28
  237. /* SUNXI_ADC_DAP_CTL:0xf8 */
  238. #define ADC_DAP0_EN 31
  239. #define ADC_DRC0_EN 29
  240. #define ADC_HPF0_EN 28
  241. #define ADC_DAP1_EN 27
  242. #define ADC_DRC1_EN 25
  243. #define ADC_HPF1_EN 24
  244. /* SUNXI_DAC_DRC_HHPFC : 0x100*/
  245. #define DAC_HHPF_CONF 0
  246. /* SUNXI_DAC_DRC_LHPFC : 0x104*/
  247. #define DAC_LHPF_CONF 0
  248. /* SUNXI_DAC_DRC_CTRL : 0x108*/
  249. #define DAC_DRC_DELAY_OUT_STATE 15
  250. #define DAC_DRC_SIGNAL_DELAY 8
  251. #define DAC_DRC_DELAY_BUF_EN 7
  252. #define DAC_DRC_GAIN_MAX_EN 6
  253. #define DAC_DRC_GAIN_MIN_EN 5
  254. #define DAC_DRC_NOISE_DET_EN 4
  255. #define DAC_DRC_SIGNAL_SEL 3
  256. #define DAC_DRC_DELAY_EN 2
  257. #define DAC_DRC_LT_EN 1
  258. #define DAC_DRC_ET_EN 0
  259. /* SUNXI_ADC_DRC_HHPFC : 0x200*/
  260. #define ADC_HHPF_CONF 0
  261. /* SUNXI_ADC_DRC_LHPFC : 0x204*/
  262. #define ADC_LHPF_CONF 0
  263. /* SUNXI_ADC_DRC_CTRL : 0x208*/
  264. #define ADC_DRC_DELAY_OUT_STATE 15
  265. #define ADC_DRC_SIGNAL_DELAY 8
  266. #define ADC_DRC_DELAY_BUF_EN 7
  267. #define ADC_DRC_GAIN_MAX_EN 6
  268. #define ADC_DRC_GAIN_MIN_EN 5
  269. #define ADC_DRC_NOISE_DET_EN 4
  270. #define ADC_DRC_SIGNAL_SEL 3
  271. #define ADC_DRC_DELAY_EN 2
  272. #define ADC_DRC_LT_EN 1
  273. #define ADC_DRC_ER_EN 0
  274. /* SUNXI_ADC1_ANA_CTL:0x300 */
  275. /* SUNXI_ADC2_ANA_CTL:0x304 */
  276. /* SUNXI_ADC3_ANA_CTL:0x308 */
  277. #define ADC_EN (31)
  278. #define MIC_PGA_EN (30)
  279. #define ADC_DITHER_CTL (29)
  280. #define MIC_SIN_EN (28)
  281. #define FMINL_EN (27)
  282. #define FMINR_EN (27)
  283. #define FMINL_GAIN (26)
  284. #define FMINR_GAIN (26)
  285. #define LIENINL_EN (23)
  286. #define LIENINR_EN (23)
  287. #define LIENINL_GAIN (22)
  288. #define LIENINR_GAIN (22)
  289. #define ADC_PGA_CTL_RCM (18)
  290. #define ADC_PGA_IN_VCM_CTL (16)
  291. #define IOPADC (14)
  292. #define ADC_PGA_GAIN_CTL (8)
  293. #define ADC_IOPAAF (6)
  294. #define ADC_IOPSDM1 (4)
  295. #define ADC_IOPSDM2 (2)
  296. #define ADC_IOPMIC (0)
  297. /* SUNXI_DAC_ANA_CTL: SUNXI_PR_CFG + 0x10 */
  298. #define CURRENT_TEST_SELECT 23
  299. #define VRA2_IOPVRS 20
  300. #define ILINEOUTAMPS 18
  301. #define IOPDACS 16
  302. #define DACLEN 15
  303. #define DACREN 14
  304. #define LINEOUTL_EN 13
  305. #define DACLMUTE 12
  306. #define LINEOUTR_EN 11
  307. #define DACRMUTE 10
  308. #define LINEOUTLDIFFEN 6
  309. #define LINEOUTRDIFFEN 5
  310. #define LINEOUT_VOL 0
  311. /* SUNXI_MICBIAS_ANA_CTL: SUNXI_PR_CFG + 0x18 */
  312. #define MICADCEN 20
  313. #define MMICBIASEN 7
  314. #define MBIASSEL 5
  315. #define MMICBIAS_CHOP_EN 4
  316. #define MMICBIAS_CHOP_CLK_SEL 2
  317. /* SUNXI_RAMP_ANA_CTL: SUNXI_PR_CFG + 0x1c */
  318. #define RMCEN 1
  319. /* SUNXI_BIAS_ANA_CTL: SUNXI_PR_CFG + 0x20 */
  320. #define AC_BIASDATA 0
  321. /* SUNXI_HP_ANA_CTL: SUNXI_PR_CFG + 0x40 */
  322. #define HPFB_BUF_EN 31
  323. #define HP_GAIN 28
  324. #define HP_DRVEN 21
  325. #define HP_DRVOUTEN 20
  326. #define RSWITCH 19
  327. #define RAMPEN 18
  328. #define HPFB_IN_EN 17
  329. #define RAMP_FINAL_CTL 16
  330. #define RAMP_OUT_EN 15
  331. /* SUNXI_POWER_ANA_CTL: SUNXI_PR_CFG + 0x48 */
  332. #define HPLDO_EN 30
  333. #define BG_TRIM 0
  334. #define CODEC_REG_LABEL(constant) {#constant, constant, 0}
  335. #define CODEC_REG_LABEL_END {NULL, 0, 0}
  336. /* SUNXI_CODEC_DAP_ENABLE: Whether to use the adc/dac drc/hpf function */
  337. #define SUNXI_CODEC_DAP_ENABLE
  338. #endif /* __SUN8IW20_CODEC_H */