ac108.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  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 _AC108_H
  33. #define _AC108_H
  34. /* #include<snd_hal.h> */
  35. #include <sunxi_hal_twi.h>
  36. /*** AC108 Codec Register Define***/
  37. //Chip Reset
  38. #define CHIP_AUDIO_RST 0x00
  39. //Power Control
  40. #define PWR_CTRL1 0x01
  41. #define PWR_CTRL2 0x02
  42. #define PWR_CTRL3 0x03
  43. #define PWR_CTRL4 0x04
  44. #define PWR_CTRL5 0x05
  45. #define PWR_CTRL6 0x06
  46. #define PWR_CTRL7 0x07
  47. #define PWR_CTRL8 0x08
  48. #define PWR_CTRL9 0x09
  49. //PLL Configure Control
  50. #define PLL_CTRL1 0x10
  51. #define PLL_CTRL2 0x11
  52. #define PLL_CTRL3 0x12
  53. #define PLL_CTRL4 0x13
  54. #define PLL_CTRL5 0x14
  55. #define PLL_CTRL6 0x16
  56. #define PLL_CTRL7 0x17
  57. #define PLL_LOCK_CTRL 0x18
  58. //System Clock Control
  59. #define SYSCLK_CTRL 0x20
  60. #define MOD_CLK_EN 0x21
  61. #define MOD_RST_CTRL 0x22
  62. #define DSM_CLK_CTRL 0x25
  63. //I2S Common Control
  64. #define I2S_CTRL 0x30
  65. #define I2S_BCLK_CTRL 0x31
  66. #define I2S_LRCK_CTRL1 0x32
  67. #define I2S_LRCK_CTRL2 0x33
  68. #define I2S_FMT_CTRL1 0x34
  69. #define I2S_FMT_CTRL2 0x35
  70. #define I2S_FMT_CTRL3 0x36
  71. //I2S TX1 Control
  72. #define I2S_TX1_CTRL1 0x38
  73. #define I2S_TX1_CTRL2 0x39
  74. #define I2S_TX1_CTRL3 0x3A
  75. #define I2S_TX1_CHMP_CTRL1 0x3C
  76. #define I2S_TX1_CHMP_CTRL2 0x3D
  77. #define I2S_TX1_CHMP_CTRL3 0x3E
  78. #define I2S_TX1_CHMP_CTRL4 0x3F
  79. //I2S TX2 Control
  80. #define I2S_TX2_CTRL1 0x40
  81. #define I2S_TX2_CTRL2 0x41
  82. #define I2S_TX2_CTRL3 0x42
  83. #define I2S_TX2_CHMP_CTRL1 0x44
  84. #define I2S_TX2_CHMP_CTRL2 0x45
  85. #define I2S_TX2_CHMP_CTRL3 0x46
  86. #define I2S_TX2_CHMP_CTRL4 0x47
  87. //I2S RX1 Control
  88. #define I2S_RX1_CTRL1 0x50
  89. #define I2S_RX1_CHMP_CTRL1 0x54
  90. #define I2S_RX1_CHMP_CTRL2 0x55
  91. #define I2S_RX1_CHMP_CTRL3 0x56
  92. #define I2S_RX1_CHMP_CTRL4 0x57
  93. //I2S Loopback Debug
  94. #define I2S_LPB_DEBUG 0x58
  95. //ADC Common Control
  96. #define ADC_SPRC 0x60
  97. #define ADC_DIG_EN 0x61
  98. #define DMIC_EN 0x62
  99. #define ADC_DSR 0x63
  100. #define ADC_FIR 0x64
  101. #define ADC_DDT_CTRL 0x65
  102. //HPF Control
  103. #define HPF_EN 0x66
  104. #define HPF_COEF_REGH1 0x67
  105. #define HPF_COEF_REGH2 0x68
  106. #define HPF_COEF_REGL1 0x69
  107. #define HPF_COEF_REGL2 0x6A
  108. #define HPF_GAIN_REGH1 0x6B
  109. #define HPF_GAIN_REGH2 0x6C
  110. #define HPF_GAIN_REGL1 0x6D
  111. #define HPF_GAIN_REGL2 0x6E
  112. //ADC Digital Channel Volume Control
  113. #define ADC1_DVOL_CTRL 0x70
  114. #define ADC2_DVOL_CTRL 0x71
  115. #define ADC3_DVOL_CTRL 0x72
  116. #define ADC4_DVOL_CTRL 0x73
  117. //ADC Digital Mixer Source and Gain Control
  118. #define ADC1_DMIX_SRC 0x76
  119. #define ADC2_DMIX_SRC 0x77
  120. #define ADC3_DMIX_SRC 0x78
  121. #define ADC4_DMIX_SRC 0x79
  122. //ADC Digital Debug Control
  123. #define ADC_DIG_DEBUG 0x7F
  124. //I2S Pad Drive Control
  125. #define I2S_DAT_PADDRV_CTRL 0x80
  126. #define I2S_CLK_PADDRV_CTRL 0x81
  127. //Analog PGA Control
  128. #define ANA_PGA1_CTRL 0x90
  129. #define ANA_PGA2_CTRL 0x91
  130. #define ANA_PGA3_CTRL 0x92
  131. #define ANA_PGA4_CTRL 0x93
  132. //MIC Offset Control
  133. #define MIC_OFFSET_CTRL1 0x96
  134. #define MIC_OFFSET_CTRL2 0x97
  135. #define MIC1_OFFSET_STATU1 0x98
  136. #define MIC1_OFFSET_STATU2 0x99
  137. #define MIC2_OFFSET_STATU1 0x9A
  138. #define MIC2_OFFSET_STATU2 0x9B
  139. #define MIC3_OFFSET_STATU1 0x9C
  140. #define MIC3_OFFSET_STATU2 0x9D
  141. #define MIC4_OFFSET_STATU1 0x9E
  142. #define MIC4_OFFSET_STATU2 0x9F
  143. //ADC1 Analog Control
  144. #define ANA_ADC1_CTRL1 0xA0
  145. #define ANA_ADC1_CTRL2 0xA1
  146. #define ANA_ADC1_CTRL3 0xA2
  147. #define ANA_ADC1_CTRL4 0xA3
  148. #define ANA_ADC1_CTRL5 0xA4
  149. #define ANA_ADC1_CTRL6 0xA5
  150. #define ANA_ADC1_CTRL7 0xA6
  151. //ADC2 Analog Control
  152. #define ANA_ADC2_CTRL1 0xA7
  153. #define ANA_ADC2_CTRL2 0xA8
  154. #define ANA_ADC2_CTRL3 0xA9
  155. #define ANA_ADC2_CTRL4 0xAA
  156. #define ANA_ADC2_CTRL5 0xAB
  157. #define ANA_ADC2_CTRL6 0xAC
  158. #define ANA_ADC2_CTRL7 0xAD
  159. //ADC3 Analog Control
  160. #define ANA_ADC3_CTRL1 0xAE
  161. #define ANA_ADC3_CTRL2 0xAF
  162. #define ANA_ADC3_CTRL3 0xB0
  163. #define ANA_ADC3_CTRL4 0xB1
  164. #define ANA_ADC3_CTRL5 0xB2
  165. #define ANA_ADC3_CTRL6 0xB3
  166. #define ANA_ADC3_CTRL7 0xB4
  167. //ADC4 Analog Control
  168. #define ANA_ADC4_CTRL1 0xB5
  169. #define ANA_ADC4_CTRL2 0xB6
  170. #define ANA_ADC4_CTRL3 0xB7
  171. #define ANA_ADC4_CTRL4 0xB8
  172. #define ANA_ADC4_CTRL5 0xB9
  173. #define ANA_ADC4_CTRL6 0xBA
  174. #define ANA_ADC4_CTRL7 0xBB
  175. //GPIO Configure
  176. #define GPIO_CFG1 0xC0
  177. #define GPIO_CFG2 0xC1
  178. #define GPIO_DAT 0xC2
  179. #define GPIO_DRV 0xC3
  180. #define GPIO_PULL 0xC4
  181. #define GPIO_INT_CFG 0xC5
  182. #define GPIO_INT_EN 0xC6
  183. #define GPIO_INT_STATUS 0xC7
  184. //Misc
  185. #define BGTC_DAT 0xD1
  186. #define BGVC_DAT 0xD2
  187. #define PRNG_CLK_CTRL 0xDF
  188. #define AC108_REG_MAX 0xDF
  189. /*** AC108 Codec Register Bit Define***/
  190. /*PWR_CTRL1*/
  191. #define CP12_CTRL 4
  192. #define CP12_SENSE_SELECT 3
  193. /*PWR_CTRL2*/
  194. #define CP12_SENSE_FILT 6
  195. #define CP12_COMP_FF_EN 3
  196. #define CP12_FORCE_ENABLE 2
  197. #define CP12_FORCE_RSTB 1
  198. /*PWR_CTRL3*/
  199. #define LDO33DIG_CTRL 0
  200. /*PWR_CTRL6*/
  201. #define LDO33ANA_2XHDRM 2
  202. #define LDO33ANA_ENABLE 0
  203. /*PWR_CTRL7*/
  204. #define VREF_SEL 3
  205. #define VREF_FASTSTART_ENABLE 1
  206. #define VREF_ENABLE 0
  207. /*PWR_CTRL9*/
  208. #define VREFP_FASTSTART_ENABLE 7
  209. #define VREFP_RESCTRL 5
  210. #define VREFP_LPMODE 4
  211. #define IGEN_TRIM 1
  212. #define VREFP_ENABLE 0
  213. /*PLL_CTRL1*/
  214. #define PLL_IBIAS 4
  215. #define PLL_NDET 3
  216. #define PLL_LOCKED_STATUS 2
  217. #define PLL_COM_EN 1
  218. #define PLL_EN 0
  219. /*PLL_CTRL2*/
  220. #define PLL_PREDIV2 5
  221. #define PLL_PREDIV1 0
  222. /*PLL_CTRL3*/
  223. #define PLL_LOOPDIV_MSB 0
  224. /*PLL_CTRL4*/
  225. #define PLL_LOOPDIV_LSB 0
  226. /*PLL_CTRL5*/
  227. #define PLL_POSTDIV2 5
  228. #define PLL_POSTDIV1 0
  229. /*PLL_CTRL6*/
  230. #define PLL_LDO 6
  231. #define PLL_CP 0
  232. /*PLL_CTRL7*/
  233. #define PLL_CAP 6
  234. #define PLL_RES 4
  235. #define PLL_TEST_EN 0
  236. /*PLL_LOCK_CTRL*/
  237. #define LOCK_LEVEL1 2
  238. #define LOCK_LEVEL2 1
  239. #define PLL_LOCK_EN 0
  240. /*SYSCLK_CTRL*/
  241. #define PLLCLK_EN 7
  242. #define PLLCLK_SRC 4
  243. #define SYSCLK_SRC 3
  244. #define SYSCLK_EN 0
  245. /*MOD_CLK_EN & MOD_RST_CTRL*/
  246. #define I2S 7
  247. #define ADC_DIGITAL 4
  248. #define MIC_OFFSET_CALIBRATION 1
  249. #define ADC_ANALOG 0
  250. /*DSM_CLK_CTRL*/
  251. #define MIC_OFFSET_DIV 4
  252. #define DSM_CLK_SEL 0
  253. /*I2S_CTRL*/
  254. #define BCLK_IOEN 7
  255. #define LRCK_IOEN 6
  256. #define SDO2_EN 5
  257. #define SDO1_EN 4
  258. #define TXEN 2
  259. #define RXEN 1
  260. #define GEN 0
  261. /*I2S_BCLK_CTRL*/
  262. #define EDGE_TRANSFER 5
  263. #define BCLK_POLARITY 4
  264. #define BCLKDIV 0
  265. /*I2S_LRCK_CTRL1*/
  266. #define LRCK_POLARITY 4
  267. #define LRCK_PERIODH 0
  268. /*I2S_LRCK_CTRL2*/
  269. #define LRCK_PERIODL 0
  270. /*I2S_FMT_CTRL1*/
  271. #define ENCD_SEL 6
  272. #define MODE_SEL 4
  273. #define TX2_OFFSET 3
  274. #define TX1_OFFSET 2
  275. #define TX_SLOT_HIZ 1
  276. #define TX_STATE 0
  277. /*I2S_FMT_CTRL2*/
  278. #define SLOT_WIDTH_SEL 4
  279. #define SAMPLE_RESOLUTION 0
  280. /*I2S_FMT_CTRL3*/
  281. #define TX_MLS 7
  282. #define SEXT 5
  283. #define OUT2_MUTE 4
  284. #define OUT1_MUTE 3
  285. #define LRCK_WIDTH 2
  286. #define TX_PDM 0
  287. /*I2S_TX1_CTRL1*/
  288. #define TX1_CHSEL 0
  289. /*I2S_TX1_CTRL2*/
  290. #define TX1_CH8_EN 7
  291. #define TX1_CH7_EN 6
  292. #define TX1_CH6_EN 5
  293. #define TX1_CH5_EN 4
  294. #define TX1_CH4_EN 3
  295. #define TX1_CH3_EN 2
  296. #define TX1_CH2_EN 1
  297. #define TX1_CH1_EN 0
  298. /*I2S_TX1_CTRL3*/
  299. #define TX1_CH16_EN 7
  300. #define TX1_CH15_EN 6
  301. #define TX1_CH14_EN 5
  302. #define TX1_CH13_EN 4
  303. #define TX1_CH12_EN 3
  304. #define TX1_CH11_EN 2
  305. #define TX1_CH10_EN 1
  306. #define TX1_CH9_EN 0
  307. /*I2S_TX1_CHMP_CTRL1*/
  308. #define TX1_CH4_MAP 6
  309. #define TX1_CH3_MAP 4
  310. #define TX1_CH2_MAP 2
  311. #define TX1_CH1_MAP 0
  312. /*I2S_TX1_CHMP_CTRL2*/
  313. #define TX1_CH8_MAP 6
  314. #define TX1_CH7_MAP 4
  315. #define TX1_CH6_MAP 2
  316. #define TX1_CH5_MAP 0
  317. /*I2S_TX1_CHMP_CTRL3*/
  318. #define TX1_CH12_MAP 6
  319. #define TX1_CH11_MAP 4
  320. #define TX1_CH10_MAP 2
  321. #define TX1_CH9_MAP 0
  322. /*I2S_TX1_CHMP_CTRL4*/
  323. #define TX1_CH16_MAP 6
  324. #define TX1_CH15_MAP 4
  325. #define TX1_CH14_MAP 2
  326. #define TX1_CH13_MAP 0
  327. /*I2S_TX2_CTRL1*/
  328. #define TX2_CHSEL 0
  329. /*I2S_TX2_CHMP_CTRL1*/
  330. #define TX2_CH4_MAP 6
  331. #define TX2_CH3_MAP 4
  332. #define TX2_CH2_MAP 2
  333. #define TX2_CH1_MAP 0
  334. /*I2S_TX2_CHMP_CTRL2*/
  335. #define TX2_CH8_MAP 6
  336. #define TX2_CH7_MAP 4
  337. #define TX2_CH6_MAP 2
  338. #define TX2_CH5_MAP 0
  339. /*I2S_TX2_CHMP_CTRL3*/
  340. #define TX2_CH12_MAP 6
  341. #define TX2_CH11_MAP 4
  342. #define TX2_CH10_MAP 2
  343. #define TX2_CH9_MAP 0
  344. /*I2S_TX2_CHMP_CTRL4*/
  345. #define TX2_CH16_MAP 6
  346. #define TX2_CH15_MAP 4
  347. #define TX2_CH14_MAP 2
  348. #define TX2_CH13_MAP 0
  349. /*I2S_RX1_CTRL1*/
  350. #define RX1_CHSEL 0
  351. /*I2S_RX1_CHMP_CTRL1*/
  352. #define RX1_CH4_MAP 6
  353. #define RX1_CH3_MAP 4
  354. #define RX1_CH2_MAP 2
  355. #define RX1_CH1_MAP 0
  356. /*I2S_RX1_CHMP_CTRL2*/
  357. #define RX1_CH8_MAP 6
  358. #define RX1_CH7_MAP 4
  359. #define RX1_CH6_MAP 2
  360. #define RX1_CH5_MAP 0
  361. /*I2S_RX1_CHMP_CTRL3*/
  362. #define RX1_CH12_MAP 6
  363. #define RX1_CH11_MAP 4
  364. #define RX1_CH10_MAP 2
  365. #define RX1_CH9_MAP 0
  366. /*I2S_RX1_CHMP_CTRL4*/
  367. #define RX1_CH16_MAP 6
  368. #define RX1_CH15_MAP 4
  369. #define RX1_CH14_MAP 2
  370. #define RX1_CH13_MAP 0
  371. /*I2S_LPB_DEBUG*/
  372. #define I2S_LPB_DEBUG_EN 0
  373. /*ADC_SPRC*/
  374. #define ADC_FS_I2S1 0
  375. /*ADC_DIG_EN*/
  376. #define DG_EN 4
  377. #define ENAD4 3
  378. #define ENAD3 2
  379. #define ENAD2 1
  380. #define ENAD1 0
  381. /*DMIC_EN*/
  382. #define DMIC2_EN 1
  383. #define DMIC1_EN 0
  384. /*ADC_DSR*/
  385. #define DIG_ADC4_SRS 6
  386. #define DIG_ADC3_SRS 4
  387. #define DIG_ADC2_SRS 2
  388. #define DIG_ADC1_SRS 0
  389. /*ADC_DDT_CTRL*/
  390. #define ADOUT_DLY_EN 2
  391. #define ADOUT_DTS 0
  392. /*HPF_EN*/
  393. #define DIG_ADC4_HPF_EN 3
  394. #define DIG_ADC3_HPF_EN 2
  395. #define DIG_ADC2_HPF_EN 1
  396. #define DIG_ADC1_HPF_EN 0
  397. /*ADC1_DMIX_SRC*/
  398. #define ADC1_ADC4_DMXL_GC 7
  399. #define ADC1_ADC3_DMXL_GC 6
  400. #define ADC1_ADC2_DMXL_GC 5
  401. #define ADC1_ADC1_DMXL_GC 4
  402. #define ADC1_ADC4_DMXL_SRC 3
  403. #define ADC1_ADC3_DMXL_SRC 2
  404. #define ADC1_ADC2_DMXL_SRC 1
  405. #define ADC1_ADC1_DMXL_SRC 0
  406. /*ADC2_DMIX_SRC*/
  407. #define ADC2_ADC4_DMXL_GC 7
  408. #define ADC2_ADC3_DMXL_GC 6
  409. #define ADC2_ADC2_DMXL_GC 5
  410. #define ADC2_ADC1_DMXL_GC 4
  411. #define ADC2_ADC4_DMXL_SRC 3
  412. #define ADC2_ADC3_DMXL_SRC 2
  413. #define ADC2_ADC2_DMXL_SRC 1
  414. #define ADC2_ADC1_DMXL_SRC 0
  415. /*ADC3_DMIX_SRC*/
  416. #define ADC3_ADC4_DMXL_GC 7
  417. #define ADC3_ADC3_DMXL_GC 6
  418. #define ADC3_ADC2_DMXL_GC 5
  419. #define ADC3_ADC1_DMXL_GC 4
  420. #define ADC3_ADC4_DMXL_SRC 3
  421. #define ADC3_ADC3_DMXL_SRC 2
  422. #define ADC3_ADC2_DMXL_SRC 1
  423. #define ADC3_ADC1_DMXL_SRC 0
  424. /*ADC4_DMIX_SRC*/
  425. #define ADC4_ADC4_DMXL_GC 7
  426. #define ADC4_ADC3_DMXL_GC 6
  427. #define ADC4_ADC2_DMXL_GC 5
  428. #define ADC4_ADC1_DMXL_GC 4
  429. #define ADC4_ADC4_DMXL_SRC 3
  430. #define ADC4_ADC3_DMXL_SRC 2
  431. #define ADC4_ADC2_DMXL_SRC 1
  432. #define ADC4_ADC1_DMXL_SRC 0
  433. /*ADC_DIG_DEBUG*/
  434. #define ADC_PTN_SEL 0
  435. /*I2S_DAT_PADDRV_CTRL*/
  436. #define TX2_DAT_DRV 4
  437. #define TX1_DAT_DRV 0
  438. /*I2S_CLK_PADDRV_CTRL*/
  439. #define LRCK_DRV 4
  440. #define BCLK_DRV 0
  441. /*ANA_PGA1_CTRL*/
  442. #define ADC1_ANALOG_PGA 1
  443. #define ADC1_ANALOG_PGA_STEP 0
  444. /*ANA_PGA2_CTRL*/
  445. #define ADC2_ANALOG_PGA 1
  446. #define ADC2_ANALOG_PGA_STEP 0
  447. /*ANA_PGA3_CTRL*/
  448. #define ADC3_ANALOG_PGA 1
  449. #define ADC3_ANALOG_PGA_STEP 0
  450. /*ANA_PGA4_CTRL*/
  451. #define ADC4_ANALOG_PGA 1
  452. #define ADC4_ANALOG_PGA_STEP 0
  453. /*MIC_OFFSET_CTRL1*/
  454. #define MIC_OFFSET_CAL_EN4 3
  455. #define MIC_OFFSET_CAL_EN3 2
  456. #define MIC_OFFSET_CAL_EN2 1
  457. #define MIC_OFFSET_CAL_EN1 0
  458. /*MIC_OFFSET_CTRL2*/
  459. #define MIC_OFFSET_CAL_GAIN 3
  460. #define MIC_OFFSET_CAL_CHANNEL 1
  461. #define MIC_OFFSET_CAL_EN_ONCE 0
  462. /*MIC1_OFFSET_STATU1*/
  463. #define MIC1_OFFSET_CAL_DONE 7
  464. #define MIC1_OFFSET_CAL_RUN_STA 6
  465. #define MIC1_OFFSET_MSB 0
  466. /*MIC1_OFFSET_STATU2*/
  467. #define MIC1_OFFSET_LSB 0
  468. /*MIC2_OFFSET_STATU1*/
  469. #define MIC2_OFFSET_CAL_DONE 7
  470. #define MIC2_OFFSET_CAL_RUN_STA 6
  471. #define MIC2_OFFSET_MSB 0
  472. /*MIC2_OFFSET_STATU2*/
  473. #define MIC2_OFFSET_LSB 0
  474. /*MIC3_OFFSET_STATU1*/
  475. #define MIC3_OFFSET_CAL_DONE 7
  476. #define MIC3_OFFSET_CAL_RUN_STA 6
  477. #define MIC3_OFFSET_MSB 0
  478. /*MIC3_OFFSET_STATU2*/
  479. #define MIC3_OFFSET_LSB 0
  480. /*MIC4_OFFSET_STATU1*/
  481. #define MIC4_OFFSET_CAL_DONE 7
  482. #define MIC4_OFFSET_CAL_RUN_STA 6
  483. #define MIC4_OFFSET_MSB 0
  484. /*MIC4_OFFSET_STATU2*/
  485. #define MIC4_OFFSET_LSB 0
  486. /*ANA_ADC1_CTRL1*/
  487. #define ADC1_PGA_BYPASS 7
  488. #define ADC1_PGA_BYP_RCM 6
  489. #define ADC1_PGA_CTRL_RCM 4
  490. #define ADC1_PGA_MUTE 3
  491. #define ADC1_DSM_ENABLE 2
  492. #define ADC1_PGA_ENABLE 1
  493. #define ADC1_MICBIAS_EN 0
  494. /*ANA_ADC1_CTRL3*/
  495. #define ADC1_ANA_CAL_EN 5
  496. #define ADC1_SEL_OUT_EDGE 3
  497. #define ADC1_DSM_DISABLE 2
  498. #define ADC1_VREFP_DISABLE 1
  499. #define ADC1_AAF_DISABLE 0
  500. /*ANA_ADC1_CTRL6*/
  501. #define PGA_CTRL_TC 6
  502. #define PGA_CTRL_RC 4
  503. #define PGA_CTRL_I_LIN 2
  504. #define PGA_CTRL_I_IN 0
  505. /*ANA_ADC1_CTRL7*/
  506. #define PGA_CTRL_HI_Z 7
  507. #define PGA_CTRL_SHORT_RF 6
  508. #define PGA_CTRL_VCM_VG 4
  509. #define PGA_CTRL_VCM_IN 0
  510. /*ANA_ADC2_CTRL1*/
  511. #define ADC2_PGA_BYPASS 7
  512. #define ADC2_PGA_BYP_RCM 6
  513. #define ADC2_PGA_CTRL_RCM 4
  514. #define ADC2_PGA_MUTE 3
  515. #define ADC2_DSM_ENABLE 2
  516. #define ADC2_PGA_ENABLE 1
  517. #define ADC2_MICBIAS_EN 0
  518. /*ANA_ADC2_CTRL3*/
  519. #define ADC2_ANA_CAL_EN 5
  520. #define ADC2_SEL_OUT_EDGE 3
  521. #define ADC2_DSM_DISABLE 2
  522. #define ADC2_VREFP_DISABLE 1
  523. #define ADC2_AAF_DISABLE 0
  524. /*ANA_ADC2_CTRL6*/
  525. #define PGA_CTRL_IBOOST 7
  526. #define PGA_CTRL_IQCTRL 6
  527. #define PGA_CTRL_OABIAS 4
  528. #define PGA_CTRL_CMLP_DIS 3
  529. #define PGA_CTRL_PDB_RIN 2
  530. #define PGA_CTRL_PEAKDET 0
  531. /*ANA_ADC2_CTRL7*/
  532. #define AAF_LPMODE_EN 7
  533. #define AAF_STG2_IB_SEL 4
  534. #define AAFDSM_IB_DIV2 3
  535. #define AAF_STG1_IB_SEL 0
  536. /*ANA_ADC3_CTRL1*/
  537. #define ADC3_PGA_BYPASS 7
  538. #define ADC3_PGA_BYP_RCM 6
  539. #define ADC3_PGA_CTRL_RCM 4
  540. #define ADC3_PGA_MUTE 3
  541. #define ADC3_DSM_ENABLE 2
  542. #define ADC3_PGA_ENABLE 1
  543. #define ADC3_MICBIAS_EN 0
  544. /*ANA_ADC3_CTRL3*/
  545. #define ADC3_ANA_CAL_EN 5
  546. #define ADC3_INVERT_CLK 4
  547. #define ADC3_SEL_OUT_EDGE 3
  548. #define ADC3_DSM_DISABLE 2
  549. #define ADC3_VREFP_DISABLE 1
  550. #define ADC3_AAF_DISABLE 0
  551. /*ANA_ADC3_CTRL7*/
  552. #define DSM_COMP_IB_SEL 6
  553. #define DSM_OTA_CTRL 4
  554. #define DSM_LPMODE 3
  555. #define DSM_OTA_IB_SEL 0
  556. /*ANA_ADC4_CTRL1*/
  557. #define ADC4_PGA_BYPASS 7
  558. #define ADC4_PGA_BYP_RCM 6
  559. #define ADC4_PGA_CTRL_RCM 4
  560. #define ADC4_PGA_MUTE 3
  561. #define ADC4_DSM_ENABLE 2
  562. #define ADC4_PGA_ENABLE 1
  563. #define ADC4_MICBIAS_EN 0
  564. /*ANA_ADC4_CTRL3*/
  565. #define ADC4_ANA_CAL_EN 5
  566. #define ADC4_SEL_OUT_EDGE 3
  567. #define ADC4_DSM_DISABLE 2
  568. #define ADC4_VREFP_DISABLE 1
  569. #define ADC4_AAF_DISABLE 0
  570. /*ANA_ADC4_CTRL6*/
  571. #define DSM_DEMOFF 5
  572. #define DSM_EN_DITHER 4
  573. #define DSM_VREFP_LPMODE 2
  574. #define DSM_VREFP_OUTCTRL 0
  575. /*ANA_ADC4_CTRL7*/
  576. #define CK8M_EN 5
  577. #define OSC_EN 4
  578. #define ADC4_CLK_GATING 3
  579. #define ADC3_CLK_GATING 2
  580. #define ADC2_CLK_GATING 1
  581. #define ADC1_CLK_GATING 0
  582. /*GPIO_CFG1*/
  583. #define GPIO2_SELECT 4
  584. #define GPIO1_SELECT 0
  585. /*GPIO_CFG2*/
  586. #define GPIO4_SELECT 4
  587. #define GPIO3_SELECT 0
  588. /*GPIO_DAT*/
  589. #define GPIO4_DAT 3
  590. #define GPIO3_DAT 2
  591. #define GPIO2_DAT 1
  592. #define GPIO1_DAT 0
  593. /*GPIO_DRV*/
  594. #define GPIO4_DRV 6
  595. #define GPIO3_DRV 4
  596. #define GPIO2_DRV 2
  597. #define GPIO1_DRV 0
  598. /*GPIO_PULL*/
  599. #define GPIO4_PULL 6
  600. #define GPIO3_PULL 4
  601. #define GPIO2_PULL 2
  602. #define GPIO1_PULL 0
  603. /*GPIO_INT_CFG*/
  604. #define GPIO4_EINT_CFG 6
  605. #define GPIO3_EINT_CFG 4
  606. #define GPIO2_EINT_CFG 2
  607. #define GPIO1_EINT_CFG 0
  608. /*GPIO_INT_EN*/
  609. #define GPIO4_EINT_EN 3
  610. #define GPIO3_EINT_EN 2
  611. #define GPIO2_EINT_EN 1
  612. #define GPIO1_EINT_EN 0
  613. /*GPIO_INT_STATUS*/
  614. #define GPIO4_EINT_STA 3
  615. #define GPIO3_EINT_STA 2
  616. #define GPIO2_EINT_STA 1
  617. #define GPIO1_EINT_STA 0
  618. /*PRNG_CLK_CTRL*/
  619. #define PRNG_CLK_EN 1
  620. #define PRNG_CLK_POS 0
  621. /*** Some Config Value ***/
  622. //[SYSCLK_CTRL]: PLLCLK_SRC
  623. #define PLLCLK_SRC_MCLK 0
  624. #define PLLCLK_SRC_BCLK 1
  625. #define PLLCLK_SRC_GPIO2 2
  626. #define PLLCLK_SRC_GPIO3 3
  627. //[SYSCLK_CTRL]: SYSCLK_SRC
  628. #define SYSCLK_SRC_MCLK 0
  629. #define SYSCLK_SRC_PLL 1
  630. //I2S BCLK POLARITY Control
  631. #define BCLK_NORMAL_DRIVE_N_SAMPLE_P 0
  632. #define BCLK_INVERT_DRIVE_P_SAMPLE_N 1
  633. //I2S LRCK POLARITY Control
  634. #define LRCK_LEFT_LOW_RIGHT_HIGH 0
  635. #define LRCK_LEFT_HIGH_RIGHT_LOW 1
  636. //I2S Format Selection
  637. #define PCM_FORMAT 0
  638. #define LEFT_JUSTIFIED_FORMAT 1
  639. #define RIGHT_JUSTIFIED_FORMAT 2
  640. //ADC Digital Debug Control
  641. #define ADC_PTN_NORMAL 0
  642. #define ADC_PTN_0x5A5A5A 1
  643. #define ADC_PTN_0x123456 2
  644. #define ADC_PTN_ZERO 3
  645. #define ADC_PTN_I2S_RX_DATA 4
  646. //ADC PGA GAIN Control
  647. #define ADC_PGA_GAIN_0dB 0
  648. #define ADC_PGA_GAIN_MINUS_6dB 1
  649. #define ADC_PGA_GAIN_3dB 3
  650. #define ADC_PGA_GAIN_4dB 4
  651. #define ADC_PGA_GAIN_5dB 5
  652. #define ADC_PGA_GAIN_6dB 6
  653. #define ADC_PGA_GAIN_7dB 7
  654. #define ADC_PGA_GAIN_8dB 8
  655. #define ADC_PGA_GAIN_9dB 9
  656. #define ADC_PGA_GAIN_10dB 10
  657. #define ADC_PGA_GAIN_11dB 11
  658. #define ADC_PGA_GAIN_12dB 12
  659. #define ADC_PGA_GAIN_13dB 13
  660. #define ADC_PGA_GAIN_14dB 14
  661. #define ADC_PGA_GAIN_15dB 15
  662. #define ADC_PGA_GAIN_16dB 16
  663. #define ADC_PGA_GAIN_17dB 17
  664. #define ADC_PGA_GAIN_18dB 18
  665. #define ADC_PGA_GAIN_19dB 19
  666. #define ADC_PGA_GAIN_20dB 20
  667. #define ADC_PGA_GAIN_21dB 21
  668. #define ADC_PGA_GAIN_22dB 22
  669. #define ADC_PGA_GAIN_23dB 23
  670. #define ADC_PGA_GAIN_24dB 24
  671. #define ADC_PGA_GAIN_25dB 25
  672. #define ADC_PGA_GAIN_26dB 26
  673. #define ADC_PGA_GAIN_27dB 27
  674. #define ADC_PGA_GAIN_28dB 28
  675. #define ADC_PGA_GAIN_29dB 29
  676. #define ADC_PGA_GAIN_30dB 30
  677. //AC108 config
  678. #define AC108_CHIP_NUM 1
  679. #define AC108_NUM_MAX 4
  680. //0dB~30dB and -6dB, except 1~2dB
  681. #define AC108_PGA_GAIN ADC_PGA_GAIN_28dB
  682. /* for ref channel */
  683. #define AC108_REF_NULL_CHAN \
  684. { .ref_pga = AC108_PGA_GAIN, .ref_channel = 0x0 }
  685. //[b3]1 [b2]1 [b1]0 [b0]0 -> 0xC
  686. #define AC108_REF_CHAN \
  687. { .ref_pga = ADC_PGA_GAIN_10dB, .ref_channel = 0xc }
  688. #define AC108_CHIP_CFG \
  689. { \
  690. [0] = { .bus = TWI_MASTER_2, .addr = 0x3b, \
  691. .ref_chan = AC108_REF_CHAN, .debug_mode = ADC_PTN_NORMAL }, \
  692. [1] = { .bus = TWI_MASTER_2, .addr = 0x35, \
  693. .ref_chan = AC108_REF_CHAN, .debug_mode = ADC_PTN_NORMAL }, \
  694. [2] = { .bus = TWI_MASTER_0, .addr = 0x3c, \
  695. .ref_chan = AC108_REF_NULL_CHAN, .debug_mode = ADC_PTN_NORMAL }, \
  696. [3] = { .bus = TWI_MASTER_0, .addr = 0x36, \
  697. .ref_chan = AC108_REF_NULL_CHAN, .debug_mode = ADC_PTN_NORMAL }, \
  698. }
  699. /*
  700. *daudio_master(val << 12):
  701. * 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRM master)
  702. * 4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRM slave)
  703. */
  704. #define AC108_DAUDIO_MASTER 4
  705. /* daudio_format(val << 0):
  706. * 1:SND_SOC_DAIFMT_I2S
  707. * 2:SND_SOC_DAIFMT_RIGHT_J
  708. * 3:SND_SOC_DAIFMT_LEFT_J
  709. * 4:SND_SOC_DAIFMT_DSP_A
  710. * (pcm. MSB is available on 2nd BCLK rising edge after LRC rising edge)
  711. * 5:SND_SOC_DAIFMT_DSP_B
  712. * (pcm. MSB is available on 1nd BCLK rising edge after LRC rising edge)
  713. */
  714. #define AC108_DAUDIO_FORMAT SND_SOC_DAIFMT_I2S
  715. /*
  716. *signal_inversion(val << 8):
  717. * 1:SND_SOC_DAIFMT_NB_NF(normal bit clock + frame) use
  718. * 2:SND_SOC_DAIFMT_NB_IF(normal BCLK + inv FRM)
  719. * 3:SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM) use
  720. * 4:SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM)
  721. */
  722. #define AC108_DAUDIO_SIG_INV 1
  723. //[0]ADC_PTN_NORMAL:ADC normal
  724. //[1]ADC_PTN_0x5A5A5A:0x5A5A5A
  725. //[2]ADC_PTN_0x123456:0x123456
  726. //[3]ADC_PTN_ZERO:0x000000,
  727. //[4~7]ADC_PTN_I2S_RX_DATA:I2S_RX_DATA, other:reserved
  728. #define AC108_ADC_PATTERN_SEL ADC_PTN_NORMAL
  729. #define AC108_CHANNELS_MAX 8
  730. //16bit or 32bit slot width, other value will be reserved
  731. #define AC108_SLOT_WIDTH 32
  732. //TX Encoding mode enable
  733. #define AC108_ENCODING_EN 0
  734. //TX Encoding channel numbers, must be dual, range[1, 16]
  735. #define AC108_ENCODING_CH_NUMS 8
  736. //range[1, 1024], default PCM mode, I2S/LJ/RJ mode shall divide by 2
  737. //#define AC108_LRCK_PERIOD (AC108_SLOT_WIDTH * (AC108_ENCODING_EN ? 2 : AC108_CHANNELS_MAX))
  738. #define AC108_LRCK_PERIOD ((AC108_SLOT_WIDTH * (AC108_ENCODING_EN ? 2 : AC108_CHANNELS_MAX))/2)
  739. struct ref_chip_config {
  740. unsigned int ref_pga;
  741. unsigned int ref_channel;
  742. };
  743. struct twi_device {
  744. twi_port_t bus;
  745. unsigned int addr;
  746. unsigned int debug_mode;
  747. struct ref_chip_config ref_chan;
  748. };
  749. struct ac108_param {
  750. unsigned int chip_num;
  751. struct twi_device twi_dev[AC108_NUM_MAX];
  752. unsigned int pga_gain;
  753. uint8_t daudio_master;
  754. uint8_t daudio_format;
  755. uint8_t signal_inversion;
  756. unsigned int lrck_period;
  757. unsigned int slot_width;
  758. };
  759. struct ac108_priv {
  760. struct snd_codec *codec;
  761. struct ac108_param param;
  762. };
  763. #endif