cs35l43-tables.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * cs35l43-tables.c -- CS35L43 ALSA SoC audio driver
  4. *
  5. * Copyright 2021 Cirrus Logic, Inc.
  6. *
  7. * Author: David Rhodes <[email protected]>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License version 2 as
  11. * published by the Free Software Foundation.
  12. *
  13. */
  14. #include <linux/regmap.h>
  15. #include <linux/regulator/consumer.h>
  16. #include "wm_adsp.h"
  17. #include "cs35l43.h"
  18. #include <sound/cs35l43.h>
  19. bool cs35l43_readable_reg(struct device *dev, unsigned int reg)
  20. {
  21. switch (reg) {
  22. case CS35L43_DEVID:
  23. case CS35L43_REVID:
  24. case CS35L43_FABID:
  25. case CS35L43_RELID:
  26. case CS35L43_OTPID:
  27. case CS35L43_SFT_RESET:
  28. case CS35L43_TEST_KEY_CTRL:
  29. case CS35L43_USER_KEY_CTRL:
  30. case CS35L43_CTRL_ASYNC0:
  31. case CS35L43_CTRL_ASYNC1:
  32. case CS35L43_CTRL_ASYNC2:
  33. case CS35L43_CTRL_ASYNC3:
  34. case CS35L43_CTRL_IF_CONFIG1:
  35. case CS35L43_CTRL_IF_STATUS1:
  36. case CS35L43_CTRL_IF_STATUS2:
  37. case CS35L43_CTRL_IF_CONFIG2:
  38. case CS35L43_CTRL_IF_DEBUG1:
  39. case CS35L43_CTRL_IF_DEBUG2:
  40. case CS35L43_CTRL_IF_DEBUG3:
  41. case CS35L43_CIF_MON1:
  42. case CS35L43_CIF_MON2:
  43. case CS35L43_CIF_MON_PADDR:
  44. case CS35L43_CTRL_IF_SPARE1:
  45. case CS35L43_CTRL_IF_I2C:
  46. case CS35L43_CTRL_IF_I2C_1_CONTROL:
  47. case CS35L43_CTRL_IF_I2C_1_BROADCAST:
  48. case CS35L43_APB_MSTR_DSP_BRIDGE_ERR:
  49. case CS35L43_CIF1_BRIDGE_ERR:
  50. case CS35L43_CIF2_BRIDGE_ERR:
  51. case CS35L43_OTP_MEM0 ... CS35L43_OTP_MEM31:
  52. case CS35L43_OTP_CTRL0:
  53. case CS35L43_OTP_CTRL1:
  54. case CS35L43_OTP_CTRL3:
  55. case CS35L43_OTP_CTRL4:
  56. case CS35L43_OTP_CTRL5:
  57. case CS35L43_OTP_CTRL6:
  58. case CS35L43_OTP_CTRL7:
  59. case CS35L43_OTP_CTRL8:
  60. case CS35L43_DEVICE_ID:
  61. case CS35L43_FAB_ID:
  62. case CS35L43_REV_ID:
  63. case CS35L43_GLOBAL_ENABLES:
  64. case CS35L43_BLOCK_ENABLES:
  65. case CS35L43_BLOCK_ENABLES2:
  66. case CS35L43_GLOBAL_OVERRIDES:
  67. case CS35L43_GLOBAL_SYNC:
  68. case CS35L43_GLOBAL_STATUS:
  69. case CS35L43_DISCH_FILT:
  70. case CS35L43_OSC_TRIM:
  71. case CS35L43_ERROR_RELEASE:
  72. case CS35L43_PLL_OVERRIDE:
  73. case CS35L43_CHIP_STATUS:
  74. case CS35L43_CHIP_STATUS2:
  75. case CS35L43_TST_OSC:
  76. case CS35L43_LRCK_PAD_CONTROL:
  77. case CS35L43_SCLK_PAD_CONTROL:
  78. case CS35L43_SDIN_PAD_CONTROL:
  79. case CS35L43_SDOUT_PAD_CONTROL:
  80. case CS35L43_GPIO_PAD_CONTROL:
  81. case CS35L43_GPIO_GLOBAL_ENABLE_CONTROL:
  82. case CS35L43_PWRMGT_CTL:
  83. case CS35L43_WAKESRC_CTL:
  84. case CS35L43_WAKEI2C_CTL:
  85. case CS35L43_PWRMGT_STS:
  86. case CS35L43_PWRMGT_RST:
  87. case CS35L43_TEST_CTL:
  88. case CS35L43_REFCLK_INPUT:
  89. case CS35L43_DSP_CLOCK_GEARING:
  90. case CS35L43_GLOBAL_SAMPLE_RATE:
  91. case CS35L43_FS_MON_0:
  92. case CS35L43_DSP1_SAMPLE_RATE_RX1:
  93. case CS35L43_DSP1_SAMPLE_RATE_RX2:
  94. case CS35L43_DSP1_SAMPLE_RATE_TX1:
  95. case CS35L43_DSP1_SAMPLE_RATE_TX2:
  96. case CS35L43_LDOA_CTRL:
  97. case CS35L43_SYNC_TX_RX_ENABLES:
  98. case CS35L43_VBST_CTL_1:
  99. case CS35L43_VBST_CTL_2:
  100. case CS35L43_BST_IPK_CTL:
  101. case CS35L43_SOFT_RAMP:
  102. case CS35L43_BST_LOOP_COEFF:
  103. case CS35L43_LBST_SLOPE:
  104. case CS35L43_BST_SW_FREQ:
  105. case CS35L43_BST_DCM_CTL:
  106. case CS35L43_DCM_FORCE:
  107. case CS35L43_VBST_OVP:
  108. case CS35L43_BST_RSVD_1:
  109. case CS35L43_MONITOR_FILT:
  110. case CS35L43_WARN_LIMIT_THRESHOLD:
  111. case CS35L43_CONFIGURATION:
  112. case CS35L43_STATUS:
  113. case CS35L43_ENABLES_AND_CODES_ANA:
  114. case CS35L43_ENABLES_AND_CODES_DIG:
  115. case CS35L43_ASP_ENABLES1:
  116. case CS35L43_ASP_CONTROL1:
  117. case CS35L43_ASP_CONTROL2:
  118. case CS35L43_ASP_CONTROL3:
  119. case CS35L43_ASP_FRAME_CONTROL1:
  120. case CS35L43_ASP_FRAME_CONTROL5:
  121. case CS35L43_ASP_DATA_CONTROL1:
  122. case CS35L43_ASP_DATA_CONTROL5:
  123. case CS35L43_DACPCM1_INPUT:
  124. case CS35L43_DACPCM2_INPUT:
  125. case CS35L43_ASPTX1_INPUT:
  126. case CS35L43_ASPTX2_INPUT:
  127. case CS35L43_ASPTX3_INPUT:
  128. case CS35L43_ASPTX4_INPUT:
  129. case CS35L43_DSP1RX1_INPUT:
  130. case CS35L43_DSP1RX2_INPUT:
  131. case CS35L43_DSP1RX3_INPUT:
  132. case CS35L43_DSP1RX4_INPUT:
  133. case CS35L43_DSP1RX5_INPUT:
  134. case CS35L43_DSP1RX6_INPUT:
  135. case CS35L43_NGATE1_INPUT:
  136. case CS35L43_NGATE2_INPUT:
  137. case CS35L43_AMP_CTRL:
  138. case CS35L43_HPF_TST:
  139. case CS35L43_VC_TST1:
  140. case CS35L43_VC_TST2:
  141. case CS35L43_INTP_TST:
  142. case CS35L43_SRC_MAGCOMP_TST:
  143. case CS35L43_SRC_MAGCOMP_B0_OVERRIDE:
  144. case CS35L43_SRC_MAGCOMP_B1_OVERRIDE:
  145. case CS35L43_SRC_MAGCOMP_A1_N_OVERRIDE:
  146. case CS35L43_VPBR_CONFIG:
  147. case CS35L43_VBBR_CONFIG:
  148. case CS35L43_VPBR_STATUS:
  149. case CS35L43_VBBR_STATUS:
  150. case CS35L43_OTW_CONFIG:
  151. case CS35L43_AMP_ERROR_VOL_SEL:
  152. case CS35L43_VOL_STATUS_TO_DSP:
  153. case CS35L43_CLASSH_CONFIG:
  154. case CS35L43_WKFET_AMP_CONFIG:
  155. case CS35L43_NG_CONFIG:
  156. case CS35L43_AMP_GAIN:
  157. case CS35L43_DAC_MSM_CONFIG:
  158. case CS35L43_TST_DAC_MSM_CONFIG:
  159. case CS35L43_ALIVE_DCIN_WD:
  160. case CS35L43_SPKMON_OTP_3:
  161. case CS35L43_IRQ1_CFG:
  162. case CS35L43_IRQ1_STATUS:
  163. case CS35L43_IRQ1_EINT_1:
  164. case CS35L43_IRQ1_EINT_2:
  165. case CS35L43_IRQ1_EINT_3:
  166. case CS35L43_IRQ1_EINT_4:
  167. case CS35L43_IRQ1_EINT_5:
  168. case CS35L43_IRQ1_STS_1:
  169. case CS35L43_IRQ1_STS_2:
  170. case CS35L43_IRQ1_STS_3:
  171. case CS35L43_IRQ1_STS_4:
  172. case CS35L43_IRQ1_STS_5:
  173. case CS35L43_IRQ1_MASK_1:
  174. case CS35L43_IRQ1_MASK_2:
  175. case CS35L43_IRQ1_MASK_3:
  176. case CS35L43_IRQ1_MASK_4:
  177. case CS35L43_IRQ1_MASK_5:
  178. case CS35L43_IRQ1_FRC_1:
  179. case CS35L43_IRQ1_FRC_2:
  180. case CS35L43_IRQ1_FRC_3:
  181. case CS35L43_IRQ1_FRC_4:
  182. case CS35L43_IRQ1_FRC_5:
  183. case CS35L43_IRQ1_EDGE_1:
  184. case CS35L43_IRQ1_EDGE_4:
  185. case CS35L43_IRQ1_POL_1:
  186. case CS35L43_IRQ1_POL_2:
  187. case CS35L43_IRQ1_POL_3:
  188. case CS35L43_IRQ1_POL_4:
  189. case CS35L43_IRQ1_DB_2:
  190. case CS35L43_GPIO_STATUS1:
  191. case CS35L43_GPIO_FORCE:
  192. case CS35L43_GPIO1_CTRL1:
  193. case CS35L43_GPIO2_CTRL1:
  194. case CS35L43_GPIO3_CTRL1:
  195. case CS35L43_GPIO4_CTRL1:
  196. case CS35L43_MIXER_NGATE_CFG:
  197. case CS35L43_MIXER_NGATE_CH1_CFG:
  198. case CS35L43_MIXER_NGATE_CH2_CFG:
  199. case CS35L43_DSP_MBOX_1:
  200. case CS35L43_DSP_MBOX_2:
  201. case CS35L43_DSP_MBOX_3:
  202. case CS35L43_DSP_MBOX_4:
  203. case CS35L43_DSP_MBOX_5:
  204. case CS35L43_DSP_MBOX_6:
  205. case CS35L43_DSP_MBOX_7:
  206. case CS35L43_DSP_MBOX_8:
  207. case CS35L43_DSP_VIRTUAL1_MBOX_1:
  208. case CS35L43_DSP_VIRTUAL1_MBOX_2:
  209. case CS35L43_DSP_VIRTUAL1_MBOX_3:
  210. case CS35L43_DSP_VIRTUAL1_MBOX_4:
  211. case CS35L43_DSP_VIRTUAL1_MBOX_5:
  212. case CS35L43_DSP_VIRTUAL1_MBOX_6:
  213. case CS35L43_DSP_VIRTUAL1_MBOX_7:
  214. case CS35L43_DSP_VIRTUAL1_MBOX_8:
  215. case CS35L43_DSP_VIRTUAL2_MBOX_1:
  216. case CS35L43_DSP_VIRTUAL2_MBOX_2:
  217. case CS35L43_DSP_VIRTUAL2_MBOX_3:
  218. case CS35L43_DSP_VIRTUAL2_MBOX_4:
  219. case CS35L43_DSP_VIRTUAL2_MBOX_5:
  220. case CS35L43_DSP_VIRTUAL2_MBOX_6:
  221. case CS35L43_DSP_VIRTUAL2_MBOX_7:
  222. case CS35L43_DSP_VIRTUAL2_MBOX_8:
  223. case CS35L43_DSP1_SYS_INFO_ID:
  224. case CS35L43_DSP1_CLOCK_FREQ:
  225. case CS35L43_DSP1_CORE_SOFT_RESET:
  226. case CS35L43_DSP1_SCRATCH1:
  227. case CS35L43_DSP1_SCRATCH2:
  228. case CS35L43_DSP1_SCRATCH3:
  229. case CS35L43_DSP1_SCRATCH4:
  230. case CS35L43_DSP1_CCM_CORE_CONTROL:
  231. case CS35L43_DSP1_MPU_LOCK_STATE:
  232. case CS35L43_DSP1_MPU_XM_VIO_STATUS:
  233. case CS35L43_DSP1_MPU_YM_VIO_STATUS:
  234. case CS35L43_DSP1_MPU_PM_VIO_STATUS:
  235. case CS35L43_DSP1_WDT_CONTROL:
  236. case CS35L43_DSP1_WDT_STATUS:
  237. case CS35L43_DSP1_XMEM_PACKED_0 ... CS35L43_DSP1_XMEM_PACKED_6143:
  238. case CS35L43_DSP1_XMEM_UNPACKED32_0 ...
  239. CS35L43_DSP1_XMEM_UNPACKED32_4095:
  240. case CS35L43_DSP1_XMEM_UNPACKED24_0 ...
  241. CS35L43_DSP1_XMEM_UNPACKED24_8191:
  242. case CS35L43_DSP1_XROM_UNPACKED24_0 ...
  243. CS35L43_DSP1_XROM_UNPACKED24_6141:
  244. case CS35L43_DSP1_YMEM_PACKED_0 ... CS35L43_DSP1_YMEM_PACKED_1532:
  245. case CS35L43_DSP1_YMEM_UNPACKED32_0 ...
  246. CS35L43_DSP1_YMEM_UNPACKED32_1022:
  247. case CS35L43_DSP1_YMEM_UNPACKED24_0 ...
  248. CS35L43_DSP1_YMEM_UNPACKED24_2045:
  249. case CS35L43_DSP1_PMEM_0 ... CS35L43_DSP1_PMEM_5114:
  250. return true;
  251. default:
  252. return false;
  253. }
  254. }
  255. bool cs35l43_precious_reg(struct device *dev, unsigned int reg)
  256. {
  257. switch (reg) {
  258. case CS35L43_DSP1_XMEM_PACKED_0 ... CS35L43_DSP1_XMEM_PACKED_6143:
  259. case CS35L43_DSP1_XMEM_UNPACKED32_0 ...
  260. CS35L43_DSP1_XMEM_UNPACKED32_4095:
  261. case CS35L43_DSP1_XROM_UNPACKED24_0 ...
  262. CS35L43_DSP1_XROM_UNPACKED24_6141:
  263. case CS35L43_DSP1_YMEM_PACKED_0 ... CS35L43_DSP1_YMEM_PACKED_1532:
  264. case CS35L43_DSP1_YMEM_UNPACKED32_0 ...
  265. CS35L43_DSP1_YMEM_UNPACKED32_1022:
  266. case CS35L43_DSP1_PMEM_0 ... CS35L43_DSP1_PMEM_5114:
  267. return true;
  268. default:
  269. return false;
  270. }
  271. return false;
  272. }
  273. bool cs35l43_volatile_reg(struct device *dev, unsigned int reg)
  274. {
  275. switch (reg) {
  276. case CS35L43_GLOBAL_STATUS:
  277. case CS35L43_CHIP_STATUS:
  278. case CS35L43_CHIP_STATUS2:
  279. case CS35L43_STATUS:
  280. case CS35L43_ENABLES_AND_CODES_ANA:
  281. case CS35L43_ENABLES_AND_CODES_DIG:
  282. case CS35L43_VBST_CTL_1:
  283. case CS35L43_VBST_CTL_2:
  284. case CS35L43_VPBR_STATUS:
  285. case CS35L43_VBBR_STATUS:
  286. case CS35L43_SPKMON_OTP_3:
  287. case CS35L43_IRQ1_STATUS:
  288. case CS35L43_IRQ1_EINT_1:
  289. case CS35L43_IRQ1_EINT_2:
  290. case CS35L43_IRQ1_EINT_3:
  291. case CS35L43_IRQ1_EINT_4:
  292. case CS35L43_IRQ1_EINT_5:
  293. case CS35L43_IRQ1_STS_1:
  294. case CS35L43_IRQ1_STS_2:
  295. case CS35L43_IRQ1_STS_3:
  296. case CS35L43_IRQ1_STS_4:
  297. case CS35L43_IRQ1_STS_5:
  298. case CS35L43_GPIO_STATUS1:
  299. case CS35L43_DSP_MBOX_1:
  300. case CS35L43_DSP_MBOX_2:
  301. case CS35L43_DSP_MBOX_3:
  302. case CS35L43_DSP_MBOX_4:
  303. case CS35L43_DSP_MBOX_5:
  304. case CS35L43_DSP_MBOX_6:
  305. case CS35L43_DSP_MBOX_7:
  306. case CS35L43_DSP_MBOX_8:
  307. case CS35L43_DSP_VIRTUAL1_MBOX_1:
  308. case CS35L43_DSP_VIRTUAL1_MBOX_2:
  309. case CS35L43_DSP_VIRTUAL1_MBOX_3:
  310. case CS35L43_DSP_VIRTUAL1_MBOX_4:
  311. case CS35L43_DSP_VIRTUAL1_MBOX_5:
  312. case CS35L43_DSP_VIRTUAL1_MBOX_6:
  313. case CS35L43_DSP_VIRTUAL1_MBOX_7:
  314. case CS35L43_DSP_VIRTUAL1_MBOX_8:
  315. case CS35L43_DSP_VIRTUAL2_MBOX_1:
  316. case CS35L43_DSP_VIRTUAL2_MBOX_2:
  317. case CS35L43_DSP_VIRTUAL2_MBOX_3:
  318. case CS35L43_DSP_VIRTUAL2_MBOX_4:
  319. case CS35L43_DSP_VIRTUAL2_MBOX_5:
  320. case CS35L43_DSP_VIRTUAL2_MBOX_6:
  321. case CS35L43_DSP_VIRTUAL2_MBOX_7:
  322. case CS35L43_DSP_VIRTUAL2_MBOX_8:
  323. case CS35L43_DSP1_CORE_SOFT_RESET:
  324. case CS35L43_DSP1_SCRATCH1:
  325. case CS35L43_DSP1_SCRATCH2:
  326. case CS35L43_DSP1_SCRATCH3:
  327. case CS35L43_DSP1_SCRATCH4:
  328. case CS35L43_DSP1_MPU_LOCK_STATE:
  329. case CS35L43_DSP1_MPU_XM_VIO_STATUS:
  330. case CS35L43_DSP1_MPU_YM_VIO_STATUS:
  331. case CS35L43_DSP1_MPU_PM_VIO_STATUS:
  332. case CS35L43_DSP1_WDT_STATUS:
  333. case CS35L43_DSP1_XMEM_PACKED_0 ...
  334. CS35L43_DSP1_XMEM_PACKED_6143:
  335. case CS35L43_DSP1_XMEM_UNPACKED32_0 ...
  336. CS35L43_DSP1_XMEM_UNPACKED32_4095:
  337. case CS35L43_DSP1_XMEM_UNPACKED24_0 ...
  338. CS35L43_DSP1_XMEM_UNPACKED24_8191:
  339. case CS35L43_DSP1_XROM_UNPACKED24_0 ...
  340. CS35L43_DSP1_XROM_UNPACKED24_6141:
  341. case CS35L43_DSP1_YMEM_PACKED_0 ...
  342. CS35L43_DSP1_YMEM_PACKED_1532:
  343. case CS35L43_DSP1_YMEM_UNPACKED32_0 ...
  344. CS35L43_DSP1_YMEM_UNPACKED32_1022:
  345. case CS35L43_DSP1_YMEM_UNPACKED24_0 ...
  346. CS35L43_DSP1_YMEM_UNPACKED24_2045:
  347. case CS35L43_DSP1_PMEM_0 ...
  348. CS35L43_DSP1_PMEM_5114:
  349. return true;
  350. default:
  351. return false;
  352. }
  353. }
  354. const struct reg_default cs35l43_reg[CS35L43_NUM_DEFAULTS] = {
  355. { CS35L43_CTRL_ASYNC0, 0x00000000 },
  356. { CS35L43_CTRL_ASYNC1, 0x00000004 },
  357. { CS35L43_CTRL_ASYNC2, 0x00000000 },
  358. { CS35L43_CTRL_ASYNC3, 0x00000000 },
  359. { CS35L43_CTRL_IF_CONFIG1, 0x00020002 },
  360. { CS35L43_CTRL_IF_STATUS1, 0x00000000 },
  361. { CS35L43_CTRL_IF_STATUS2, 0x00000000 },
  362. { CS35L43_CTRL_IF_CONFIG2, 0x00000000 },
  363. { CS35L43_CTRL_IF_DEBUG1, 0x00000000 },
  364. { CS35L43_CTRL_IF_DEBUG2, 0x00000000 },
  365. { CS35L43_CTRL_IF_DEBUG3, 0x00000000 },
  366. { CS35L43_CIF_MON1, 0x00002003 },
  367. { CS35L43_CIF_MON2, 0x00000000 },
  368. { CS35L43_CIF_MON_PADDR, 0x00000000 },
  369. { CS35L43_CTRL_IF_SPARE1, 0x00000000 },
  370. { CS35L43_CTRL_IF_I2C, 0x00000004 },
  371. { CS35L43_CTRL_IF_I2C_1_CONTROL, 0x00000040 },
  372. { CS35L43_CTRL_IF_I2C_1_BROADCAST, 0x00000088 },
  373. { CS35L43_APB_MSTR_DSP_BRIDGE_ERR, 0x00000000 },
  374. { CS35L43_CIF1_BRIDGE_ERR, 0x00000000 },
  375. { CS35L43_CIF2_BRIDGE_ERR, 0x00000000 },
  376. { CS35L43_LRCK_PAD_CONTROL, 0x00000007 },
  377. { CS35L43_SCLK_PAD_CONTROL, 0x00000007 },
  378. { CS35L43_SDIN_PAD_CONTROL, 0x00000007 },
  379. { CS35L43_HPF_TST, 0x00000000 },
  380. { CS35L43_VC_TST1, 0x00000000 },
  381. { CS35L43_VC_TST2, 0x00000000 },
  382. { CS35L43_INTP_TST, 0x00000680 },
  383. { CS35L43_SRC_MAGCOMP_TST, 0x0000000D },
  384. { CS35L43_SRC_MAGCOMP_B0_OVERRIDE, 0x00000000 },
  385. { CS35L43_SRC_MAGCOMP_B1_OVERRIDE, 0x00000000 },
  386. { CS35L43_SRC_MAGCOMP_A1_N_OVERRIDE, 0x00000000 },
  387. { CS35L43_OTW_CONFIG, 0x00000001 },
  388. { CS35L43_AMP_ERROR_VOL_SEL, 0x00000000 },
  389. { CS35L43_VOL_STATUS_TO_DSP, 0x00000000 },
  390. { CS35L43_IRQ1_POL_1, 0x00000000 },
  391. { CS35L43_IRQ1_POL_2, 0x00000000 },
  392. { CS35L43_IRQ1_POL_3, 0x00000000 },
  393. { CS35L43_IRQ1_POL_4, 0x00000000 },
  394. { CS35L43_GPIO3_CTRL1, 0x80000001 },
  395. { CS35L43_GPIO4_CTRL1, 0x80000001 },
  396. };
  397. const unsigned int cs35l43_hibernate_update_regs[CS35L43_POWER_SEQ_LENGTH] = {
  398. CS35L43_ASPTX1_INPUT,
  399. CS35L43_ASPTX2_INPUT,
  400. CS35L43_ASPTX3_INPUT,
  401. CS35L43_ASPTX4_INPUT,
  402. CS35L43_DSP1RX1_INPUT,
  403. CS35L43_DSP1RX2_INPUT,
  404. CS35L43_DSP1RX3_INPUT,
  405. CS35L43_DSP1RX4_INPUT,
  406. CS35L43_DSP1RX5_INPUT,
  407. CS35L43_DSP1RX6_INPUT,
  408. CS35L43_DACPCM1_INPUT,
  409. CS35L43_DACPCM2_INPUT,
  410. CS35L43_ASP_FRAME_CONTROL1,
  411. CS35L43_ASP_FRAME_CONTROL5,
  412. CS35L43_AMP_CTRL,
  413. CS35L43_AMP_GAIN,
  414. CS35L43_GLOBAL_SAMPLE_RATE,
  415. CS35L43_DSP1_SAMPLE_RATE_RX1,
  416. CS35L43_DSP1_SAMPLE_RATE_RX2,
  417. CS35L43_DSP1_SAMPLE_RATE_TX1,
  418. CS35L43_DSP1_SAMPLE_RATE_TX2,
  419. CS35L43_ALIVE_DCIN_WD,
  420. CS35L43_MONITOR_FILT,
  421. CS35L43_DAC_MSM_CONFIG,
  422. CS35L43_ASP_CONTROL2,
  423. CS35L43_ASP_CONTROL3,
  424. CS35L43_ASP_DATA_CONTROL1,
  425. CS35L43_ASP_DATA_CONTROL5,
  426. CS35L43_GPIO_PAD_CONTROL,
  427. CS35L43_VBST_CTL_1,
  428. CS35L43_VBST_CTL_2,
  429. CS35L43_BST_IPK_CTL,
  430. CS35L43_VPBR_CONFIG,
  431. CS35L43_GLOBAL_SYNC,
  432. CS35L43_BLOCK_ENABLES,
  433. CS35L43_BLOCK_ENABLES2,
  434. CS35L43_NG_CONFIG,
  435. CS35L43_MIXER_NGATE_CH1_CFG,
  436. CS35L43_MIXER_NGATE_CH2_CFG,
  437. CS35L43_FS_MON_0,
  438. CS35L43_TST_DAC_MSM_CONFIG,
  439. };
  440. const struct cs35l43_pll_sysclk_config cs35l43_pll_sysclk[64] = {
  441. { 32768, 0x00 },
  442. { 8000, 0x01 },
  443. { 11025, 0x02 },
  444. { 12000, 0x03 },
  445. { 16000, 0x04 },
  446. { 22050, 0x05 },
  447. { 24000, 0x06 },
  448. { 32000, 0x07 },
  449. { 44100, 0x08 },
  450. { 48000, 0x09 },
  451. { 88200, 0x0A },
  452. { 96000, 0x0B },
  453. { 128000, 0x0C },
  454. { 176400, 0x0D },
  455. { 192000, 0x0E },
  456. { 256000, 0x0F },
  457. { 352800, 0x10 },
  458. { 384000, 0x11 },
  459. { 512000, 0x12 },
  460. { 705600, 0x13 },
  461. { 750000, 0x14 },
  462. { 768000, 0x15 },
  463. { 1000000, 0x16 },
  464. { 1024000, 0x17 },
  465. { 1200000, 0x18 },
  466. { 1411200, 0x19 },
  467. { 1500000, 0x1A },
  468. { 1536000, 0x1B },
  469. { 2000000, 0x1C },
  470. { 2048000, 0x1D },
  471. { 2400000, 0x1E },
  472. { 2822400, 0x1F },
  473. { 3000000, 0x20 },
  474. { 3072000, 0x21 },
  475. { 3200000, 0x22 },
  476. { 4000000, 0x23 },
  477. { 4096000, 0x24 },
  478. { 4800000, 0x25 },
  479. { 5644800, 0x26 },
  480. { 6000000, 0x27 },
  481. { 6144000, 0x28 },
  482. { 6250000, 0x29 },
  483. { 6400000, 0x2A },
  484. { 6500000, 0x2B },
  485. { 6750000, 0x2C },
  486. { 7526400, 0x2D },
  487. { 8000000, 0x2E },
  488. { 8192000, 0x2F },
  489. { 9600000, 0x30 },
  490. { 11289600, 0x31 },
  491. { 12000000, 0x32 },
  492. { 12288000, 0x33 },
  493. { 12500000, 0x34 },
  494. { 12800000, 0x35 },
  495. { 13000000, 0x36 },
  496. { 13500000, 0x37 },
  497. { 19200000, 0x38 },
  498. { 22579200, 0x39 },
  499. { 24000000, 0x3A },
  500. { 24576000, 0x3B },
  501. { 25000000, 0x3C },
  502. { 25600000, 0x3D },
  503. { 26000000, 0x3E },
  504. { 27000000, 0x3F },
  505. };
  506. const struct cs35l43_fs_mon_config cs35l43_fs_mon[7] = {
  507. { 705600, 154, 244 },
  508. { 768000, 141, 224 },
  509. { 1411200, 77, 125 },
  510. { 1536000, 71, 115 },
  511. { 2822400, 39, 65 },
  512. { 3072000, 36, 60 },
  513. { 5644800, 20, 35 },
  514. };
  515. const u8 cs35l43_write_seq_op_sizes[CS35L43_POWER_SEQ_NUM_OPS][2] = {
  516. { CS35L43_POWER_SEQ_OP_WRITE_REG_FULL,
  517. CS35L43_POWER_SEQ_OP_WRITE_REG_FULL_WORDS},
  518. { CS35L43_POWER_SEQ_OP_WRITE_FIELD,
  519. CS35L43_POWER_SEQ_OP_WRITE_FIELD_WORDS},
  520. { CS35L43_POWER_SEQ_OP_WRITE_REG_ADDR8,
  521. CS35L43_POWER_SEQ_OP_WRITE_REG_ADDR8_WORDS},
  522. { CS35L43_POWER_SEQ_OP_WRITE_REG_INCR,
  523. CS35L43_POWER_SEQ_OP_WRITE_REG_INCR_WORDS},
  524. { CS35L43_POWER_SEQ_OP_WRITE_REG_L16,
  525. CS35L43_POWER_SEQ_OP_WRITE_REG_L16_WORDS},
  526. { CS35L43_POWER_SEQ_OP_WRITE_REG_H16,
  527. CS35L43_POWER_SEQ_OP_WRITE_REG_H16_WORDS},
  528. { CS35L43_POWER_SEQ_OP_DELAY,
  529. CS35L43_POWER_SEQ_OP_DELAY_WORDS},
  530. { CS35L43_POWER_SEQ_OP_END,
  531. CS35L43_POWER_SEQ_OP_END_WORDS},
  532. };
  533. const struct dev_pm_ops cs35l43_pm_ops = {
  534. SET_RUNTIME_PM_OPS(cs35l43_suspend_runtime, cs35l43_resume_runtime, NULL)
  535. SET_SYSTEM_SLEEP_PM_OPS(cs35l43_sys_suspend, cs35l43_sys_resume)
  536. SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cs35l43_sys_suspend_noirq, cs35l43_sys_resume_noirq)
  537. };