cs35l45-tables.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
  2. /*
  3. * cs35l45-tables.c -- CS35L45 ALSA SoC audio driver
  4. *
  5. * Copyright 2019 Cirrus Logic, Inc.
  6. *
  7. * Author: James Schulman <[email protected]>
  8. *
  9. */
  10. #include <linux/module.h>
  11. #include <linux/regulator/consumer.h>
  12. #include "wm_adsp.h"
  13. #include "cs35l45.h"
  14. #include <sound/cs35l45.h>
  15. static const struct reg_default cs35l45_reg[] = {
  16. {CS35L45_BLOCK_ENABLES, 0x00003323},
  17. {CS35L45_BLOCK_ENABLES2, 0x00000010},
  18. {CS35L45_GLOBAL_OVERRIDES, 0x00000002},
  19. {CS35L45_GLOBAL_SYNC, 0x00000000},
  20. {CS35L45_ERROR_RELEASE, 0x00000000},
  21. {CS35L45_SYNC_GPIO1, 0x00000007},
  22. {CS35L45_INTB_GPIO2_MCLK_REF, 0x00000005},
  23. {CS35L45_GPIO3, 0x00000005},
  24. {CS35L45_GPIO_GLOBAL_ENABLE_CONTROL, 0x00000000},
  25. {CS35L45_PWRMGT_CTL, 0x00000000},
  26. {CS35L45_WAKESRC_CTL, 0x00000008},
  27. {CS35L45_WKI2C_CTL, 0x00000030},
  28. {CS35L45_PWRMGT_STS, 0x00000000},
  29. {CS35L45_REFCLK_INPUT, 0x00000510},
  30. {CS35L45_GLOBAL_SAMPLE_RATE, 0x00000003},
  31. {CS35L45_SWIRE_CLK_CTRL, 0x00000000},
  32. {CS35L45_BOOST_VOLTAGE_CFG, 0x000001BE},
  33. {CS35L45_BOOST_CCM_CFG, 0xF0000001},
  34. {CS35L45_BOOST_DCM_CFG, 0x08710200},
  35. {CS35L45_BOOST_LPMODE_CFG, 0x00000002},
  36. {CS35L45_BOOST_RAMP_CFG, 0x0000004A},
  37. {CS35L45_BOOST_STARTUP_CFG, 0x0000831D},
  38. {CS35L45_BOOST_OV_CFG, 0x005400D0},
  39. {CS35L45_BOOST_UV_CFG, 0x00000570},
  40. {CS35L45_BOOST_STATUS, 0x00000001},
  41. {CS35L45_BST_BPE_INST_THLD, 0x5A46321E},
  42. {CS35L45_BST_BPE_INST_ILIM, 0x3C140C04},
  43. {CS35L45_BST_BPE_INST_SS_ILIM, 0x1C080400},
  44. {CS35L45_BST_BPE_INST_ATK_RATE, 0x06060600},
  45. {CS35L45_BST_BPE_INST_HOLD_TIME, 0x02020202},
  46. {CS35L45_BST_BPE_INST_RLS_RATE, 0x06060606},
  47. {CS35L45_BST_BPE_MISC_CONFIG, 0x00000000},
  48. {CS35L45_BST_BPE_IL_LIM_THLD, 0x0006022C},
  49. {CS35L45_BST_BPE_IL_LIM_DLY, 0x0000040C},
  50. {CS35L45_BST_BPE_IL_LIM_ATK_RATE, 0x00000000},
  51. {CS35L45_BST_BPE_IL_LIM_RLS_RATE, 0x00000000},
  52. {CS35L45_BST_BPE_INST_STATUS, 0x0000005A},
  53. {CS35L45_MONITOR_FILT, 0x00000000},
  54. {CS35L45_IMON_COMP, 0x00000036},
  55. {CS35L45_STATUS, 0x00000010},
  56. {CS35L45_MON_VALUE, 0x00000000},
  57. {CS35L45_ASP_ENABLES1, 0x00000000},
  58. {CS35L45_ASP_CONTROL1, 0x00000028},
  59. {CS35L45_ASP_CONTROL2, 0x18180200},
  60. {CS35L45_ASP_CONTROL3, 0x00000002},
  61. {CS35L45_ASP_FRAME_CONTROL1, 0x03020100},
  62. {CS35L45_ASP_FRAME_CONTROL2, 0x00000004},
  63. {CS35L45_ASP_FRAME_CONTROL5, 0x00000100},
  64. {CS35L45_ASP_DATA_CONTROL1, 0x00000018},
  65. {CS35L45_ASP_DATA_CONTROL5, 0x00000018},
  66. {CS35L45_DACPCM1_INPUT, 0x00000008},
  67. {CS35L45_ASPTX1_INPUT, 0x00000018},
  68. {CS35L45_ASPTX2_INPUT, 0x00000019},
  69. {CS35L45_ASPTX3_INPUT, 0x00000020},
  70. {CS35L45_ASPTX4_INPUT, 0x00000021},
  71. {CS35L45_ASPTX5_INPUT, 0x00000048},
  72. {CS35L45_DSP1RX1_INPUT, 0x00000008},
  73. {CS35L45_DSP1RX2_INPUT, 0x00000009},
  74. {CS35L45_DSP1RX3_INPUT, 0x00000018},
  75. {CS35L45_DSP1RX4_INPUT, 0x00000019},
  76. {CS35L45_DSP1RX5_INPUT, 0x00000020},
  77. {CS35L45_DSP1RX6_INPUT, 0x00000028},
  78. {CS35L45_DSP1RX7_INPUT, 0x0000003A},
  79. {CS35L45_DSP1RX8_INPUT, 0x00000028},
  80. {CS35L45_NGATE1_INPUT, 0x00000008},
  81. {CS35L45_NGATE2_INPUT, 0x00000009},
  82. {CS35L45_SWIRE_PORT1_CH1_INPUT, 0x00000018},
  83. {CS35L45_SWIRE_PORT1_CH2_INPUT, 0x00000019},
  84. {CS35L45_SWIRE_PORT1_CH3_INPUT, 0x00000020},
  85. {CS35L45_SWIRE_PORT1_CH4_INPUT, 0x00000021},
  86. {CS35L45_SWIRE_PORT1_CH5_INPUT, 0x00000048},
  87. {CS35L45_AMP_ERR_VOL_SEL, 0x00000001},
  88. {CS35L45_TEMP_WARN_THRESHOLD, 0x00000003},
  89. {CS35L45_TEMP_WARN_CONFIG, 0x00522183},
  90. {CS35L45_TEMP_WARN_TRIG_AUTO, 0x00000010},
  91. {CS35L45_TEMP_WARN_STATUS, 0x00000000},
  92. {CS35L45_BPE_INST_THLD, 0x5A46321E},
  93. {CS35L45_BPE_INST_ATTN, 0x060C1218},
  94. {CS35L45_BPE_INST_ATK_RATE, 0x06060606},
  95. {CS35L45_BPE_INST_HOLD_TIME, 0x02020202},
  96. {CS35L45_BPE_INST_RLS_RATE, 0x05050505},
  97. {CS35L45_BPE_MISC_CONFIG, 0x00008000},
  98. {CS35L45_BPE_INST_STATUS, 0x0000005A},
  99. {CS35L45_HVLV_CONFIG, 0x00440017},
  100. {CS35L45_LDPM_CONFIG, 0x00013636},
  101. {CS35L45_CLASSH_CONFIG1, 0x02000B04},
  102. {CS35L45_CLASSH_CONFIG2, 0x009600FA},
  103. {CS35L45_CLASSH_CONFIG3, 0x00000000},
  104. {CS35L45_AUD_MEM, 0x00000007},
  105. {CS35L45_AMP_PCM_CONTROL, 0x00100000},
  106. {CS35L45_AMP_GAIN, 0x00002300},
  107. {CS35L45_DAC_MSM_CONFIG, 0x00000020},
  108. {CS35L45_AMP_OUTPUT_MUTE, 0x00000000},
  109. {CS35L45_AMP_OUTPUT_DRV, 0x00000040},
  110. {CS35L45_ALIVE_DCIN_WD, 0x00000263},
  111. {CS35L45_IRQ1_CFG, 0x00000000},
  112. {CS35L45_IRQ2_CFG, 0x00000000},
  113. {CS35L45_GPIO1_CTRL1, 0x81000001},
  114. {CS35L45_GPIO2_CTRL1, 0x81000001},
  115. {CS35L45_GPIO3_CTRL1, 0x81000001},
  116. {CS35L45_MIXER_NGATE_CH1_CFG, 0x00000303},
  117. {CS35L45_MIXER_NGATE_CH2_CFG, 0x00000303},
  118. {CS35L45_CLOCK_DETECT_1, 0x00000030},
  119. };
  120. static bool cs35l45_readable_reg(struct device *dev, unsigned int reg)
  121. {
  122. switch (reg) {
  123. case CS35L45_DEVID:
  124. case CS35L45_REVID:
  125. case CS35L45_RELID:
  126. case CS35L45_OTPID:
  127. case CS35L45_SFT_RESET:
  128. case CS35L45_GLOBAL_ENABLES:
  129. case CS35L45_BLOCK_ENABLES:
  130. case CS35L45_BLOCK_ENABLES2:
  131. case CS35L45_GLOBAL_OVERRIDES:
  132. case CS35L45_GLOBAL_SYNC:
  133. case CS35L45_ERROR_RELEASE:
  134. case CS35L45_SYNC_GPIO1:
  135. case CS35L45_INTB_GPIO2_MCLK_REF:
  136. case CS35L45_GPIO3:
  137. case CS35L45_GPIO_GLOBAL_ENABLE_CONTROL:
  138. case CS35L45_PWRMGT_CTL:
  139. case CS35L45_WAKESRC_CTL:
  140. case CS35L45_WKI2C_CTL:
  141. case CS35L45_PWRMGT_STS:
  142. case CS35L45_REFCLK_INPUT:
  143. case CS35L45_GLOBAL_SAMPLE_RATE:
  144. case CS35L45_SWIRE_CLK_CTRL:
  145. case CS35L45_SYNC_TX_RX_ENABLES:
  146. case CS35L45_SYNC_SW_TX_ID:
  147. case CS35L45_BOOST_VOLTAGE_CFG:
  148. case CS35L45_BOOST_CCM_CFG:
  149. case CS35L45_BOOST_DCM_CFG:
  150. case CS35L45_BOOST_LPMODE_CFG:
  151. case CS35L45_BOOST_RAMP_CFG:
  152. case CS35L45_BOOST_STARTUP_CFG:
  153. case CS35L45_BOOST_OV_CFG:
  154. case CS35L45_BOOST_UV_CFG:
  155. case CS35L45_BOOST_STATUS:
  156. case CS35L45_BST_BPE_INST_THLD:
  157. case CS35L45_BST_BPE_INST_ILIM:
  158. case CS35L45_BST_BPE_INST_SS_ILIM:
  159. case CS35L45_BST_BPE_INST_ATK_RATE:
  160. case CS35L45_BST_BPE_INST_HOLD_TIME:
  161. case CS35L45_BST_BPE_INST_RLS_RATE:
  162. case CS35L45_BST_BPE_MISC_CONFIG:
  163. case CS35L45_BST_BPE_IL_LIM_THLD:
  164. case CS35L45_BST_BPE_IL_LIM_DLY:
  165. case CS35L45_BST_BPE_IL_LIM_ATK_RATE:
  166. case CS35L45_BST_BPE_IL_LIM_RLS_RATE:
  167. case CS35L45_BST_BPE_INST_STATUS:
  168. case CS35L45_MONITOR_FILT:
  169. case CS35L45_IMON_COMP:
  170. case CS35L45_STATUS:
  171. case CS35L45_MON_VALUE:
  172. case CS35L45_ASP_ENABLES1:
  173. case CS35L45_ASP_CONTROL1:
  174. case CS35L45_ASP_CONTROL2:
  175. case CS35L45_ASP_CONTROL3:
  176. case CS35L45_ASP_FRAME_CONTROL1:
  177. case CS35L45_ASP_FRAME_CONTROL2:
  178. case CS35L45_ASP_FRAME_CONTROL5:
  179. case CS35L45_ASP_DATA_CONTROL1:
  180. case CS35L45_ASP_DATA_CONTROL5:
  181. case CS35L45_DACPCM1_INPUT:
  182. case CS35L45_MIXER_PILOT0_INPUT:
  183. case CS35L45_ASPTX1_INPUT:
  184. case CS35L45_ASPTX2_INPUT:
  185. case CS35L45_ASPTX3_INPUT:
  186. case CS35L45_ASPTX4_INPUT:
  187. case CS35L45_ASPTX5_INPUT:
  188. case CS35L45_DSP1RX1_INPUT:
  189. case CS35L45_DSP1RX2_INPUT:
  190. case CS35L45_DSP1RX3_INPUT:
  191. case CS35L45_DSP1RX4_INPUT:
  192. case CS35L45_DSP1RX5_INPUT:
  193. case CS35L45_DSP1RX6_INPUT:
  194. case CS35L45_DSP1RX7_INPUT:
  195. case CS35L45_DSP1RX8_INPUT:
  196. case CS35L45_NGATE1_INPUT:
  197. case CS35L45_NGATE2_INPUT:
  198. case CS35L45_SWIRE_PORT1_CH1_INPUT:
  199. case CS35L45_SWIRE_PORT1_CH2_INPUT:
  200. case CS35L45_SWIRE_PORT1_CH3_INPUT:
  201. case CS35L45_SWIRE_PORT1_CH4_INPUT:
  202. case CS35L45_SWIRE_PORT1_CH5_INPUT:
  203. case CS35L45_AMP_ERR_VOL_SEL:
  204. case CS35L45_TEMP_WARN_THRESHOLD:
  205. case CS35L45_TEMP_WARN_CONFIG:
  206. case CS35L45_TEMP_WARN_TRIG_AUTO:
  207. case CS35L45_TEMP_WARN_STATUS:
  208. case CS35L45_BPE_INST_THLD:
  209. case CS35L45_BPE_INST_ATTN:
  210. case CS35L45_BPE_INST_ATK_RATE:
  211. case CS35L45_BPE_INST_HOLD_TIME:
  212. case CS35L45_BPE_INST_RLS_RATE:
  213. case CS35L45_BPE_MISC_CONFIG:
  214. case CS35L45_BPE_INST_STATUS:
  215. case CS35L45_HVLV_CONFIG:
  216. case CS35L45_LDPM_CONFIG:
  217. case CS35L45_CLASSH_CONFIG1:
  218. case CS35L45_CLASSH_CONFIG2:
  219. case CS35L45_CLASSH_CONFIG3:
  220. case CS35L45_AUD_MEM:
  221. case CS35L45_AMP_PCM_CONTROL:
  222. case CS35L45_AMP_GAIN:
  223. case CS35L45_DAC_MSM_CONFIG:
  224. case CS35L45_AMP_OUTPUT_MUTE:
  225. case CS35L45_AMP_OUTPUT_DRV:
  226. case CS35L45_ALIVE_DCIN_WD:
  227. case CS35L45_IRQ1_CFG:
  228. case CS35L45_IRQ1_STATUS:
  229. case CS35L45_IRQ1_EINT_1 ... CS35L45_IRQ1_EINT_18:
  230. case CS35L45_IRQ1_STS_1 ... CS35L45_IRQ1_STS_18:
  231. case CS35L45_IRQ1_MASK_1 ... CS35L45_IRQ1_MASK_18:
  232. case CS35L45_IRQ1_EDGE_1:
  233. case CS35L45_IRQ1_EDGE_4:
  234. case CS35L45_IRQ1_POL_1:
  235. case CS35L45_IRQ1_POL_2:
  236. case CS35L45_IRQ1_POL_4:
  237. case CS35L45_IRQ1_DB_3:
  238. case CS35L45_IRQ2_CFG:
  239. case CS35L45_IRQ2_STATUS:
  240. case CS35L45_IRQ2_EINT_1:
  241. case CS35L45_IRQ2_EINT_2:
  242. case CS35L45_IRQ2_EINT_3:
  243. case CS35L45_IRQ2_EINT_4:
  244. case CS35L45_IRQ2_EINT_5:
  245. case CS35L45_IRQ2_EINT_7:
  246. case CS35L45_IRQ2_EINT_8:
  247. case CS35L45_IRQ2_EINT_18:
  248. case CS35L45_IRQ2_STS_1:
  249. case CS35L45_IRQ2_STS_2:
  250. case CS35L45_IRQ2_STS_3:
  251. case CS35L45_IRQ2_STS_4:
  252. case CS35L45_IRQ2_STS_5:
  253. case CS35L45_IRQ2_STS_7:
  254. case CS35L45_IRQ2_STS_8:
  255. case CS35L45_IRQ2_STS_18:
  256. case CS35L45_IRQ2_MASK_1:
  257. case CS35L45_IRQ2_MASK_2:
  258. case CS35L45_IRQ2_MASK_3:
  259. case CS35L45_IRQ2_MASK_4:
  260. case CS35L45_IRQ2_MASK_5:
  261. case CS35L45_IRQ2_MASK_7:
  262. case CS35L45_IRQ2_MASK_8:
  263. case CS35L45_IRQ2_MASK_18:
  264. case CS35L45_IRQ2_EDGE_1:
  265. case CS35L45_IRQ2_EDGE_4:
  266. case CS35L45_IRQ2_POL_1:
  267. case CS35L45_IRQ2_POL_2:
  268. case CS35L45_IRQ2_POL_4:
  269. case CS35L45_IRQ2_DB_3:
  270. case CS35L45_GPIO_STATUS1:
  271. case CS35L45_GPIO1_CTRL1:
  272. case CS35L45_GPIO2_CTRL1:
  273. case CS35L45_GPIO3_CTRL1:
  274. case CS35L45_MIXER_NGATE_CH1_CFG:
  275. case CS35L45_MIXER_NGATE_CH2_CFG:
  276. case CS35L45_DSP_MBOX_1:
  277. case CS35L45_DSP_MBOX_2:
  278. case CS35L45_DSP_MBOX_3:
  279. case CS35L45_DSP_MBOX_4:
  280. case CS35L45_DSP_MBOX_5:
  281. case CS35L45_DSP_MBOX_6:
  282. case CS35L45_DSP_MBOX_7:
  283. case CS35L45_DSP_MBOX_8:
  284. case CS35L45_DSP_VIRT1_MBOX_1:
  285. case CS35L45_DSP_VIRT1_MBOX_2:
  286. case CS35L45_DSP_VIRT1_MBOX_3:
  287. case CS35L45_DSP_VIRT1_MBOX_4:
  288. case CS35L45_DSP_VIRT1_MBOX_5:
  289. case CS35L45_DSP_VIRT1_MBOX_6:
  290. case CS35L45_DSP_VIRT1_MBOX_7:
  291. case CS35L45_DSP_VIRT1_MBOX_8:
  292. case CS35L45_DSP_VIRT2_MBOX_1:
  293. case CS35L45_DSP_VIRT2_MBOX_2:
  294. case CS35L45_DSP_VIRT2_MBOX_3:
  295. case CS35L45_DSP_VIRT2_MBOX_4:
  296. case CS35L45_DSP_VIRT2_MBOX_5:
  297. case CS35L45_DSP_VIRT2_MBOX_6:
  298. case CS35L45_DSP_VIRT2_MBOX_7:
  299. case CS35L45_DSP_VIRT2_MBOX_8:
  300. case CS35L45_CLOCK_DETECT_1:
  301. case CS35L45_DSP1_SYS_ID:
  302. case CS35L45_DSP1_CLOCK_FREQ:
  303. case CS35L45_DSP1_RX1_RATE:
  304. case CS35L45_DSP1_RX2_RATE:
  305. case CS35L45_DSP1_RX3_RATE:
  306. case CS35L45_DSP1_RX4_RATE:
  307. case CS35L45_DSP1_RX5_RATE:
  308. case CS35L45_DSP1_RX6_RATE:
  309. case CS35L45_DSP1_RX7_RATE:
  310. case CS35L45_DSP1_RX8_RATE:
  311. case CS35L45_DSP1_TX1_RATE:
  312. case CS35L45_DSP1_TX2_RATE:
  313. case CS35L45_DSP1_TX3_RATE:
  314. case CS35L45_DSP1_TX4_RATE:
  315. case CS35L45_DSP1_TX5_RATE:
  316. case CS35L45_DSP1_TX6_RATE:
  317. case CS35L45_DSP1_TX7_RATE:
  318. case CS35L45_DSP1_TX8_RATE:
  319. case CS35L45_DSP1_SCRATCH1:
  320. case CS35L45_DSP1_SCRATCH2:
  321. case CS35L45_DSP1_SCRATCH3:
  322. case CS35L45_DSP1_SCRATCH4:
  323. case CS35L45_DSP1_CCM_CORE_CONTROL:
  324. case CS35L45_DSP1_STREAM_ARB_MSTR1_CONFIG_0:
  325. case CS35L45_DSP1_STREAM_ARB_TX1_CONFIG_0:
  326. case CS35L45_DSP1_XMEM_PACK_0 ... CS35L45_DSP1_XMEM_PACK_4607:
  327. case CS35L45_DSP1_XMEM_UNPACK32_0 ... CS35L45_DSP1_XMEM_UNPACK32_3071:
  328. case CS35L45_DSP1_XMEM_UNPACK24_0 ... CS35L45_DSP1_XMEM_UNPACK24_6143:
  329. case CS35L45_DSP1_YMEM_PACK_0 ... CS35L45_DSP1_YMEM_PACK_1532:
  330. case CS35L45_DSP1_YMEM_UNPACK32_0 ... CS35L45_DSP1_YMEM_UNPACK32_1022:
  331. case CS35L45_DSP1_YMEM_UNPACK24_0 ... CS35L45_DSP1_YMEM_UNPACK24_2043:
  332. case CS35L45_DSP1_PMEM_0 ... CS35L45_DSP1_PMEM_3834:
  333. return true;
  334. default:
  335. return false;
  336. }
  337. }
  338. static bool cs35l45_volatile_reg(struct device *dev, unsigned int reg)
  339. {
  340. switch (reg) {
  341. case CS35L45_DEVID:
  342. case CS35L45_SFT_RESET:
  343. case CS35L45_REVID:
  344. case CS35L45_GLOBAL_ENABLES:
  345. case CS35L45_GLOBAL_OVERRIDES:
  346. case CS35L45_SYNC_GPIO1:
  347. case CS35L45_INTB_GPIO2_MCLK_REF:
  348. case CS35L45_GPIO3:
  349. case CS35L45_PWRMGT_STS:
  350. case CS35L45_SYNC_SW_TX_ID:
  351. case CS35L45_BOOST_CCM_CFG:
  352. case CS35L45_BOOST_DCM_CFG:
  353. case CS35L45_BOOST_OV_CFG:
  354. case CS35L45_BOOST_STATUS:
  355. case CS35L45_BST_BPE_INST_STATUS:
  356. case CS35L45_STATUS:
  357. case CS35L45_MON_VALUE:
  358. case CS35L45_LDPM_CONFIG:
  359. case CS35L45_IRQ1_STATUS:
  360. case CS35L45_IRQ1_EINT_1:
  361. case CS35L45_IRQ1_EINT_2:
  362. case CS35L45_IRQ1_EINT_3:
  363. case CS35L45_IRQ1_EINT_4:
  364. case CS35L45_IRQ1_EINT_5:
  365. case CS35L45_IRQ1_EINT_7:
  366. case CS35L45_IRQ1_EINT_8:
  367. case CS35L45_IRQ1_EINT_18:
  368. case CS35L45_IRQ1_STS_1:
  369. case CS35L45_IRQ1_STS_2:
  370. case CS35L45_IRQ1_STS_3:
  371. case CS35L45_IRQ1_STS_4:
  372. case CS35L45_IRQ1_STS_5:
  373. case CS35L45_IRQ1_STS_7:
  374. case CS35L45_IRQ1_STS_8:
  375. case CS35L45_IRQ1_STS_18:
  376. case CS35L45_IRQ2_STATUS:
  377. case CS35L45_IRQ2_EINT_1:
  378. case CS35L45_IRQ2_EINT_2:
  379. case CS35L45_IRQ2_EINT_3:
  380. case CS35L45_IRQ2_EINT_4:
  381. case CS35L45_IRQ2_EINT_5:
  382. case CS35L45_IRQ2_EINT_7:
  383. case CS35L45_IRQ2_EINT_8:
  384. case CS35L45_IRQ2_EINT_18:
  385. case CS35L45_IRQ2_STS_1:
  386. case CS35L45_IRQ2_STS_2:
  387. case CS35L45_IRQ2_STS_3:
  388. case CS35L45_IRQ2_STS_4:
  389. case CS35L45_IRQ2_STS_5:
  390. case CS35L45_IRQ2_STS_7:
  391. case CS35L45_IRQ2_STS_8:
  392. case CS35L45_IRQ2_STS_18:
  393. case CS35L45_GPIO_STATUS1:
  394. case CS35L45_GPIO1_CTRL1:
  395. case CS35L45_GPIO2_CTRL1:
  396. case CS35L45_GPIO3_CTRL1:
  397. case CS35L45_DSP_MBOX_1:
  398. case CS35L45_DSP_MBOX_2:
  399. case CS35L45_DSP_MBOX_3:
  400. case CS35L45_DSP_MBOX_4:
  401. case CS35L45_DSP_MBOX_5:
  402. case CS35L45_DSP_MBOX_6:
  403. case CS35L45_DSP_MBOX_7:
  404. case CS35L45_DSP_MBOX_8:
  405. case CS35L45_DSP_VIRT1_MBOX_1:
  406. case CS35L45_DSP_VIRT1_MBOX_2:
  407. case CS35L45_DSP_VIRT1_MBOX_3:
  408. case CS35L45_DSP_VIRT1_MBOX_4:
  409. case CS35L45_DSP_VIRT1_MBOX_5:
  410. case CS35L45_DSP_VIRT1_MBOX_6:
  411. case CS35L45_DSP_VIRT1_MBOX_7:
  412. case CS35L45_DSP_VIRT1_MBOX_8:
  413. case CS35L45_DSP_VIRT2_MBOX_1:
  414. case CS35L45_DSP_VIRT2_MBOX_2:
  415. case CS35L45_DSP_VIRT2_MBOX_3:
  416. case CS35L45_DSP_VIRT2_MBOX_4:
  417. case CS35L45_DSP_VIRT2_MBOX_5:
  418. case CS35L45_DSP_VIRT2_MBOX_6:
  419. case CS35L45_DSP_VIRT2_MBOX_7:
  420. case CS35L45_DSP_VIRT2_MBOX_8:
  421. case CS35L45_DSP1_SCRATCH1:
  422. case CS35L45_DSP1_SCRATCH2:
  423. case CS35L45_DSP1_SCRATCH3:
  424. case CS35L45_DSP1_SCRATCH4:
  425. case CS35L45_DSP1_XMEM_PACK_0 ... CS35L45_DSP1_XMEM_PACK_4607:
  426. case CS35L45_DSP1_XMEM_UNPACK32_0 ... CS35L45_DSP1_XMEM_UNPACK32_3071:
  427. case CS35L45_DSP1_XMEM_UNPACK24_0 ... CS35L45_DSP1_XMEM_UNPACK24_6143:
  428. case CS35L45_DSP1_YMEM_PACK_0 ... CS35L45_DSP1_YMEM_PACK_1532:
  429. case CS35L45_DSP1_YMEM_UNPACK32_0 ... CS35L45_DSP1_YMEM_UNPACK32_1022:
  430. case CS35L45_DSP1_YMEM_UNPACK24_0 ... CS35L45_DSP1_YMEM_UNPACK24_2043:
  431. case CS35L45_DSP1_PMEM_0 ... CS35L45_DSP1_PMEM_3834:
  432. return true;
  433. default:
  434. return false;
  435. }
  436. }
  437. const struct regmap_config cs35l45_i2c_regmap = {
  438. .reg_bits = 32,
  439. .val_bits = 32,
  440. .reg_stride = CS35L45_REGSTRIDE,
  441. .reg_format_endian = REGMAP_ENDIAN_BIG,
  442. .val_format_endian = REGMAP_ENDIAN_BIG,
  443. .max_register = CS35L45_LASTREG,
  444. .reg_defaults = cs35l45_reg,
  445. .num_reg_defaults = ARRAY_SIZE(cs35l45_reg),
  446. .volatile_reg = cs35l45_volatile_reg,
  447. .readable_reg = cs35l45_readable_reg,
  448. .cache_type = REGCACHE_RBTREE,
  449. };
  450. EXPORT_SYMBOL_GPL(cs35l45_i2c_regmap);
  451. const struct regmap_config cs35l45_spi_regmap = {
  452. .reg_bits = 32,
  453. .val_bits = 32,
  454. .pad_bits = 16,
  455. .reg_stride = CS35L45_REGSTRIDE,
  456. .reg_format_endian = REGMAP_ENDIAN_BIG,
  457. .val_format_endian = REGMAP_ENDIAN_BIG,
  458. .max_register = CS35L45_LASTREG,
  459. .reg_defaults = cs35l45_reg,
  460. .num_reg_defaults = ARRAY_SIZE(cs35l45_reg),
  461. .volatile_reg = cs35l45_volatile_reg,
  462. .readable_reg = cs35l45_readable_reg,
  463. .cache_type = REGCACHE_RBTREE,
  464. };
  465. EXPORT_SYMBOL_GPL(cs35l45_spi_regmap);
  466. const struct cs35l45_pll_sysclk_config
  467. cs35l45_pll_sysclk[CS35L45_MAX_PLL_CONFIGS] = {
  468. { 32768, 0x00 },
  469. { 8000, 0x01 },
  470. { 11025, 0x02 },
  471. { 12000, 0x03 },
  472. { 16000, 0x04 },
  473. { 22050, 0x05 },
  474. { 24000, 0x06 },
  475. { 32000, 0x07 },
  476. { 44100, 0x08 },
  477. { 48000, 0x09 },
  478. { 88200, 0x0A },
  479. { 96000, 0x0B },
  480. { 128000, 0x0C },
  481. { 176400, 0x0D },
  482. { 192000, 0x0E },
  483. { 256000, 0x0F },
  484. { 352800, 0x10 },
  485. { 384000, 0x11 },
  486. { 512000, 0x12 },
  487. { 705600, 0x13 },
  488. { 750000, 0x14 },
  489. { 768000, 0x15 },
  490. { 1000000, 0x16 },
  491. { 1024000, 0x17 },
  492. { 1200000, 0x18 },
  493. { 1411200, 0x19 },
  494. { 1500000, 0x1A },
  495. { 1536000, 0x1B },
  496. { 2000000, 0x1C },
  497. { 2048000, 0x1D },
  498. { 2400000, 0x1E },
  499. { 2822400, 0x1F },
  500. { 3000000, 0x20 },
  501. { 3072000, 0x21 },
  502. { 3200000, 0x22 },
  503. { 4000000, 0x23 },
  504. { 4096000, 0x24 },
  505. { 4800000, 0x25 },
  506. { 5644800, 0x26 },
  507. { 6000000, 0x27 },
  508. { 6144000, 0x28 },
  509. { 6250000, 0x29 },
  510. { 6400000, 0x2A },
  511. { 6500000, 0x2B },
  512. { 6750000, 0x2C },
  513. { 7526400, 0x2D },
  514. { 8000000, 0x2E },
  515. { 8192000, 0x2F },
  516. { 9600000, 0x30 },
  517. { 11289600, 0x31 },
  518. { 12000000, 0x32 },
  519. { 12288000, 0x33 },
  520. { 12500000, 0x34 },
  521. { 12800000, 0x35 },
  522. { 13000000, 0x36 },
  523. { 13500000, 0x37 },
  524. { 19200000, 0x38 },
  525. { 22579200, 0x39 },
  526. { 24000000, 0x3A },
  527. { 24576000, 0x3B },
  528. { 25000000, 0x3C },
  529. { 25600000, 0x3D },
  530. { 26000000, 0x3E },
  531. { 27000000, 0x3F },
  532. };
  533. const struct of_entry bpe_inst_thld_map[BPE_INST_LEVELS] = {
  534. [L0] = {"bpe-inst-thld", CS35L45_BPE_INST_THLD,
  535. CS35L45_BPE_INST_L0_THLD_MASK,
  536. CS35L45_BPE_INST_L0_THLD_SHIFT},
  537. [L1] = {"bpe-inst-thld", CS35L45_BPE_INST_THLD,
  538. CS35L45_BPE_INST_L1_THLD_MASK,
  539. CS35L45_BPE_INST_L1_THLD_SHIFT},
  540. [L2] = {"bpe-inst-thld", CS35L45_BPE_INST_THLD,
  541. CS35L45_BPE_INST_L2_THLD_MASK,
  542. CS35L45_BPE_INST_L2_THLD_SHIFT},
  543. [L3] = {"bpe-inst-thld", CS35L45_BPE_INST_THLD,
  544. CS35L45_BPE_INST_L3_THLD_MASK,
  545. CS35L45_BPE_INST_L3_THLD_SHIFT},
  546. };
  547. const struct of_entry bpe_inst_attn_map[BPE_INST_LEVELS] = {
  548. [L0] = {"bpe-inst-attn", CS35L45_BPE_INST_ATTN,
  549. CS35L45_BPE_INST_L0_ATTN_MASK,
  550. CS35L45_BPE_INST_L0_ATTN_SHIFT},
  551. [L1] = {"bpe-inst-attn", CS35L45_BPE_INST_ATTN,
  552. CS35L45_BPE_INST_L1_ATTN_MASK,
  553. CS35L45_BPE_INST_L1_ATTN_SHIFT},
  554. [L2] = {"bpe-inst-attn", CS35L45_BPE_INST_ATTN,
  555. CS35L45_BPE_INST_L2_ATTN_MASK,
  556. CS35L45_BPE_INST_L2_ATTN_SHIFT},
  557. [L3] = {"bpe-inst-attn", CS35L45_BPE_INST_ATTN,
  558. CS35L45_BPE_INST_L3_ATTN_MASK,
  559. CS35L45_BPE_INST_L3_ATTN_SHIFT},
  560. };
  561. const struct of_entry bpe_inst_atk_rate_map[BPE_INST_LEVELS] = {
  562. [L0] = {"bpe-inst-atk-rate", CS35L45_BPE_INST_ATK_RATE,
  563. CS35L45_BPE_INST_L0_ATK_RATE_MASK,
  564. CS35L45_BPE_INST_L0_ATK_RATE_SHIFT},
  565. [L1] = {"bpe-inst-atk-rate", CS35L45_BPE_INST_ATK_RATE,
  566. CS35L45_BPE_INST_L1_ATK_RATE_MASK,
  567. CS35L45_BPE_INST_L1_ATK_RATE_SHIFT},
  568. [L2] = {"bpe-inst-atk-rate", CS35L45_BPE_INST_ATK_RATE,
  569. CS35L45_BPE_INST_L2_ATK_RATE_MASK,
  570. CS35L45_BPE_INST_L2_ATK_RATE_SHIFT},
  571. [L3] = {"bpe-inst-atk-rate", CS35L45_BPE_INST_ATK_RATE,
  572. CS35L45_BPE_INST_L3_ATK_RATE_MASK,
  573. CS35L45_BPE_INST_L3_ATK_RATE_SHIFT},
  574. };
  575. const struct of_entry bpe_inst_hold_time_map[BPE_INST_LEVELS] = {
  576. [L0] = {"bpe-inst-hold-time", CS35L45_BPE_INST_HOLD_TIME,
  577. CS35L45_BPE_INST_L0_HOLD_TIME_MASK,
  578. CS35L45_BPE_INST_L0_HOLD_TIME_SHIFT},
  579. [L1] = {"bpe-inst-hold-time", CS35L45_BPE_INST_HOLD_TIME,
  580. CS35L45_BPE_INST_L1_HOLD_TIME_MASK,
  581. CS35L45_BPE_INST_L1_HOLD_TIME_SHIFT},
  582. [L2] = {"bpe-inst-hold-time", CS35L45_BPE_INST_HOLD_TIME,
  583. CS35L45_BPE_INST_L2_HOLD_TIME_MASK,
  584. CS35L45_BPE_INST_L2_HOLD_TIME_SHIFT},
  585. [L3] = {"bpe-inst-hold-time", CS35L45_BPE_INST_HOLD_TIME,
  586. CS35L45_BPE_INST_L3_HOLD_TIME_MASK,
  587. CS35L45_BPE_INST_L3_HOLD_TIME_SHIFT},
  588. };
  589. const struct of_entry bpe_inst_rls_rate_map[BPE_INST_LEVELS] = {
  590. [L0] = {"bpe-inst-rls-rate", CS35L45_BPE_INST_RLS_RATE,
  591. CS35L45_BPE_INST_L0_RLS_RATE_MASK,
  592. CS35L45_BPE_INST_L0_RLS_RATE_SHIFT},
  593. [L1] = {"bpe-inst-rls-rate", CS35L45_BPE_INST_RLS_RATE,
  594. CS35L45_BPE_INST_L1_RLS_RATE_MASK,
  595. CS35L45_BPE_INST_L1_RLS_RATE_SHIFT},
  596. [L2] = {"bpe-inst-rls-rate", CS35L45_BPE_INST_RLS_RATE,
  597. CS35L45_BPE_INST_L2_RLS_RATE_MASK,
  598. CS35L45_BPE_INST_L2_RLS_RATE_SHIFT},
  599. [L3] = {"bpe-inst-rls-rate", CS35L45_BPE_INST_RLS_RATE,
  600. CS35L45_BPE_INST_L3_RLS_RATE_MASK,
  601. CS35L45_BPE_INST_L3_RLS_RATE_SHIFT},
  602. };
  603. const struct of_entry bpe_misc_map[BPE_MISC_PARAMS] = {
  604. [BPE_INST_BPE_BYP] = {"bpe-inst-bpe-byp",
  605. CS35L45_BPE_MISC_CONFIG,
  606. CS35L45_BPE_INST_BPE_BYP_MASK,
  607. CS35L45_BPE_INST_BPE_BYP_SHIFT},
  608. [BPE_INST_INF_HOLD_RLS] = {"bpe-inst-inf-hold-rls",
  609. CS35L45_BPE_MISC_CONFIG,
  610. CS35L45_BPE_INST_INF_HOLD_RLS_MASK,
  611. CS35L45_BPE_INST_INF_HOLD_RLS_SHIFT},
  612. [BPE_INST_L3_BYP] = {"bpe-inst-l3-byp",
  613. CS35L45_BPE_MISC_CONFIG,
  614. CS35L45_BPE_INST_L3_BYP_MASK,
  615. CS35L45_BPE_INST_L3_BYP_SHIFT},
  616. [BPE_INST_L2_BYP] = {"bpe-inst-l2-byp",
  617. CS35L45_BPE_MISC_CONFIG,
  618. CS35L45_BPE_INST_L2_BYP_MASK,
  619. CS35L45_BPE_INST_L2_BYP_SHIFT},
  620. [BPE_INST_L1_BYP] = {"bpe-inst-l1-byp",
  621. CS35L45_BPE_MISC_CONFIG,
  622. CS35L45_BPE_INST_L1_BYP_MASK,
  623. CS35L45_BPE_INST_L1_BYP_SHIFT},
  624. [BPE_MODE_SEL] = {"bst-bpe-mode-sel",
  625. CS35L45_BPE_MISC_CONFIG,
  626. CS35L45_BPE_MODE_SEL_MASK,
  627. CS35L45_BPE_MODE_SEL_SHIFT},
  628. [BPE_FILT_SEL] = {"bst-bpe-filt-sel",
  629. CS35L45_BPE_MISC_CONFIG,
  630. CS35L45_BPE_FILT_SEL_MASK,
  631. CS35L45_BPE_FILT_SEL_SHIFT},
  632. };
  633. const struct of_entry bst_bpe_inst_thld_map[BST_BPE_INST_LEVELS] = {
  634. [L0] = {"bst-bpe-inst-thld", CS35L45_BST_BPE_INST_THLD,
  635. CS35L45_BST_BPE_INST_L0_THLD_MASK,
  636. CS35L45_BST_BPE_INST_L0_THLD_SHIFT},
  637. [L1] = {"bst-bpe-inst-thld", CS35L45_BST_BPE_INST_THLD,
  638. CS35L45_BST_BPE_INST_L1_THLD_MASK,
  639. CS35L45_BST_BPE_INST_L1_THLD_SHIFT},
  640. [L2] = {"bst-bpe-inst-thld", CS35L45_BST_BPE_INST_THLD,
  641. CS35L45_BST_BPE_INST_L2_THLD_MASK,
  642. CS35L45_BST_BPE_INST_L2_THLD_SHIFT},
  643. [L3] = {"bst-bpe-inst-thld", CS35L45_BST_BPE_INST_THLD,
  644. CS35L45_BST_BPE_INST_L3_THLD_MASK,
  645. CS35L45_BST_BPE_INST_L3_THLD_SHIFT},
  646. [L4] = {"bst-bpe-inst-thld", 0, 0, 0},
  647. };
  648. const struct of_entry bst_bpe_inst_ilim_map[BST_BPE_INST_LEVELS] = {
  649. [L0] = {"bst-bpe-inst-ilim", 0, 0, 0},
  650. [L1] = {"bst-bpe-inst-ilim", CS35L45_BST_BPE_INST_ILIM,
  651. CS35L45_BST_BPE_INST_L1_ILIM_MASK,
  652. CS35L45_BST_BPE_INST_L1_ILIM_SHIFT},
  653. [L2] = {"bst-bpe-inst-ilim", CS35L45_BST_BPE_INST_ILIM,
  654. CS35L45_BST_BPE_INST_L2_ILIM_MASK,
  655. CS35L45_BST_BPE_INST_L2_ILIM_SHIFT},
  656. [L3] = {"bst-bpe-inst-ilim", CS35L45_BST_BPE_INST_ILIM,
  657. CS35L45_BST_BPE_INST_L3_ILIM_MASK,
  658. CS35L45_BST_BPE_INST_L3_ILIM_SHIFT},
  659. [L4] = {"bst-bpe-inst-ilim", CS35L45_BST_BPE_INST_ILIM,
  660. CS35L45_BST_BPE_INST_L4_ILIM_MASK,
  661. CS35L45_BST_BPE_INST_L4_ILIM_SHIFT},
  662. };
  663. const struct of_entry bst_bpe_inst_ss_ilim_map[BST_BPE_INST_LEVELS] = {
  664. [L0] = {"bst-bpe-inst-ss-ilim", 0, 0, 0},
  665. [L1] = {"bst-bpe-inst-ss-ilim", CS35L45_BST_BPE_INST_SS_ILIM,
  666. CS35L45_BST_BPE_INST_L1_SS_ILIM_MASK,
  667. CS35L45_BST_BPE_INST_L1_SS_ILIM_SHIFT},
  668. [L2] = {"bst-bpe-inst-ss-ilim", CS35L45_BST_BPE_INST_SS_ILIM,
  669. CS35L45_BST_BPE_INST_L2_SS_ILIM_MASK,
  670. CS35L45_BST_BPE_INST_L2_SS_ILIM_SHIFT},
  671. [L3] = {"bst-bpe-inst-ss-ilim", CS35L45_BST_BPE_INST_SS_ILIM,
  672. CS35L45_BST_BPE_INST_L3_SS_ILIM_MASK,
  673. CS35L45_BST_BPE_INST_L3_SS_ILIM_SHIFT},
  674. [L4] = {"bst-bpe-inst-ss-ilim", CS35L45_BST_BPE_INST_SS_ILIM,
  675. CS35L45_BST_BPE_INST_L4_SS_ILIM_MASK,
  676. CS35L45_BST_BPE_INST_L4_SS_ILIM_SHIFT},
  677. };
  678. const struct of_entry bst_bpe_inst_atk_rate_map[BST_BPE_INST_LEVELS] = {
  679. [L0] = {"bst-bpe-inst-atk-rate", 0, 0, 0},
  680. [L1] = {"bst-bpe-inst-atk-rate", CS35L45_BST_BPE_INST_ATK_RATE,
  681. CS35L45_BST_BPE_INST_L1_ATK_RATE_MASK,
  682. CS35L45_BST_BPE_INST_L1_ATK_RATE_SHIFT},
  683. [L2] = {"bst-bpe-inst-atk-rate", CS35L45_BST_BPE_INST_ATK_RATE,
  684. CS35L45_BST_BPE_INST_L2_ATK_RATE_MASK,
  685. CS35L45_BST_BPE_INST_L2_ATK_RATE_SHIFT},
  686. [L3] = {"bst-bpe-inst-atk-rate", CS35L45_BST_BPE_INST_ATK_RATE,
  687. CS35L45_BST_BPE_INST_L3_ATK_RATE_MASK,
  688. CS35L45_BST_BPE_INST_L3_ATK_RATE_SHIFT},
  689. [L4] = {"bst-bpe-inst-atk-rate", 0, 0, 0},
  690. };
  691. const struct of_entry bst_bpe_inst_hold_time_map[BST_BPE_INST_LEVELS] = {
  692. [L0] = {"bst-bpe-inst-hold-time", CS35L45_BST_BPE_INST_HOLD_TIME,
  693. CS35L45_BST_BPE_INST_L0_HOLD_TIME_MASK,
  694. CS35L45_BST_BPE_INST_L0_HOLD_TIME_SHIFT},
  695. [L1] = {"bst-bpe-inst-hold-time", CS35L45_BST_BPE_INST_HOLD_TIME,
  696. CS35L45_BST_BPE_INST_L1_HOLD_TIME_MASK,
  697. CS35L45_BST_BPE_INST_L1_HOLD_TIME_SHIFT},
  698. [L2] = {"bst-bpe-inst-hold-time", CS35L45_BST_BPE_INST_HOLD_TIME,
  699. CS35L45_BST_BPE_INST_L2_HOLD_TIME_MASK,
  700. CS35L45_BST_BPE_INST_L2_HOLD_TIME_SHIFT},
  701. [L3] = {"bst-bpe-inst-hold-time", CS35L45_BST_BPE_INST_HOLD_TIME,
  702. CS35L45_BST_BPE_INST_L3_HOLD_TIME_MASK,
  703. CS35L45_BST_BPE_INST_L3_HOLD_TIME_SHIFT},
  704. [L4] = {"bst-bpe-inst-hold-time", 0, 0, 0},
  705. };
  706. const struct of_entry bst_bpe_inst_rls_rate_map[BST_BPE_INST_LEVELS] = {
  707. [L0] = {"bst-bpe-inst-rls-rate", CS35L45_BST_BPE_INST_RLS_RATE,
  708. CS35L45_BST_BPE_INST_L0_RLS_RATE_MASK,
  709. CS35L45_BST_BPE_INST_L0_RLS_RATE_SHIFT},
  710. [L1] = {"bst-bpe-inst-rls-rate", CS35L45_BST_BPE_INST_RLS_RATE,
  711. CS35L45_BST_BPE_INST_L1_RLS_RATE_MASK,
  712. CS35L45_BST_BPE_INST_L1_RLS_RATE_SHIFT},
  713. [L2] = {"bst-bpe-inst-rls-rate", CS35L45_BST_BPE_INST_RLS_RATE,
  714. CS35L45_BST_BPE_INST_L2_RLS_RATE_MASK,
  715. CS35L45_BST_BPE_INST_L2_RLS_RATE_SHIFT},
  716. [L3] = {"bst-bpe-inst-rls-rate", CS35L45_BST_BPE_INST_RLS_RATE,
  717. CS35L45_BST_BPE_INST_L3_RLS_RATE_MASK,
  718. CS35L45_BST_BPE_INST_L3_RLS_RATE_SHIFT},
  719. [L4] = {"bst-bpe-inst-rls-rate", 0, 0, 0},
  720. };
  721. const struct of_entry bst_bpe_misc_map[BST_BPE_MISC_PARAMS] = {
  722. [BST_BPE_INST_INF_HOLD_RLS] = {"bst-bpe-inst-inf-hold-rls",
  723. CS35L45_BST_BPE_MISC_CONFIG,
  724. CS35L45_BST_BPE_INST_INF_HOLD_RLS_MASK,
  725. CS35L45_BST_BPE_INST_INF_HOLD_RLS_SHIFT},
  726. [BST_BPE_IL_LIM_MODE] = {"bst-bpe-il-lim-mode",
  727. CS35L45_BST_BPE_MISC_CONFIG,
  728. CS35L45_BST_BPE_IL_LIM_MODE_MASK,
  729. CS35L45_BST_BPE_IL_LIM_MODE_SHIFT},
  730. [BST_BPE_OUT_OPMODE_SEL] = {"bst-bpe-out-opmode-sel",
  731. CS35L45_BST_BPE_MISC_CONFIG,
  732. CS35L45_BST_BPE_OUT_OPMODE_SEL_MASK,
  733. CS35L45_BST_BPE_OUT_OPMODE_SEL_SHIFT},
  734. [BST_BPE_INST_L3_BYP] = {"bst-bpe-inst-l3-byp",
  735. CS35L45_BST_BPE_MISC_CONFIG,
  736. CS35L45_BST_BPE_INST_L3_BYP_MASK,
  737. CS35L45_BST_BPE_INST_L3_BYP_SHIFT},
  738. [BST_BPE_INST_L2_BYP] = {"bst-bpe-inst-l2-byp",
  739. CS35L45_BST_BPE_MISC_CONFIG,
  740. CS35L45_BST_BPE_INST_L2_BYP_MASK,
  741. CS35L45_BST_BPE_INST_L2_BYP_SHIFT},
  742. [BST_BPE_INST_L1_BYP] = {"bst-bpe-inst-l1-byp",
  743. CS35L45_BST_BPE_MISC_CONFIG,
  744. CS35L45_BST_BPE_INST_L1_BYP_MASK,
  745. CS35L45_BST_BPE_INST_L1_BYP_SHIFT},
  746. [BST_BPE_FILT_SEL] = {"bst-bpe-filt-sel",
  747. CS35L45_BST_BPE_MISC_CONFIG,
  748. CS35L45_BST_BPE_FILT_SEL_MASK,
  749. CS35L45_BST_BPE_FILT_SEL_SHIFT},
  750. };
  751. const struct of_entry bst_bpe_il_lim_map[BST_BPE_IL_LIM_PARAMS] = {
  752. [BST_BPE_IL_LIM_THLD_DEL1] = {"bst-bpe-il-lim-thld-del1",
  753. CS35L45_BST_BPE_IL_LIM_THLD,
  754. CS35L45_BST_BPE_IL_LIM_THLD_DEL1_MASK,
  755. CS35L45_BST_BPE_IL_LIM_THLD_DEL1_SHIFT},
  756. [BST_BPE_IL_LIM_THLD_DEL2] = {"bst-bpe-il-lim-thld-del2",
  757. CS35L45_BST_BPE_IL_LIM_THLD,
  758. CS35L45_BST_BPE_IL_LIM_THLD_DEL2_MASK,
  759. CS35L45_BST_BPE_IL_LIM_THLD_DEL2_SHIFT},
  760. [BST_BPE_IL_LIM1_THLD] = {"bst-bpe-il-lim1-thld",
  761. CS35L45_BST_BPE_IL_LIM_THLD,
  762. CS35L45_BST_BPE_IL_LIM1_THLD_MASK,
  763. CS35L45_BST_BPE_IL_LIM1_THLD_SHIFT},
  764. [BST_BPE_IL_LIM1_DLY] = {"bst-bpe-il-lim1-dly",
  765. CS35L45_BST_BPE_IL_LIM_DLY,
  766. CS35L45_BST_BPE_IL_LIM1_DLY_MASK,
  767. CS35L45_BST_BPE_IL_LIM1_DLY_SHIFT},
  768. [BST_BPE_IL_LIM2_DLY] = {"bst-bpe-il-lim2-dly",
  769. CS35L45_BST_BPE_IL_LIM_DLY,
  770. CS35L45_BST_BPE_IL_LIM2_DLY_MASK,
  771. CS35L45_BST_BPE_IL_LIM2_DLY_SHIFT},
  772. [BST_BPE_IL_LIM_DLY_HYST] = {"bst-bpe-il-lim-dly-hyst",
  773. CS35L45_BST_BPE_IL_LIM_DLY,
  774. CS35L45_BST_BPE_IL_LIM_DLY_HYST_MASK,
  775. CS35L45_BST_BPE_IL_LIM_DLY_HYST_SHIFT},
  776. [BST_BPE_IL_LIM_THLD_HYST] = {"bst-bpe-il-lim-thld-hyst",
  777. CS35L45_BST_BPE_IL_LIM_THLD,
  778. CS35L45_BST_BPE_IL_LIM_THLD_HYST_MASK,
  779. CS35L45_BST_BPE_IL_LIM_THLD_HYST_SHIFT},
  780. [BST_BPE_IL_LIM1_ATK_RATE] = {"bst-bpe-il-lim1-atk-rate",
  781. CS35L45_BST_BPE_IL_LIM_ATK_RATE,
  782. CS35L45_BST_BPE_IL_LIM1_ATK_RATE_MASK,
  783. CS35L45_BST_BPE_IL_LIM1_ATK_RATE_SHIFT},
  784. [BST_BPE_IL_LIM2_ATK_RATE] = {"bst-bpe-il-lim2-atk-rate",
  785. CS35L45_BST_BPE_IL_LIM_ATK_RATE,
  786. CS35L45_BST_BPE_IL_LIM2_ATK_RATE_MASK,
  787. CS35L45_BST_BPE_IL_LIM2_ATK_RATE_SHIFT},
  788. [BST_BPE_IL_LIM1_RLS_RATE] = {"bst-bpe-il-lim1-rls-rate",
  789. CS35L45_BST_BPE_IL_LIM_RLS_RATE,
  790. CS35L45_BST_BPE_IL_LIM1_RLS_RATE_MASK,
  791. CS35L45_BST_BPE_IL_LIM1_RLS_RATE_SHIFT},
  792. [BST_BPE_IL_LIM2_RLS_RATE] = {"bst-bpe-il-lim2-rls-rate",
  793. CS35L45_BST_BPE_IL_LIM_RLS_RATE,
  794. CS35L45_BST_BPE_IL_LIM2_RLS_RATE_MASK,
  795. CS35L45_BST_BPE_IL_LIM2_RLS_RATE_SHIFT},
  796. };
  797. const struct of_entry ldpm_map[LDPM_PARAMS] = {
  798. [LDPM_GP1_BOOST_SEL] = {"ldpm-gp1-boost-sel", CS35L45_LDPM_CONFIG,
  799. CS35L45_LDPM_GP1_BOOST_SEL_MASK,
  800. CS35L45_LDPM_GP1_BOOST_SEL_SHIFT},
  801. [LDPM_GP1_AMP_SEL] = {"ldpm-gp1-amp-sel", CS35L45_LDPM_CONFIG,
  802. CS35L45_LDPM_GP1_AMP_SEL_MASK,
  803. CS35L45_LDPM_GP1_AMP_SEL_SHIFT},
  804. [LDPM_GP1_DELAY] = {"ldpm-gp1-delay", CS35L45_LDPM_CONFIG,
  805. CS35L45_LDPM_GP1_DELAY_MASK,
  806. CS35L45_LDPM_GP1_DELAY_SHIFT},
  807. [LDPM_GP1_PCM_THLD] = {"ldpm-gp1-pcm-thld", CS35L45_LDPM_CONFIG,
  808. CS35L45_LDPM_GP1_PCM_THLD_MASK,
  809. CS35L45_LDPM_GP1_PCM_THLD_SHIFT},
  810. [LDPM_GP2_IMON_SEL] = {"ldpm-gp2-imon-sel", CS35L45_LDPM_CONFIG,
  811. CS35L45_LDPM_GP2_IMON_SEL_MASK,
  812. CS35L45_LDPM_GP2_IMON_SEL_SHIFT},
  813. [LDPM_GP2_VMON_SEL] = {"ldpm-gp2-vmon-sel", CS35L45_LDPM_CONFIG,
  814. CS35L45_LDPM_GP2_VMON_SEL_MASK,
  815. CS35L45_LDPM_GP2_VMON_SEL_SHIFT},
  816. [LDPM_GP2_DELAY] = {"ldpm-gp2-delay", CS35L45_LDPM_CONFIG,
  817. CS35L45_LDPM_GP2_DELAY_MASK,
  818. CS35L45_LDPM_GP2_DELAY_SHIFT},
  819. [LDPM_GP2_PCM_THLD] = {"ldpm-gp2-pcm-thld", CS35L45_LDPM_CONFIG,
  820. CS35L45_LDPM_GP2_PCM_THLD_MASK,
  821. CS35L45_LDPM_GP2_PCM_THLD_SHIFT},
  822. };
  823. const struct of_entry classh_map[CLASSH_PARAMS] = {
  824. [CH_HDRM] = {"ch-hdrm", CS35L45_CLASSH_CONFIG1,
  825. CS35L45_CH_HDRM_MASK, CS35L45_CH_HDRM_SHIFT},
  826. [CH_RATIO] = {"ch-ratio", CS35L45_CLASSH_CONFIG1,
  827. CS35L45_CH_RATIO_MASK, CS35L45_CH_RATIO_SHIFT},
  828. [CH_REL_RATE] = {"ch-rel-rate", CS35L45_CLASSH_CONFIG1,
  829. CS35L45_CH_REL_RATE_MASK, CS35L45_CH_REL_RATE_SHIFT},
  830. [CH_OVB_THLD1] = {"ch-ovb-thld1", CS35L45_CLASSH_CONFIG2,
  831. CS35L45_CH_OVB_THLD1_MASK, CS35L45_CH_OVB_THLD1_SHIFT},
  832. [CH_OVB_THLDDELTA] = {"ch-ovb-thlddelta", CS35L45_CLASSH_CONFIG2,
  833. CS35L45_CH_OVB_THLDDELTA_MASK, CS35L45_CH_OVB_THLDDELTA_SHIFT},
  834. [CH_VDD_BST_MAX] = {"ch-vdd-bst-max", CS35L45_CLASSH_CONFIG2,
  835. CS35L45_CH_VDD_BST_MAX_MASK, CS35L45_CH_VDD_BST_MAX_SHIFT},
  836. [CH_OVB_RATIO] = {"ch-ovb-ratio", CS35L45_CLASSH_CONFIG3,
  837. CS35L45_CH_OVB_RATIO_MASK, CS35L45_CH_OVB_RATIO_SHIFT},
  838. [CH_THLD1_OFFSET] = {"ch-thld1-offset", CS35L45_CLASSH_CONFIG3,
  839. CS35L45_CH_THLD1_OFFSET_MASK, CS35L45_CH_THLD1_OFFSET_SHIFT},
  840. [AUD_MEM_DEPTH] = {"aud-mem-depth", CS35L45_AUD_MEM,
  841. CS35L45_AUD_MEM_DEPTH_MASK, CS35L45_AUD_MEM_DEPTH_SHIFT},
  842. };
  843. const struct dev_pm_ops cs35l45_pm_ops = {
  844. SET_RUNTIME_PM_OPS(cs35l45_suspend_runtime, cs35l45_resume_runtime, NULL)
  845. SET_SYSTEM_SLEEP_PM_OPS(cs35l45_sys_suspend, cs35l45_sys_resume)
  846. SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cs35l45_sys_suspend_noirq, cs35l45_sys_resume_noirq)
  847. };