cs35l45.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
  2. /*
  3. * cs35l45.h - CS35L45 ALSA SoC audio driver
  4. *
  5. * Copyright 2019 Cirrus Logic, Inc.
  6. *
  7. * Author: James Schulman <[email protected]>
  8. *
  9. */
  10. #ifndef __CS35L45_H__
  11. #define __CS35L45_H__
  12. #include <linux/regmap.h>
  13. #include <linux/pm_runtime.h>
  14. #define CS35L45_DEVID 0x00000000
  15. #define CS35L45_REVID 0x00000004
  16. #define CS35L45_RELID 0x0000000C
  17. #define CS35L45_OTPID 0x00000010
  18. #define CS35L45_SFT_RESET 0x00000020
  19. #define CS35L45_GLOBAL_ENABLES 0x00002014
  20. #define CS35L45_BLOCK_ENABLES 0x00002018
  21. #define CS35L45_BLOCK_ENABLES2 0x0000201C
  22. #define CS35L45_GLOBAL_OVERRIDES 0x00002020
  23. #define CS35L45_GLOBAL_SYNC 0x00002024
  24. #define CS35L45_ERROR_RELEASE 0x00002034
  25. #define CS35L45_SYNC_GPIO1 0x00002430
  26. #define CS35L45_INTB_GPIO2_MCLK_REF 0x00002434
  27. #define CS35L45_GPIO3 0x00002438
  28. #define CS35L45_GPIO_GLOBAL_ENABLE_CONTROL 0x00002440
  29. #define CS35L45_PWRMGT_CTL 0x00002900
  30. #define CS35L45_WAKESRC_CTL 0x00002904
  31. #define CS35L45_WKI2C_CTL 0x00002908
  32. #define CS35L45_PWRMGT_STS 0x0000290C
  33. #define CS35L45_REFCLK_INPUT 0x00002C04
  34. #define CS35L45_GLOBAL_SAMPLE_RATE 0x00002C0C
  35. #define CS35L45_SWIRE_CLK_CTRL 0x00002C14
  36. #define CS35L45_SYNC_TX_RX_ENABLES 0x00003400
  37. #define CS35L45_SYNC_SW_TX_ID 0x00003408
  38. #define CS35L45_BOOST_VOLTAGE_CFG 0x00003800
  39. #define CS35L45_BOOST_CCM_CFG 0x00003808
  40. #define CS35L45_BOOST_DCM_CFG 0x0000380C
  41. #define CS35L45_BOOST_LPMODE_CFG 0x00003810
  42. #define CS35L45_BOOST_RAMP_CFG 0x00003814
  43. #define CS35L45_BOOST_STARTUP_CFG 0x00003818
  44. #define CS35L45_BOOST_OV_CFG 0x0000382C
  45. #define CS35L45_BOOST_UV_CFG 0x00003830
  46. #define CS35L45_BOOST_STATUS 0x00003834
  47. #define CS35L45_BST_BPE_INST_THLD 0x00003C00
  48. #define CS35L45_BST_BPE_INST_ILIM 0x00003C04
  49. #define CS35L45_BST_BPE_INST_SS_ILIM 0x00003C08
  50. #define CS35L45_BST_BPE_INST_ATK_RATE 0x00003C0C
  51. #define CS35L45_BST_BPE_INST_HOLD_TIME 0x00003C10
  52. #define CS35L45_BST_BPE_INST_RLS_RATE 0x00003C14
  53. #define CS35L45_BST_BPE_MISC_CONFIG 0x00003C20
  54. #define CS35L45_BST_BPE_IL_LIM_THLD 0x00003C24
  55. #define CS35L45_BST_BPE_IL_LIM_DLY 0x00003C28
  56. #define CS35L45_BST_BPE_IL_LIM_ATK_RATE 0x00003C2C
  57. #define CS35L45_BST_BPE_IL_LIM_RLS_RATE 0x00003C30
  58. #define CS35L45_BST_BPE_INST_STATUS 0x00003C3C
  59. #define CS35L45_MONITOR_FILT 0x00004008
  60. #define CS35L45_IMON_COMP 0x00004010
  61. #define CS35L45_STATUS 0x00004200
  62. #define CS35L45_MON_VALUE 0x00004404
  63. #define CS35L45_ASP_ENABLES1 0x00004800
  64. #define CS35L45_ASP_CONTROL1 0x00004804
  65. #define CS35L45_ASP_CONTROL2 0x00004808
  66. #define CS35L45_ASP_CONTROL3 0x0000480C
  67. #define CS35L45_ASP_FRAME_CONTROL1 0x00004810
  68. #define CS35L45_ASP_FRAME_CONTROL2 0x00004814
  69. #define CS35L45_ASP_FRAME_CONTROL5 0x00004820
  70. #define CS35L45_ASP_DATA_CONTROL1 0x00004830
  71. #define CS35L45_ASP_DATA_CONTROL5 0x00004840
  72. #define CS35L45_DACPCM1_INPUT 0x00004C00
  73. #define CS35L45_MIXER_PILOT0_INPUT 0x00004C04
  74. #define CS35L45_ASPTX1_INPUT 0x00004C20
  75. #define CS35L45_ASPTX2_INPUT 0x00004C24
  76. #define CS35L45_ASPTX3_INPUT 0x00004C28
  77. #define CS35L45_ASPTX4_INPUT 0x00004C2C
  78. #define CS35L45_ASPTX5_INPUT 0x00004C30
  79. #define CS35L45_DSP1RX1_INPUT 0x00004C40
  80. #define CS35L45_DSP1RX2_INPUT 0x00004C44
  81. #define CS35L45_DSP1RX3_INPUT 0x00004C48
  82. #define CS35L45_DSP1RX4_INPUT 0x00004C4C
  83. #define CS35L45_DSP1RX5_INPUT 0x00004C50
  84. #define CS35L45_DSP1RX6_INPUT 0x00004C54
  85. #define CS35L45_DSP1RX7_INPUT 0x00004C58
  86. #define CS35L45_DSP1RX8_INPUT 0x00004C5C
  87. #define CS35L45_NGATE1_INPUT 0x00004C60
  88. #define CS35L45_NGATE2_INPUT 0x00004C64
  89. #define CS35L45_SWIRE_PORT1_CH1_INPUT 0x00004C70
  90. #define CS35L45_SWIRE_PORT1_CH2_INPUT 0x00004C74
  91. #define CS35L45_SWIRE_PORT1_CH3_INPUT 0x00004C78
  92. #define CS35L45_SWIRE_PORT1_CH4_INPUT 0x00004C7C
  93. #define CS35L45_SWIRE_PORT1_CH5_INPUT 0x00004C80
  94. #define CS35L45_AMP_ERR_VOL_SEL 0x00006000
  95. #define CS35L45_TEMP_WARN_THRESHOLD 0x00006020
  96. #define CS35L45_TEMP_WARN_CONFIG 0x00006024
  97. #define CS35L45_TEMP_WARN_TRIG_AUTO 0x00006028
  98. #define CS35L45_TEMP_WARN_STATUS 0x0000602C
  99. #define CS35L45_BPE_INST_THLD 0x00006064
  100. #define CS35L45_BPE_INST_ATTN 0x00006068
  101. #define CS35L45_BPE_INST_ATK_RATE 0x00006074
  102. #define CS35L45_BPE_INST_HOLD_TIME 0x00006080
  103. #define CS35L45_BPE_INST_RLS_RATE 0x00006084
  104. #define CS35L45_BPE_MISC_CONFIG 0x00006090
  105. #define CS35L45_BPE_INST_STATUS 0x00006094
  106. #define CS35L45_HVLV_CONFIG 0x00006400
  107. #define CS35L45_LDPM_CONFIG 0x00006404
  108. #define CS35L45_CLASSH_CONFIG1 0x00006408
  109. #define CS35L45_CLASSH_CONFIG2 0x0000640C
  110. #define CS35L45_CLASSH_CONFIG3 0x00006410
  111. #define CS35L45_AUD_MEM 0x00006418
  112. #define CS35L45_AMP_PCM_CONTROL 0x00007000
  113. #define CS35L45_AMP_PCM_HPF_TST 0x00007004
  114. #define CS35L45_AMP_GAIN 0x00007800
  115. #define CS35L45_DAC_MSM_CONFIG 0x00007C00
  116. #define CS35L45_AMP_OUTPUT_MUTE 0x00007C04
  117. #define CS35L45_AMP_OUTPUT_DRV 0x00007C08
  118. #define CS35L45_ALIVE_DCIN_WD 0x00007C20
  119. #define CS35L45_IRQ1_CFG 0x0000E000
  120. #define CS35L45_IRQ1_STATUS 0x0000E004
  121. #define CS35L45_IRQ1_EINT_1 0x0000E010
  122. #define CS35L45_IRQ1_EINT_2 0x0000E014
  123. #define CS35L45_IRQ1_EINT_3 0x0000E018
  124. #define CS35L45_IRQ1_EINT_4 0x0000E01C
  125. #define CS35L45_IRQ1_EINT_5 0x0000E020
  126. #define CS35L45_IRQ1_EINT_7 0x0000E028
  127. #define CS35L45_IRQ1_EINT_8 0x0000E02C
  128. #define CS35L45_IRQ1_EINT_18 0x0000E054
  129. #define CS35L45_IRQ1_STS_1 0x0000E090
  130. #define CS35L45_IRQ1_STS_2 0x0000E094
  131. #define CS35L45_IRQ1_STS_3 0x0000E098
  132. #define CS35L45_IRQ1_STS_4 0x0000E09C
  133. #define CS35L45_IRQ1_STS_5 0x0000E0A0
  134. #define CS35L45_IRQ1_STS_7 0x0000E0A8
  135. #define CS35L45_IRQ1_STS_8 0x0000E0AC
  136. #define CS35L45_IRQ1_STS_18 0x0000E0D4
  137. #define CS35L45_IRQ1_MASK_1 0x0000E110
  138. #define CS35L45_IRQ1_MASK_2 0x0000E114
  139. #define CS35L45_IRQ1_MASK_3 0x0000E118
  140. #define CS35L45_IRQ1_MASK_4 0x0000E11C
  141. #define CS35L45_IRQ1_MASK_5 0x0000E120
  142. #define CS35L45_IRQ1_MASK_7 0x0000E128
  143. #define CS35L45_IRQ1_MASK_8 0x0000E12C
  144. #define CS35L45_IRQ1_MASK_18 0x0000E154
  145. #define CS35L45_IRQ1_EDGE_1 0x0000E210
  146. #define CS35L45_IRQ1_EDGE_4 0x0000E21C
  147. #define CS35L45_IRQ1_POL_1 0x0000E290
  148. #define CS35L45_IRQ1_POL_2 0x0000E294
  149. #define CS35L45_IRQ1_POL_4 0x0000E29C
  150. #define CS35L45_IRQ1_DB_3 0x0000E318
  151. #define CS35L45_IRQ2_CFG 0x0000E800
  152. #define CS35L45_IRQ2_STATUS 0x0000E804
  153. #define CS35L45_IRQ2_EINT_1 0x0000E810
  154. #define CS35L45_IRQ2_EINT_2 0x0000E814
  155. #define CS35L45_IRQ2_EINT_3 0x0000E818
  156. #define CS35L45_IRQ2_EINT_4 0x0000E81C
  157. #define CS35L45_IRQ2_EINT_5 0x0000E820
  158. #define CS35L45_IRQ2_EINT_7 0x0000E828
  159. #define CS35L45_IRQ2_EINT_8 0x0000E82C
  160. #define CS35L45_IRQ2_EINT_18 0x0000E854
  161. #define CS35L45_IRQ2_STS_1 0x0000E890
  162. #define CS35L45_IRQ2_STS_2 0x0000E894
  163. #define CS35L45_IRQ2_STS_3 0x0000E898
  164. #define CS35L45_IRQ2_STS_4 0x0000E89C
  165. #define CS35L45_IRQ2_STS_5 0x0000E8A0
  166. #define CS35L45_IRQ2_STS_7 0x0000E8A8
  167. #define CS35L45_IRQ2_STS_8 0x0000E8AC
  168. #define CS35L45_IRQ2_STS_18 0x0000E8D4
  169. #define CS35L45_IRQ2_MASK_1 0x0000E910
  170. #define CS35L45_IRQ2_MASK_2 0x0000E914
  171. #define CS35L45_IRQ2_MASK_3 0x0000E918
  172. #define CS35L45_IRQ2_MASK_4 0x0000E91C
  173. #define CS35L45_IRQ2_MASK_5 0x0000E920
  174. #define CS35L45_IRQ2_MASK_7 0x0000E928
  175. #define CS35L45_IRQ2_MASK_8 0x0000E92C
  176. #define CS35L45_IRQ2_MASK_18 0x0000E954
  177. #define CS35L45_IRQ2_EDGE_1 0x0000EA10
  178. #define CS35L45_IRQ2_EDGE_4 0x0000EA1C
  179. #define CS35L45_IRQ2_POL_1 0x0000EA90
  180. #define CS35L45_IRQ2_POL_2 0x0000EA94
  181. #define CS35L45_IRQ2_POL_4 0x0000EA9C
  182. #define CS35L45_IRQ2_DB_3 0x0000EB18
  183. #define CS35L45_GPIO_STATUS1 0x0000F000
  184. #define CS35L45_GPIO1_CTRL1 0x0000F008
  185. #define CS35L45_GPIO2_CTRL1 0x0000F00C
  186. #define CS35L45_GPIO3_CTRL1 0x0000F010
  187. #define CS35L45_MIXER_NGATE_CH1_CFG 0x00010004
  188. #define CS35L45_MIXER_NGATE_CH2_CFG 0x00010008
  189. #define CS35L45_DSP_MBOX_1 0x00011000
  190. #define CS35L45_DSP_MBOX_2 0x00011004
  191. #define CS35L45_DSP_MBOX_3 0x00011008
  192. #define CS35L45_DSP_MBOX_4 0x0001100C
  193. #define CS35L45_DSP_MBOX_5 0x00011010
  194. #define CS35L45_DSP_MBOX_6 0x00011014
  195. #define CS35L45_DSP_MBOX_7 0x00011018
  196. #define CS35L45_DSP_MBOX_8 0x0001101C
  197. #define CS35L45_DSP_VIRT1_MBOX_1 0x00011020
  198. #define CS35L45_DSP_VIRT1_MBOX_2 0x00011024
  199. #define CS35L45_DSP_VIRT1_MBOX_3 0x00011028
  200. #define CS35L45_DSP_VIRT1_MBOX_4 0x0001102C
  201. #define CS35L45_DSP_VIRT1_MBOX_5 0x00011030
  202. #define CS35L45_DSP_VIRT1_MBOX_6 0x00011034
  203. #define CS35L45_DSP_VIRT1_MBOX_7 0x00011038
  204. #define CS35L45_DSP_VIRT1_MBOX_8 0x0001103C
  205. #define CS35L45_DSP_VIRT2_MBOX_1 0x00011040
  206. #define CS35L45_DSP_VIRT2_MBOX_2 0x00011044
  207. #define CS35L45_DSP_VIRT2_MBOX_3 0x00011048
  208. #define CS35L45_DSP_VIRT2_MBOX_4 0x0001104C
  209. #define CS35L45_DSP_VIRT2_MBOX_5 0x00011050
  210. #define CS35L45_DSP_VIRT2_MBOX_6 0x00011054
  211. #define CS35L45_DSP_VIRT2_MBOX_7 0x00011058
  212. #define CS35L45_DSP_VIRT2_MBOX_8 0x0001105C
  213. #define CS35L45_CLOCK_DETECT_1 0x00012000
  214. #define CS35L45_DSP1_XMEM_PACK_0 0x02000000
  215. #define CS35L45_DSP1_XMEM_PACK_4607 0x020047FC
  216. #define CS35L45_DSP1_XMEM_UNPACK32_0 0x02400000
  217. #define CS35L45_DSP1_XMEM_UNPACK32_3071 0x02402FFC
  218. #define CS35L45_DSP1_SYS_ID 0x025E0000
  219. #define CS35L45_DSP1_XMEM_UNPACK24_0 0x02800000
  220. #define CS35L45_DSP1_XMEM_UNPACK24_6143 0x02805FFC
  221. #define CS35L45_DSP1_CLOCK_FREQ 0x02B80000
  222. #define CS35L45_DSP1_RX1_RATE 0x02B80080
  223. #define CS35L45_DSP1_RX2_RATE 0x02B80088
  224. #define CS35L45_DSP1_RX3_RATE 0x02B80090
  225. #define CS35L45_DSP1_RX4_RATE 0x02B80098
  226. #define CS35L45_DSP1_RX5_RATE 0x02B800A0
  227. #define CS35L45_DSP1_RX6_RATE 0x02B800A8
  228. #define CS35L45_DSP1_RX7_RATE 0x02B800B0
  229. #define CS35L45_DSP1_RX8_RATE 0x02B800B8
  230. #define CS35L45_DSP1_TX1_RATE 0x02B80280
  231. #define CS35L45_DSP1_TX2_RATE 0x02B80288
  232. #define CS35L45_DSP1_TX3_RATE 0x02B80290
  233. #define CS35L45_DSP1_TX4_RATE 0x02B80298
  234. #define CS35L45_DSP1_TX5_RATE 0x02B802A0
  235. #define CS35L45_DSP1_TX6_RATE 0x02B802A8
  236. #define CS35L45_DSP1_TX7_RATE 0x02B802B0
  237. #define CS35L45_DSP1_TX8_RATE 0x02B802B8
  238. #define CS35L45_DSP1_SCRATCH1 0x02B805C0
  239. #define CS35L45_DSP1_SCRATCH2 0x02B805C8
  240. #define CS35L45_DSP1_SCRATCH3 0x02B805D0
  241. #define CS35L45_DSP1_SCRATCH4 0x02B805D8
  242. #define CS35L45_DSP1_CCM_CORE_CONTROL 0x02BC1000
  243. #define CS35L45_DSP1_STREAM_ARB_MSTR1_CONFIG_0 0x02BC5000
  244. #define CS35L45_DSP1_STREAM_ARB_TX1_CONFIG_0 0x02BC5200
  245. #define CS35L45_DSP1_YMEM_PACK_0 0x02C00000
  246. #define CS35L45_DSP1_YMEM_PACK_1532 0x02C017F0
  247. #define CS35L45_DSP1_YMEM_UNPACK32_0 0x03000000
  248. #define CS35L45_DSP1_YMEM_UNPACK32_1022 0x03000FF8
  249. #define CS35L45_DSP1_YMEM_UNPACK24_0 0x03400000
  250. #define CS35L45_DSP1_YMEM_UNPACK24_2043 0x03401FEC
  251. #define CS35L45_DSP1_PMEM_0 0x03800000
  252. #define CS35L45_DSP1_PMEM_3834 0x03803BE8
  253. #define CS35L45_LASTREG 0x03C6EFE8
  254. #define CS35L45_SUPPORTED_ID_35A450 0x35A450
  255. #define CS35L45_SUPPORTED_ID_35A460 0x35A460
  256. #define CS35L45_SOFT_RESET_TRIGGER 0x5A000000
  257. #define CS35L45_GLOBAL_EN_SHIFT 0
  258. #define CS35L45_GLOBAL_EN_MASK BIT(0)
  259. #define CS35L45_TEMPMON_GLOBAL_OVR_SHIFT 3
  260. #define CS35L45_TEMPMON_GLOBAL_OVR_MASK BIT(3)
  261. #define CS35L45_BST_DISABLE_FET_OFF 0x00
  262. #define CS35L45_BST_DISABLE_FET_ON 0x01
  263. #define CS35L45_BST_ENABLE 0x02
  264. #define CS35L45_BST_EN_SHIFT 4
  265. #define CS35L45_BST_EN_MASK GENMASK(5, 4)
  266. #define CS35L45_RCV_EN_SHIFT 2
  267. #define CS35L45_RCV_EN_MASK BIT(2)
  268. #define CS35L45_AMP_DRE_EN_SHIFT 20
  269. #define CS35L45_AMP_DRE_EN_MASK BIT(20)
  270. #define CS35L45_SYNC_EN_SHIFT 8
  271. #define CS35L45_SYNC_EN_MASK BIT(8)
  272. #define CS35L45_MEM_RDY_SHIFT 1
  273. #define CS35L45_MEM_RDY_MASK BIT(1)
  274. #define CS35L45_GLOBAL_ERR_RLS_SHIFT 11
  275. #define CS35L45_GLOBAL_ERR_RLS_MASK BIT(11)
  276. #define CS35L45_STATUS_SPKSAFE_ERROR_SHIFT 31
  277. #define CS35L45_STATUS_SPKSAFE_ERROR_MASK BIT(31)
  278. #define CS35L45_BST_UVP_ERR_SHIFT 7
  279. #define CS35L45_BST_UVP_ERR_MASK BIT(7)
  280. #define CS35L45_BST_STARTUP_ERR_SHIFT 13
  281. #define CS35L45_BST_STARTUP_ERR_MASK BIT(13)
  282. #define CS35L45_TEMP_ERR_SHIFT 17
  283. #define CS35L45_TEMP_ERR_MASK BIT(17)
  284. #define CS35L45_UVLO_VDDBATT_ERR_SHIFT 29
  285. #define CS35L45_UVLO_VDDBATT_ERR_MASK BIT(29)
  286. #define CS35L45_UVLO_VDDLV_ERR_SHIFT 16
  287. #define CS35L45_UVLO_VDDLV_ERR_MASK BIT(16)
  288. #define CS35L45_AMP_CAL_ERR_SHIFT 25
  289. #define CS35L45_AMP_CAL_ERR_MASK BIT(25)
  290. #define CS35L45_WKSRC_SYNC_GPIO1 BIT(0)
  291. #define CS35L45_WKSRC_INT_GPIO2 BIT(1)
  292. #define CS35L45_WKSRC_GPIO3 BIT(2)
  293. #define CS35L45_WKSRC_SPI BIT(3)
  294. #define CS35L45_WKSRC_I2C BIT(4)
  295. #define CS35L45_UPDT_WKCTL_SHIFT 15
  296. #define CS35L45_UPDT_WKCTL_MASK BIT(15)
  297. #define CS35L45_WKSRC_EN_SHIFT 8
  298. #define CS35L45_WKSRC_EN_MASK GENMASK(12, 8)
  299. #define CS35L45_WKSRC_POL_SHIFT 0
  300. #define CS35L45_WKSRC_POL_MASK GENMASK(3, 0)
  301. #define CS35L45_UPDT_WKI2C_SHIFT 15
  302. #define CS35L45_UPDT_WKI2C_MASK BIT(15)
  303. #define CS35L45_WKI2C_ADDR_SHIFT 0
  304. #define CS35L45_WKI2C_ADDR_MASK GENMASK(6, 0)
  305. #define CS35L45_CCM_CORE_RESET_SHIFT 9
  306. #define CS35L45_CCM_CORE_RESET_MASK BIT(9)
  307. #define CS35L45_CCM_PM_REMAP_SHIFT 7
  308. #define CS35L45_CCM_PM_REMAP_MASK BIT(7)
  309. #define CS35L45_CCM_CORE_EN_SHIFT 0
  310. #define CS35L45_CCM_CORE_EN_MASK BIT(0)
  311. #define CS35L45_DSP1_STREAM_ARB_MSTR0_EN_SHIFT 0
  312. #define CS35L45_DSP1_STREAM_ARB_MSTR0_EN_MASK BIT(0)
  313. #define CS35L45_DSP1_STREAM_ARB_TX1_EN_SHIFT 0
  314. #define CS35L45_DSP1_STREAM_ARB_TX1_EN_MASK BIT(0)
  315. #define CS35L45_DSP_RATE_SHIFT 0
  316. #define CS35L45_DSP_RATE_MASK 0x1f
  317. #define CS35L45_DSP_SAMPLE_RATE_RX1 0x00080
  318. #define CS35L45_DSP_SAMPLE_RATE_TX1 0x00280
  319. #define CS35L45_48P0_KHZ 0x03
  320. #define CS35L45_96P0_KHZ 0x04
  321. #define CS35L45_44P100_KHZ 0x0B
  322. #define CS35L45_88P200_KHZ 0x0C
  323. #define CS35L45_8_KHZ 0x11
  324. #define CS35L45_16_KHZ 0x12
  325. #define CS35L45_GLOBAL_FS_SHIFT 0
  326. #define CS35L45_GLOBAL_FS_MASK GENMASK(4, 0)
  327. #define CS35L45_SYNC_LSW_RX_EN_SHIFT 19
  328. #define CS35L45_SYNC_LSW_RX_EN_MASK BIT(19)
  329. #define CS35L45_SYNC_LSW_TX_EN_SHIFT 18
  330. #define CS35L45_SYNC_LSW_TX_EN_MASK BIT(18)
  331. #define CS35L45_SYNC_SW_RX_EN_SHIFT 17
  332. #define CS35L45_SYNC_SW_RX_EN_MASK BIT(17)
  333. #define CS35L45_SYNC_SW_TX_EN_SHIFT 16
  334. #define CS35L45_SYNC_SW_TX_EN_MASK BIT(16)
  335. #define CS35L45_SYNC_PWR_RX_EN_SHIFT 5
  336. #define CS35L45_SYNC_PWR_RX_EN_MASK BIT(5)
  337. #define CS35L45_SYNC_PWR_TX_EN_SHIFT 4
  338. #define CS35L45_SYNC_PWR_TX_EN_MASK BIT(4)
  339. #define CS35L45_SYNC_SW_EN_MASK (CS35L45_SYNC_LSW_RX_EN_MASK | \
  340. CS35L45_SYNC_LSW_TX_EN_MASK | \
  341. CS35L45_SYNC_SW_RX_EN_MASK | \
  342. CS35L45_SYNC_SW_TX_EN_MASK)
  343. #define CS35L45_SYNC_MASK (CS35L45_SYNC_SW_EN_MASK| \
  344. CS35L45_SYNC_PWR_RX_EN_MASK| \
  345. CS35L45_SYNC_PWR_TX_EN_MASK| \
  346. CS35L45_SYNC_LSW_RX_EN_MASK| \
  347. CS35L45_SYNC_LSW_TX_EN_MASK)
  348. #define CS35L45_SYNC_LSW_TXID_SHIFT 8
  349. #define CS35L45_SYNC_LSW_TXID_MASK GENMASK(10, 8)
  350. #define CS35L45_SYNC_SW_TXID_SHIFT 0
  351. #define CS35L45_SYNC_SW_TXID_MASK GENMASK(2, 0)
  352. #define CS35L45_PLL_REFCLK_SEL_BCLK 0x0
  353. #define CS35L45_PLL_REFCLK_SEL_SWIRE_CLK 0x7
  354. #define CS35L45_PLL_FORCE_EN_SHIFT 16
  355. #define CS35L45_PLL_FORCE_EN_MASK BIT(16)
  356. #define CS35L45_PLL_OPEN_LOOP_SHIFT 11
  357. #define CS35L45_PLL_OPEN_LOOP_MASK BIT(11)
  358. #define CS35L45_PLL_REFCLK_FREQ_SHIFT 5
  359. #define CS35L45_PLL_REFCLK_FREQ_MASK GENMASK(10, 5)
  360. #define CS35L45_PLL_REFCLK_EN_SHIFT 4
  361. #define CS35L45_PLL_REFCLK_EN_MASK BIT(4)
  362. #define CS35L45_PLL_REFCLK_SEL_SHIFT 0
  363. #define CS35L45_PLL_REFCLK_SEL_MASK GENMASK(2, 0)
  364. #define CS35L45_BST_BPE_INST_L3_THLD_SHIFT 24
  365. #define CS35L45_BST_BPE_INST_L3_THLD_MASK GENMASK(31, 24)
  366. #define CS35L45_BST_BPE_INST_L2_THLD_SHIFT 16
  367. #define CS35L45_BST_BPE_INST_L2_THLD_MASK GENMASK(23, 16)
  368. #define CS35L45_BST_BPE_INST_L1_THLD_SHIFT 8
  369. #define CS35L45_BST_BPE_INST_L1_THLD_MASK GENMASK(15, 8)
  370. #define CS35L45_BST_BPE_INST_L0_THLD_SHIFT 0
  371. #define CS35L45_BST_BPE_INST_L0_THLD_MASK GENMASK(7, 0)
  372. #define CS35L45_BST_BPE_INST_L4_ILIM_SHIFT 24
  373. #define CS35L45_BST_BPE_INST_L4_ILIM_MASK GENMASK(30, 24)
  374. #define CS35L45_BST_BPE_INST_L3_ILIM_SHIFT 16
  375. #define CS35L45_BST_BPE_INST_L3_ILIM_MASK GENMASK(22, 16)
  376. #define CS35L45_BST_BPE_INST_L2_ILIM_SHIFT 8
  377. #define CS35L45_BST_BPE_INST_L2_ILIM_MASK GENMASK(14, 8)
  378. #define CS35L45_BST_BPE_INST_L1_ILIM_SHIFT 0
  379. #define CS35L45_BST_BPE_INST_L1_ILIM_MASK GENMASK(6, 0)
  380. #define CS35L45_BST_BPE_INST_L4_SS_ILIM_SHIFT 24
  381. #define CS35L45_BST_BPE_INST_L4_SS_ILIM_MASK GENMASK(30, 24)
  382. #define CS35L45_BST_BPE_INST_L3_SS_ILIM_SHIFT 16
  383. #define CS35L45_BST_BPE_INST_L3_SS_ILIM_MASK GENMASK(22, 16)
  384. #define CS35L45_BST_BPE_INST_L2_SS_ILIM_SHIFT 8
  385. #define CS35L45_BST_BPE_INST_L2_SS_ILIM_MASK GENMASK(14, 8)
  386. #define CS35L45_BST_BPE_INST_L1_SS_ILIM_SHIFT 0
  387. #define CS35L45_BST_BPE_INST_L1_SS_ILIM_MASK GENMASK(6, 0)
  388. #define CS35L45_BST_BPE_INST_L3_ATK_RATE_SHIFT 24
  389. #define CS35L45_BST_BPE_INST_L3_ATK_RATE_MASK GENMASK(26, 24)
  390. #define CS35L45_BST_BPE_INST_L2_ATK_RATE_SHIFT 16
  391. #define CS35L45_BST_BPE_INST_L2_ATK_RATE_MASK GENMASK(18, 16)
  392. #define CS35L45_BST_BPE_INST_L1_ATK_RATE_SHIFT 8
  393. #define CS35L45_BST_BPE_INST_L1_ATK_RATE_MASK GENMASK(10, 8)
  394. #define CS35L45_BST_BPE_INST_L3_HOLD_TIME_SHIFT 24
  395. #define CS35L45_BST_BPE_INST_L3_HOLD_TIME_MASK GENMASK(27, 24)
  396. #define CS35L45_BST_BPE_INST_L2_HOLD_TIME_SHIFT 16
  397. #define CS35L45_BST_BPE_INST_L2_HOLD_TIME_MASK GENMASK(19, 16)
  398. #define CS35L45_BST_BPE_INST_L1_HOLD_TIME_SHIFT 8
  399. #define CS35L45_BST_BPE_INST_L1_HOLD_TIME_MASK GENMASK(11, 8)
  400. #define CS35L45_BST_BPE_INST_L0_HOLD_TIME_SHIFT 0
  401. #define CS35L45_BST_BPE_INST_L0_HOLD_TIME_MASK GENMASK(3, 0)
  402. #define CS35L45_BST_BPE_INST_L3_RLS_RATE_SHIFT 24
  403. #define CS35L45_BST_BPE_INST_L3_RLS_RATE_MASK GENMASK(28, 24)
  404. #define CS35L45_BST_BPE_INST_L2_RLS_RATE_SHIFT 16
  405. #define CS35L45_BST_BPE_INST_L2_RLS_RATE_MASK GENMASK(20, 16)
  406. #define CS35L45_BST_BPE_INST_L1_RLS_RATE_SHIFT 8
  407. #define CS35L45_BST_BPE_INST_L1_RLS_RATE_MASK GENMASK(12, 8)
  408. #define CS35L45_BST_BPE_INST_L0_RLS_RATE_SHIFT 0
  409. #define CS35L45_BST_BPE_INST_L0_RLS_RATE_MASK GENMASK(4, 0)
  410. #define CS35L45_BST_BPE_INST_INF_HOLD_RLS_SHIFT 16
  411. #define CS35L45_BST_BPE_INST_INF_HOLD_RLS_MASK BIT(16)
  412. #define CS35L45_BST_BPE_IL_LIM_MODE_SHIFT 15
  413. #define CS35L45_BST_BPE_IL_LIM_MODE_MASK BIT(15)
  414. #define CS35L45_BST_BPE_OUT_OPMODE_SEL_SHIFT 12
  415. #define CS35L45_BST_BPE_OUT_OPMODE_SEL_MASK GENMASK(13, 12)
  416. #define CS35L45_BST_BPE_OPMODE_DFLT 0
  417. #define CS35L45_BST_BPE_OPMODE_VOLT_BBPE 0x1
  418. #define CS35L45_BST_BPE_INST_L3_BYP_SHIFT 10
  419. #define CS35L45_BST_BPE_INST_L3_BYP_MASK BIT(10)
  420. #define CS35L45_BST_BPE_INST_L2_BYP_SHIFT 9
  421. #define CS35L45_BST_BPE_INST_L2_BYP_MASK BIT(9)
  422. #define CS35L45_BST_BPE_INST_L1_BYP_SHIFT 8
  423. #define CS35L45_BST_BPE_INST_L1_BYP_MASK BIT(8)
  424. #define CS35L45_BST_BPE_FILT_SEL_SHIFT 0
  425. #define CS35L45_BST_BPE_FILT_SEL_MASK GENMASK(1, 0)
  426. #define CS35L45_BST_BPE_IL_LIM_THLD_HYST_SHIFT 24
  427. #define CS35L45_BST_BPE_IL_LIM_THLD_HYST_MASK GENMASK(28, 24)
  428. #define CS35L45_BST_BPE_IL_LIM_THLD_DEL2_SHIFT 16
  429. #define CS35L45_BST_BPE_IL_LIM_THLD_DEL2_MASK GENMASK(23, 16)
  430. #define CS35L45_BST_BPE_IL_LIM_THLD_DEL1_SHIFT 8
  431. #define CS35L45_BST_BPE_IL_LIM_THLD_DEL1_MASK GENMASK(15, 8)
  432. #define CS35L45_BST_BPE_IL_LIM1_THLD_SHIFT 0
  433. #define CS35L45_BST_BPE_IL_LIM1_THLD_MASK GENMASK(7, 0)
  434. #define CS35L45_BST_BPE_IL_LIM_DLY_HYST_SHIFT 16
  435. #define CS35L45_BST_BPE_IL_LIM_DLY_HYST_MASK GENMASK(22, 16)
  436. #define CS35L45_BST_BPE_IL_LIM2_DLY_SHIFT 8
  437. #define CS35L45_BST_BPE_IL_LIM2_DLY_MASK GENMASK(15, 8)
  438. #define CS35L45_BST_BPE_IL_LIM1_DLY_SHIFT 0
  439. #define CS35L45_BST_BPE_IL_LIM1_DLY_MASK GENMASK(7, 0)
  440. #define CS35L45_BST_BPE_IL_LIM2_ATK_RATE_SHIFT 8
  441. #define CS35L45_BST_BPE_IL_LIM2_ATK_RATE_MASK GENMASK(10, 8)
  442. #define CS35L45_BST_BPE_IL_LIM1_ATK_RATE_SHIFT 0
  443. #define CS35L45_BST_BPE_IL_LIM1_ATK_RATE_MASK GENMASK(2, 0)
  444. #define CS35L45_BST_BPE_IL_LIM2_RLS_RATE_SHIFT 8
  445. #define CS35L45_BST_BPE_IL_LIM2_RLS_RATE_MASK GENMASK(12, 8)
  446. #define CS35L45_BST_BPE_IL_LIM1_RLS_RATE_SHIFT 0
  447. #define CS35L45_BST_BPE_IL_LIM1_RLS_RATE_MASK GENMASK(4, 0)
  448. #define CS35L45_BPE_INST_L3_THLD_SHIFT 24
  449. #define CS35L45_BPE_INST_L3_THLD_MASK GENMASK(31, 24)
  450. #define CS35L45_BPE_INST_L2_THLD_SHIFT 16
  451. #define CS35L45_BPE_INST_L2_THLD_MASK GENMASK(23, 16)
  452. #define CS35L45_BPE_INST_L1_THLD_SHIFT 8
  453. #define CS35L45_BPE_INST_L1_THLD_MASK GENMASK(15, 8)
  454. #define CS35L45_BPE_INST_L0_THLD_SHIFT 0
  455. #define CS35L45_BPE_INST_L0_THLD_MASK GENMASK(7, 0)
  456. #define CS35L45_BPE_INST_L3_ATTN_SHIFT 24
  457. #define CS35L45_BPE_INST_L3_ATTN_MASK GENMASK(28, 24)
  458. #define CS35L45_BPE_INST_L2_ATTN_SHIFT 16
  459. #define CS35L45_BPE_INST_L2_ATTN_MASK GENMASK(20, 16)
  460. #define CS35L45_BPE_INST_L1_ATTN_SHIFT 8
  461. #define CS35L45_BPE_INST_L1_ATTN_MASK GENMASK(12, 8)
  462. #define CS35L45_BPE_INST_L0_ATTN_SHIFT 0
  463. #define CS35L45_BPE_INST_L0_ATTN_MASK GENMASK(4, 0)
  464. #define CS35L45_BPE_INST_L3_ATK_RATE_SHIFT 24
  465. #define CS35L45_BPE_INST_L3_ATK_RATE_MASK GENMASK(27, 24)
  466. #define CS35L45_BPE_INST_L2_ATK_RATE_SHIFT 16
  467. #define CS35L45_BPE_INST_L2_ATK_RATE_MASK GENMASK(19, 16)
  468. #define CS35L45_BPE_INST_L1_ATK_RATE_SHIFT 8
  469. #define CS35L45_BPE_INST_L1_ATK_RATE_MASK GENMASK(11, 8)
  470. #define CS35L45_BPE_INST_L0_ATK_RATE_SHIFT 0
  471. #define CS35L45_BPE_INST_L0_ATK_RATE_MASK GENMASK(3, 0)
  472. #define CS35L45_BPE_INST_L3_HOLD_TIME_SHIFT 24
  473. #define CS35L45_BPE_INST_L3_HOLD_TIME_MASK GENMASK(27, 24)
  474. #define CS35L45_BPE_INST_L2_HOLD_TIME_SHIFT 16
  475. #define CS35L45_BPE_INST_L2_HOLD_TIME_MASK GENMASK(19, 16)
  476. #define CS35L45_BPE_INST_L1_HOLD_TIME_SHIFT 8
  477. #define CS35L45_BPE_INST_L1_HOLD_TIME_MASK GENMASK(11, 8)
  478. #define CS35L45_BPE_INST_L0_HOLD_TIME_SHIFT 0
  479. #define CS35L45_BPE_INST_L0_HOLD_TIME_MASK GENMASK(3, 0)
  480. #define CS35L45_BPE_INST_L3_RLS_RATE_SHIFT 24
  481. #define CS35L45_BPE_INST_L3_RLS_RATE_MASK GENMASK(27, 24)
  482. #define CS35L45_BPE_INST_L2_RLS_RATE_SHIFT 16
  483. #define CS35L45_BPE_INST_L2_RLS_RATE_MASK GENMASK(19, 16)
  484. #define CS35L45_BPE_INST_L1_RLS_RATE_SHIFT 8
  485. #define CS35L45_BPE_INST_L1_RLS_RATE_MASK GENMASK(11, 8)
  486. #define CS35L45_BPE_INST_L0_RLS_RATE_SHIFT 0
  487. #define CS35L45_BPE_INST_L0_RLS_RATE_MASK GENMASK(3, 0)
  488. #define CS35L45_BPE_INST_BPE_BYP_SHIFT 24
  489. #define CS35L45_BPE_INST_BPE_BYP_MASK BIT(24)
  490. #define CS35L45_BPE_INST_INF_HOLD_RLS_SHIFT 16
  491. #define CS35L45_BPE_INST_INF_HOLD_RLS_MASK BIT(16)
  492. #define CS35L45_BPE_INST_L3_BYP_SHIFT 10
  493. #define CS35L45_BPE_INST_L3_BYP_MASK BIT(10)
  494. #define CS35L45_BPE_INST_L2_BYP_SHIFT 9
  495. #define CS35L45_BPE_INST_L2_BYP_MASK BIT(9)
  496. #define CS35L45_BPE_INST_L1_BYP_SHIFT 8
  497. #define CS35L45_BPE_INST_L1_BYP_MASK BIT(8)
  498. #define CS35L45_BPE_MODE_SEL_SHIFT 4
  499. #define CS35L45_BPE_MODE_SEL_MASK GENMASK(5, 4)
  500. #define CS35L45_BPE_FILT_SEL_SHIFT 0
  501. #define CS35L45_BPE_FILT_SEL_MASK GENMASK(1, 0)
  502. #define CS35L45_ASP_BCLK_FREQ_SHIFT 0
  503. #define CS35L45_ASP_BCLK_FREQ_MASK GENMASK(5, 0)
  504. #define CS35L45_ASP_WIDTH_16 0x10
  505. #define CS35L45_ASP_WIDTH_24 0x18
  506. #define CS35L45_ASP_WIDTH_32 0x20
  507. #define CS35L45_ASP_WIDTH_RX_SHIFT 24
  508. #define CS35L45_ASP_WIDTH_RX_MASK GENMASK(31, 24)
  509. #define CS35L45_ASP_WIDTH_TX_SHIFT 16
  510. #define CS35L45_ASP_WIDTH_TX_MASK GENMASK(23, 16)
  511. #define CS35L45_ASP_FMT_SHIFT 8
  512. #define CS35L45_ASP_FMT_MASK GENMASK(10, 8)
  513. #define CS35L45_ASP_BCLK_INV_SHIFT 6
  514. #define CS35L45_ASP_BCLK_INV_MASK BIT(6)
  515. #define CS35L45_ASP_BCLK_MSTR_SHIFT 4
  516. #define CS35L45_ASP_BCLK_MSTR_MASK BIT(4)
  517. #define CS35L45_ASP_FSYNC_INV_SHIFT 2
  518. #define CS35L45_ASP_FSYNC_INV_MASK BIT(2)
  519. #define CS35L45_ASP_FSYNC_MSTR_SHIFT 0
  520. #define CS35L45_ASP_FSYNC_MSTR_MASK BIT(0)
  521. #define CS35L45_ASP_WL_MAX 24
  522. #define CS35L45_ASP_WL_MIN 12
  523. #define CS35L45_ASP_WL_SHIFT 0
  524. #define CS35L45_ASP_WL_MASK GENMASK(5, 0)
  525. #define CS35L45_ASP_DOUT_HIZ_CTRL_SHIFT 0
  526. #define CS35L45_ASP_DOUT_HIZ_CTRL_MASK GENMASK(1, 0)
  527. #define CS35L45_ASP_TX4_SLOT_SHIFT 24
  528. #define CS35L45_ASP_TX4_SLOT_MASK GENMASK(29, 24)
  529. #define CS35L45_ASP_TX3_SLOT_SHIFT 16
  530. #define CS35L45_ASP_TX3_SLOT_MASK GENMASK(21, 16)
  531. #define CS35L45_ASP_TX2_SLOT_SHIFT 8
  532. #define CS35L45_ASP_TX2_SLOT_MASK GENMASK(13, 8)
  533. #define CS35L45_ASP_TX1_SLOT_SHIFT 0
  534. #define CS35L45_ASP_TX1_SLOT_MASK GENMASK(5, 0)
  535. #define CS35L45_ASP_TX_ALL_SLOTS (CS35L45_ASP_TX4_SLOT_MASK | \
  536. CS35L45_ASP_TX3_SLOT_MASK | \
  537. CS35L45_ASP_TX2_SLOT_MASK | \
  538. CS35L45_ASP_TX1_SLOT_MASK)
  539. #define CS35L45_ASP_RX2_SLOT_SHIFT 8
  540. #define CS35L45_ASP_RX2_SLOT_MASK GENMASK(13, 8)
  541. #define CS35L45_ASP_RX1_SLOT_SHIFT 0
  542. #define CS35L45_ASP_RX1_SLOT_MASK GENMASK(5, 0)
  543. #define CS35L45_ASP_RX_ALL_SLOTS (CS35L45_ASP_RX2_SLOT_MASK | \
  544. CS35L45_ASP_RX1_SLOT_MASK)
  545. #define CS35L45_ASP_ENABLES1_MASK (GENMASK(17, 16) | GENMASK(3, 0))
  546. #define CS35L45_BLOCK_ENABLES_MASK (GENMASK(13, 12) | \
  547. GENMASK(9, 8) | BIT(1))
  548. #define CS35L45_PCM_SRC_MASK 0x7F
  549. #define CS35L45_PCM_SRC_ZERO 0x00
  550. #define CS35L45_PCM_SRC_ASP_RX1 0x08
  551. #define CS35L45_PCM_SRC_ASP_RX2 0x09
  552. #define CS35L45_PCM_SRC_VMON 0x18
  553. #define CS35L45_PCM_SRC_IMON 0x19
  554. #define CS35L45_PCM_SRC_ERR_VOL 0x20
  555. #define CS35L45_PCM_SRC_CLASSH_TGT 0x21
  556. #define CS35L45_PCM_SRC_VDD_BATTMON 0x28
  557. #define CS35L45_PCM_SRC_VDD_BSTMON 0x29
  558. #define CS35L45_PCM_SRC_DSP_TX1 0x32
  559. #define CS35L45_PCM_SRC_DSP_TX2 0x33
  560. #define CS35L45_PCM_SRC_TEMPMON 0x3A
  561. #define CS35L45_PCM_SRC_SWIRE_RX1 0x44
  562. #define CS35L45_PCM_SRC_SWIRE_RX2 0x45
  563. #define CS35L45_FORCE_LV_OPERATION 0x01
  564. #define CS35L45_FORCE_HV_OPERATION 0x02
  565. #define CS35L45_HVLV_OPERATION 0x03
  566. #define CS35L45_HVLV_THLD_HYS_SHIFT 22
  567. #define CS35L45_HVLV_THLD_HYS_MASK GENMASK(23, 22)
  568. #define CS35L45_HVLV_THLD_SHIFT 16
  569. #define CS35L45_HVLV_THLD_MASK GENMASK(20, 16)
  570. #define CS35L45_HVLV_DLY_SHIFT 2
  571. #define CS35L45_HVLV_DLY_MASK GENMASK(4, 2)
  572. #define CS35L45_HVLV_MODE_SHIFT 0
  573. #define CS35L45_HVLV_MODE_MASK GENMASK(1, 0)
  574. #define CS35L45_LDPM_GP1_BOOST_SEL_SHIFT 15
  575. #define CS35L45_LDPM_GP1_BOOST_SEL_MASK BIT(15)
  576. #define CS35L45_LDPM_GP1_BOOST_SEL_DEFAULT 0
  577. #define CS35L45_LDPM_GP1_AMP_SEL_SHIFT 14
  578. #define CS35L45_LDPM_GP1_AMP_SEL_MASK BIT(14)
  579. #define CS35L45_LDPM_GP1_AMP_SEL_DEFAULT 0
  580. #define CS35L45_LDPM_GP1_DELAY_SHIFT 11
  581. #define CS35L45_LDPM_GP1_DELAY_MASK GENMASK(13, 11)
  582. #define CS35L45_LDPM_GP1_DELAY_DEFAULT 0x6
  583. #define CS35L45_LDPM_GP1_PCM_THLD_SHIFT 8
  584. #define CS35L45_LDPM_GP1_PCM_THLD_MASK GENMASK(10, 8)
  585. #define CS35L45_LDPM_GP1_PCM_THLD_DEFAULT 0x6
  586. #define CS35L45_LDPM_GP2_IMON_SEL_SHIFT 7
  587. #define CS35L45_LDPM_GP2_IMON_SEL_MASK BIT(7)
  588. #define CS35L45_LDPM_GP2_IMON_SEL_DEFAULT 0
  589. #define CS35L45_LDPM_GP2_VMON_SEL_SHIFT 6
  590. #define CS35L45_LDPM_GP2_VMON_SEL_MASK BIT(6)
  591. #define CS35L45_LDPM_GP2_VMON_SEL_DEFAULT 0
  592. #define CS35L45_LDPM_GP2_DELAY_SHIFT 3
  593. #define CS35L45_LDPM_GP2_DELAY_MASK GENMASK(5, 3)
  594. #define CS35L45_LDPM_GP2_DELAY_DEFAULT 0x6
  595. #define CS35L45_LDPM_GP2_PCM_THLD_SHIFT 0
  596. #define CS35L45_LDPM_GP2_PCM_THLD_MASK GENMASK(2, 0)
  597. #define CS35L45_LDPM_GP2_PCM_THLD_DEFAULT 0x6
  598. #define CS35L45_CH_HDRM_SHIFT 24
  599. #define CS35L45_CH_HDRM_MASK GENMASK(30, 24)
  600. #define CS35L45_CH_RATIO_SHIFT 8
  601. #define CS35L45_CH_RATIO_MASK GENMASK(12, 8)
  602. #define CS35L45_CH_REL_RATE_SHIFT 0
  603. #define CS35L45_CH_REL_RATE_MASK GENMASK(7, 0)
  604. #define CS35L45_CH_OVB_THLD1_SHIFT 16
  605. #define CS35L45_CH_OVB_THLD1_MASK GENMASK(23, 16)
  606. #define CS35L45_CH_OVB_THLDDELTA_SHIFT 8
  607. #define CS35L45_CH_OVB_THLDDELTA_MASK GENMASK(15, 8)
  608. #define CS35L45_CH_VDD_BST_MAX_SHIFT 0
  609. #define CS35L45_CH_VDD_BST_MAX_MASK GENMASK(7, 0)
  610. #define CS35L45_CH_OVB_LATCH_SHIFT 31
  611. #define CS35L45_CH_OVB_LATCH_MASK BIT(31)
  612. #define CS35L45_CH_OVB_RATIO_SHIFT 16
  613. #define CS35L45_CH_OVB_RATIO_MASK GENMASK(20, 16)
  614. #define CS35L45_CH_THLD1_OFFSET_SHIFT 0
  615. #define CS35L45_CH_THLD1_OFFSET_MASK GENMASK(11, 0)
  616. #define CS35L45_AUD_MEM_DEPTH_SHIFT 0
  617. #define CS35L45_AUD_MEM_DEPTH_MASK GENMASK(2, 0)
  618. #define CS35l45_HPF_DEFAULT 0x00000000
  619. #define CS35L45_HPF_44P1 0x000108BD
  620. #define CS35L45_HPF_88P2 0x0001045F
  621. #define CS35L45_AMP_VOL_PCM_MUTE 0x04CF
  622. #define CS35L45_AMP_VOL_PCM_SHIFT 0
  623. #define CS35L45_AMP_VOL_PCM_MASK GENMASK(10, 0)
  624. #define CS35L45_AMP_GAIN_PCM_10DBV 0x00
  625. #define CS35L45_AMP_GAIN_PCM_13DBV 0x01
  626. #define CS35L45_AMP_GAIN_PCM_16DBV 0x02
  627. #define CS35L45_AMP_GAIN_PCM_19DBV 0x03
  628. #define CS35L45_AMP_GAIN_PCM_SHIFT 8
  629. #define CS35L45_AMP_GAIN_PCM_MASK GENMASK(9, 8)
  630. #define CS35L45_AMP_MUTE_SHIFT 0
  631. #define CS35L45_AMP_MUTE_MASK BIT(0)
  632. #define CS35L45_AMP_SHORT_ERR_MASK BIT(31)
  633. #define CS35L45_BST_SHORT_ERR_MASK BIT(8)
  634. #define CS35L45_MSM_PUP_DONE_MASK BIT(24)
  635. #define CS35L45_MSM_PDN_DONE_MASK BIT(23)
  636. #define CS35L45_DSP_VIRT1_MBOX_MASK BIT(20)
  637. #define CS35L45_OTP_BOOT_DONE_STS_MASK BIT(1)
  638. #define CS35L45_OTP_BUSY_MASK BIT(0)
  639. #define CS35L45_GPIO_DIR_SHIFT 31
  640. #define CS35L45_GPIO_DIR_MASK BIT(31)
  641. #define CS35L45_GPIO_LVL_SHIFT 15
  642. #define CS35L45_GPIO_LVL_MASK BIT(15)
  643. #define CS35L45_GPIO_OP_CFG_SHIFT 14
  644. #define CS35L45_GPIO_OP_CFG_MASK BIT(14)
  645. #define CS35L45_GPIO_POL_SHIFT 12
  646. #define CS35L45_GPIO_POL_MASK BIT(12)
  647. #define CS35L45_GPIO_CTRL_SHIFT 20
  648. #define CS35L45_GPIO_CTRL_MASK GENMASK(22, 20)
  649. #define CS35L45_GPIO_INVERT_SHIFT 19
  650. #define CS35L45_GPIO_INVERT_MASK BIT(19)
  651. #define CS35L45_AUX_NGATE_CH_EN_SHIFT 16
  652. #define CS35L45_AUX_NGATE_CH_EN_MASK BIT(16)
  653. #define CS35L45_AUX_NGATE_CH_HOLD_SHIFT 8
  654. #define CS35L45_AUX_NGATE_CH_HOLD_MASK GENMASK(11, 8)
  655. #define CS35L45_AUX_NGATE_CH_THR_SHIFT 0
  656. #define CS35L45_AUX_NGATE_CH_THR_MASK GENMASK(2, 0)
  657. #define CS35L45_AUX_NGATE_CH_HOLD_DEFAULT 0x03
  658. #define CS35L45_AUX_NGATE_CH_THR_DEFAULT 0x03
  659. #define CS35L45_MAX_PLL_CONFIGS 64
  660. #define CS35L45_REGSTRIDE 4
  661. #define CS35L45_VALID_PDATA 0x80000000
  662. #define CS35L45_DEFAULT_SLOT_WIDTH 32
  663. #define CS35L45_BUFSIZE 64
  664. #define CS35L45_ALGID 0xCD
  665. #define CS35L45_ALGID_EFFICIENCY 0xF205
  666. #define CS35L45_ALGID_CURRENT_SHARING 0xF207
  667. #define CS35L45_ALGID_MDSYNC 0xF20A
  668. #define CS35L45_ALGID_TRACE 0xF20B
  669. #define CS35L45_ALGID_PAUSE_RESUME 0xF206
  670. #define CS35L45_DSP_LOG_ENABLED "EVNTLG_ENABLED"
  671. #define CS35L45_DSP_LOG_BUFFER "BUFFER"
  672. #define CS35L45_DSP_LOG_BUFFER_SIZE "BUFFER_SIZE"
  673. #define CS35L45_DSP_LOG_TRANSFER_COMPLETED "TRANSFER_COMPLETED"
  674. #define CS35L45_DSP_DATA_WORD_SIZE 3
  675. struct cs35l45_private;
  676. struct cs35l45_pll_sysclk_config {
  677. int freq;
  678. int clk_cfg;
  679. };
  680. enum cspl_mboxstate {
  681. CSPL_MBOX_STS_RUNNING = 0,
  682. CSPL_MBOX_STS_PAUSED = 1,
  683. CSPL_MBOX_STS_RDY_FOR_REINIT = 2,
  684. CSPL_MBOX_STS_HIBERNATE = 3,
  685. };
  686. enum cspl_mboxcmd {
  687. CSPL_MBOX_CMD_NONE = 0,
  688. CSPL_MBOX_CMD_PAUSE = 1,
  689. CSPL_MBOX_CMD_RESUME = 2,
  690. CSPL_MBOX_CMD_REINIT = 3,
  691. CSPL_MBOX_CMD_STOP_PRE_REINIT = 4,
  692. CSPL_MBOX_CMD_HIBERNATE = 5,
  693. CSPL_MBOX_CMD_OUT_OF_HIBERNATE = 6,
  694. CSPL_MBOX_CMD_UNKNOWN_CMD = -1,
  695. CSPL_MBOX_CMD_INVALID_SEQUENCE = -2,
  696. };
  697. enum cspl_cmd {
  698. CSPL_CMD_NONE = 0,
  699. CSPL_CMD_MUTE = 1,
  700. CSPL_CMD_UNMUTE = 2,
  701. CSPL_CMD_UPDATE_PARAM = 8,
  702. };
  703. enum cspl_pr {
  704. CSPL_PR_FADE_IN = 0,
  705. CSPL_PR_PLAYING,
  706. CSPL_PR_FADE_OUT,
  707. CSPL_PR_ZERO_TX,
  708. CSPL_PR_PAUSING,
  709. CSPL_PR_PAUSED,
  710. };
  711. enum cspl_st {
  712. CSPL_ST_RUNNING = 0,
  713. CSPL_ST_ERROR = 1,
  714. CSPL_ST_MUTED = 2,
  715. CSPL_ST_REINITING = 3,
  716. CSPL_ST_DIAGNOSING = 6,
  717. };
  718. enum pcm_mixers {
  719. ASP_TX1 = 0,
  720. ASP_TX2,
  721. ASP_TX3,
  722. ASP_TX4,
  723. DSP_RX1,
  724. DSP_RX2,
  725. DSP_RX3,
  726. DSP_RX4,
  727. DSP_RX5,
  728. DSP_RX6,
  729. DSP_RX7,
  730. DSP_RX8,
  731. DACPCM,
  732. NGATE1,
  733. NGATE2,
  734. };
  735. enum amp_mode {
  736. AMP_MODE_NONE = 0,
  737. AMP_MODE_SPK = 1,
  738. AMP_MODE_RCV = 2,
  739. };
  740. enum hiber_mode {
  741. HIBER_MODE_DIS = 0,
  742. HIBER_MODE_EN = 1,
  743. };
  744. enum control_bus_type {
  745. CONTROL_BUS_I2C = 0,
  746. CONTROL_BUS_SPI = 1,
  747. };
  748. int cs35l45_set_csplmboxcmd(struct cs35l45_private *cs35l45,
  749. enum cspl_mboxcmd cmd);
  750. extern const struct regmap_config cs35l45_i2c_regmap;
  751. extern const struct regmap_config cs35l45_spi_regmap;
  752. extern const struct cs35l45_pll_sysclk_config
  753. cs35l45_pll_sysclk[CS35L45_MAX_PLL_CONFIGS];
  754. /*
  755. * IRQs
  756. */
  757. #define CS35L45_IRQ(_irq, _name, _hand) \
  758. { \
  759. .irq = CS35L45_ ## _irq ## _IRQ,\
  760. .name = _name, \
  761. .handler = _hand, \
  762. }
  763. struct cs35l45_irq {
  764. int irq;
  765. const char *name;
  766. irqreturn_t (*handler)(int irq, void *data);
  767. };
  768. #define CS35L45_REG_IRQ(_reg, _irq) \
  769. [CS35L45_ ## _irq ## _IRQ] = { \
  770. .reg_offset = (CS35L45_ ## _reg) - CS35L45_IRQ1_EINT_1, \
  771. .mask = CS35L45_ ## _irq ## _MASK \
  772. }
  773. /* (0x0000E010) CS35L45_IRQ1_EINT_1 */
  774. #define CS35L45_MSM_GLOBAL_EN_ASSERT_SHIFT 22
  775. #define CS35L45_MSM_GLOBAL_EN_ASSERT_MASK BIT(CS35L45_MSM_GLOBAL_EN_ASSERT_SHIFT)
  776. /* (0x0000E014) CS35L45_IRQ1_EINT_2 */
  777. #define CS35L45_DSP_VIRT2_MBOX_SHIFT 21
  778. #define CS35L45_DSP_VIRT2_MBOX_MASK BIT(CS35L45_DSP_VIRT2_MBOX_SHIFT)
  779. #define CS35L45_DSP_WDT_EXPIRE_SHIFT 4
  780. #define CS35L45_DSP_WDT_EXPIRE_MASK BIT(CS35L45_DSP_WDT_EXPIRE_SHIFT)
  781. /* (0x0000E018) CS35L45_IRQ1_EINT_3 */
  782. #define CS35L45_PLL_UNLOCK_FLAG_RISE_SHIFT 4
  783. #define CS35L45_PLL_UNLOCK_FLAG_RISE_MASK BIT(CS35L45_PLL_UNLOCK_FLAG_RISE_SHIFT)
  784. #define CS35L45_PLL_LOCK_FLAG_SHIFT 1
  785. #define CS35L45_PLL_LOCK_FLAG_MASK BIT(CS35L45_PLL_LOCK_FLAG_SHIFT)
  786. /* (0x0000E054) CS35L45_IRQ1_EINT_18 */
  787. #define CS35L45_GLOBAL_ERROR_SHIFT 15
  788. #define CS35L45_GLOBAL_ERROR_MASK BIT(CS35L45_GLOBAL_ERROR_SHIFT)
  789. enum cs35l45_irq_list {
  790. CS35L45_AMP_SHORT_ERR_IRQ,
  791. CS35L45_UVLO_VDDBATT_ERR_IRQ,
  792. CS35L45_BST_SHORT_ERR_IRQ,
  793. CS35L45_BST_UVP_ERR_IRQ,
  794. CS35L45_TEMP_ERR_IRQ,
  795. CS35L45_AMP_CAL_ERR_IRQ,
  796. CS35L45_UVLO_VDDLV_ERR_IRQ,
  797. CS35L45_GLOBAL_ERROR_IRQ,
  798. CS35L45_DSP_WDT_EXPIRE_IRQ,
  799. CS35L45_PLL_UNLOCK_FLAG_RISE_IRQ,
  800. CS35L45_PLL_LOCK_FLAG_IRQ,
  801. CS35L45_DSP_VIRT2_MBOX_IRQ,
  802. CS35L45_NUM_IRQ
  803. };
  804. #define CS35L45_MBOX3_CMD_MASK 0xFF
  805. #define CS35L45_MBOX3_CMD_SHIFT 0
  806. #define CS35L45_MBOX3_DATA_MASK 0xFFFFFF00
  807. #define CS35L45_MBOX3_DATA_SHIFT 8
  808. enum mbox3_events {
  809. EVENT_SPEAKER_STATUS = 0x66,
  810. EVENT_BOOT_DONE = 0x67,
  811. };
  812. enum speaker_status {
  813. SPK_STATUS_ALL_CLEAR = 1,
  814. SPK_STATUS_OPEN_CIRCUIT = 2,
  815. SPK_STATUS_SHORT_CIRCUIT = 4,
  816. };
  817. /* Power management */
  818. extern const struct dev_pm_ops cs35l45_pm_ops;
  819. int cs35l45_suspend_runtime(struct device *dev);
  820. int cs35l45_resume_runtime(struct device *dev);
  821. int cs35l45_sys_suspend(struct device *dev);
  822. int cs35l45_sys_suspend_noirq(struct device *dev);
  823. int cs35l45_sys_resume(struct device *dev);
  824. int cs35l45_sys_resume_noirq(struct device *dev);
  825. #endif /*__CS35L45_H__*/