hpm_wm8960_regs.h 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139
  1. /*
  2. * Copyright (c) 2022 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef _HPM_WM8960_REG_H_
  8. #define _HPM_WM8960_REG_H_
  9. /* WM8960 register number */
  10. #define WM8960_REG_NUM 56U
  11. /* Define the register address of WM8960 */
  12. #define WM8960_LINVOL 0x0U /* Left Input Volume */
  13. #define WM8960_RINVOL 0x1U /* Right Input Volume */
  14. #define WM8960_LOUT1 0x2U /* LOUT1 Volume */
  15. #define WM8960_ROUT1 0x3U /* ROUT1 Volume */
  16. #define WM8960_CLOCK1 0x4U /* Clocking(1) */
  17. #define WM8960_DACCTL1 0x5U /* ADC and DAC Control (1) */
  18. #define WM8960_DACCTL2 0x6U /* ADC and DAC Control (2) */
  19. #define WM8960_IFACE1 0x7U /* Audio Interface */
  20. #define WM8960_CLOCK2 0x8U /* Clocking(2) */
  21. #define WM8960_IFACE2 0x9U /* Audio Interface */
  22. #define WM8960_LDAC 0xaU /* Left DAC */
  23. #define WM8960_RDAC 0xbU /* Right DAC Volume */
  24. #define WM8960_RESET 0xfU /* RESET */
  25. #define WM8960_3D 0x10U /* 3D Control */
  26. #define WM8960_ALC1 0x11U /* ALC (1) */
  27. #define WM8960_ALC2 0x12U /* ALC (2) */
  28. #define WM8960_ALC3 0x13U /* ALC (3) */
  29. #define WM8960_NOISEG 0x14U /* Noise Gate */
  30. #define WM8960_LADC 0x15U /* Left ADC Volume */
  31. #define WM8960_RADC 0x16U /* Right ADC Volume */
  32. #define WM8960_ADDCTL1 0x17U /* Additional Control (1) */
  33. #define WM8960_ADDCTL2 0x18U /* Additional Control (2) */
  34. #define WM8960_POWER1 0x19U /* Power Mgmt (1) */
  35. #define WM8960_POWER2 0x1aU /* Power Mgmt (2) */
  36. #define WM8960_ADDCTL3 0x1bU /* Additional Control (3) */
  37. #define WM8960_APOP1 0x1cU /* Anti-Pop 1 */
  38. #define WM8960_APOP2 0x1dU /* Anti-pop 2 */
  39. #define WM8960_LINPATH 0x20U /* ADCL Signal Path */
  40. #define WM8960_RINPATH 0x21U /* ADCR Signal Path */
  41. #define WM8960_LOUTMIX 0x22U /* Left Out Mix */
  42. #define WM8960_ROUTMIX 0x25U /* Right Out Mix */
  43. #define WM8960_MONOMIX1 0x26U /* Mono Out Mix (1) */
  44. #define WM8960_MONOMIX2 0x27U /* Mono Out Mix (2) */
  45. #define WM8960_LOUT2 0x28U /* Left Speaker Volume */
  46. #define WM8960_ROUT2 0x29U /* Right Speaker Volume */
  47. #define WM8960_MONO 0x2aU /* OUT3 Volume */
  48. #define WM8960_INBMIX1 0x2bU /* Left Input Boost Mixer */
  49. #define WM8960_INBMIX2 0x2cU /* Right Input Boost Mixer */
  50. #define WM8960_BYPASS1 0x2dU /* Left Bypass */
  51. #define WM8960_BYPASS2 0x2eU /* Right Bypass */
  52. #define WM8960_POWER3 0x2fU /* Power Mgmt (3) */
  53. #define WM8960_ADDCTL4 0x30U /* Additional Control (4) */
  54. #define WM8960_CLASSD1 0x31U /* Class D Control (1) */
  55. #define WM8960_CLASSD3 0x33U /* Class D Control (2) */
  56. #define WM8960_PLL1 0x34U /* PLL (1) */
  57. #define WM8960_PLL2 0x35U /* PLL (2) */
  58. #define WM8960_PLL3 0x36U /* PLL (3) */
  59. #define WM8960_PLL4 0x37U /* PLL (4) */
  60. /* Bitfield definition for register: LINVO */
  61. /*
  62. * IPVU (RW)
  63. *
  64. * Input PGA Volume Update
  65. * Writing a 1 to this bit will cause left and right input PGA volumes to be updated (LINVOL and RINVOL)
  66. */
  67. #define WM8960_LINVO_IPVU_MASK (0x100U)
  68. #define WM8960_LINVO_IPVU_SHIFT (8U)
  69. #define WM8960_LINVO_IPVU_SET(x) (((uint16_t)(x) << WM8960_LINVO_IPVU_SHIFT) & WM8960_LINVO_IPVU_MASK)
  70. #define WM8960_LINVO_IPVU_GET(x) (((uint16_t)(x) & WM8960_LINVO_IPVU_MASK) >> WM8960_LINVO_IPVU_SHIFT)
  71. /*
  72. * LINMUTE (RW)
  73. *
  74. * Left Input PGA Analogue Mute 1 = Enable Mute 0 = Disable Mute Note: IPVU must be set to un-mute.
  75. */
  76. #define WM8960_LINVO_LINMUTE_MASK (0x80U)
  77. #define WM8960_LINVO_LINMUTE_SHIFT (7U)
  78. #define WM8960_LINVO_LINMUTE_SET(x) (((uint16_t)(x) << WM8960_LINVO_LINMUTE_SHIFT) & WM8960_LINVO_LINMUTE_MASK)
  79. #define WM8960_LINVO_LINMUTE_GET(x) (((uint16_t)(x) & WM8960_LINVO_LINMUTE_MASK) >> WM8960_LINVO_LINMUTE_SHIFT)
  80. /*
  81. * LIZC (RW)
  82. *
  83. * Left Input PGA Zero Cross Detector 1 = Change gain on zero cross only 0 = Change gain immediately
  84. */
  85. #define WM8960_LINVO_LIZC_MASK (0x40U)
  86. #define WM8960_LINVO_LIZC_SHIFT (6U)
  87. #define WM8960_LINVO_LIZC_SET(x) (((uint16_t)(x) << WM8960_LINVO_LIZC_SHIFT) & WM8960_LINVO_LIZC_MASK)
  88. #define WM8960_LINVO_LIZC_GET(x) (((uint16_t)(x) & WM8960_LINVO_LIZC_MASK) >> WM8960_LINVO_LIZC_SHIFT)
  89. /*
  90. * LINVOL (RW)
  91. *
  92. * Left Input PGA Volume Control
  93. * 111111 = +30dB
  94. * 111110 = +29.25dB
  95. * . . 0.75dB steps down to
  96. * 000000 = -17.25dB
  97. */
  98. #define WM8960_LINVO_LINVOL_MASK (0x3FU)
  99. #define WM8960_LINVO_LINVOL_SHIFT (0U)
  100. #define WM8960_LINVO_LINVOL_SET(x) (((uint16_t)(x) << WM8960_LINVO_LINVOL_SHIFT) & WM8960_LINVO_LINVOL_MASK)
  101. #define WM8960_LINVO_LINVOL_GET(x) (((uint16_t)(x) & WM8960_LINVO_LINVOL_MASK) >> WM8960_LINVO_LINVOL_SHIFT)
  102. /* Bitfield definition for register: RINVOL */
  103. /*
  104. * IPVU (RW)
  105. *
  106. * Input PGA Volume Update
  107. * Writing a 1 to this bit will cause left and right
  108. * input PGA volumes to be updated (LINVOL and RINVOL)
  109. */
  110. #define WM8960_RINVOL_IPVU_MASK (0x100U)
  111. #define WM8960_RINVOL_IPVU_SHIFT (8U)
  112. #define WM8960_RINVOL_IPVU_SET(x) (((uint16_t)(x) << WM8960_RINVOL_IPVU_SHIFT) & WM8960_RINVOL_IPVU_MASK)
  113. #define WM8960_RINVOL_IPVU_GET(x) (((uint16_t)(x) & WM8960_RINVOL_IPVU_MASK) >> WM8960_RINVOL_IPVU_SHIFT)
  114. /*
  115. * RINMUTE (RW)
  116. *
  117. * Right Input PGA Analogue Mute
  118. * 1 = Enable Mute
  119. * 0 = Disable Mute
  120. * Note: IPVU must be set to un-mute.
  121. */
  122. #define WM8960_RINVOL_RINMUTE_MASK (0x80U)
  123. #define WM8960_RINVOL_RINMUTE_SHIFT (7U)
  124. #define WM8960_RINVOL_RINMUTE_SET(x) (((uint16_t)(x) << WM8960_RINVOL_RINMUTE_SHIFT) & WM8960_RINVOL_RINMUTE_MASK)
  125. #define WM8960_RINVOL_RINMUTE_GET(x) (((uint16_t)(x) & WM8960_RINVOL_RINMUTE_MASK) >> WM8960_RINVOL_RINMUTE_SHIFT)
  126. /*
  127. * RIZC (RW)
  128. *
  129. * Right Input PGA Zero Cross Detector
  130. * 1 = Change gain on zero cross only
  131. * 0 = Change gain immediately
  132. */
  133. #define WM8960_RINVOL_RIZC_MASK (0x40U)
  134. #define WM8960_RINVOL_RIZC_SHIFT (6U)
  135. #define WM8960_RINVOL_RIZC_SET(x) (((uint16_t)(x) << WM8960_RINVOL_RIZC_SHIFT) & WM8960_RINVOL_RIZC_MASK)
  136. #define WM8960_RINVOL_RIZC_GET(x) (((uint16_t)(x) & WM8960_RINVOL_RIZC_MASK) >> WM8960_RINVOL_RIZC_SHIFT)
  137. /*
  138. * RINVOL (RW)
  139. *
  140. * Right Input PGA Volume Control
  141. * 111111 = +30dB
  142. * 111110 = +29.25dB
  143. * . . 0.75dB steps down to
  144. * 000000 = -17.25dB
  145. */
  146. #define WM8960_RINVOL_RINVOL_MASK (0x3FU)
  147. #define WM8960_RINVOL_RINVOL_SHIFT (0U)
  148. #define WM8960_RINVOL_RINVOL_SET(x) (((uint16_t)(x) << WM8960_RINVOL_RINVOL_SHIFT) & WM8960_RINVOL_RINVOL_MASK)
  149. #define WM8960_RINVOL_RINVOL_GET(x) (((uint16_t)(x) & WM8960_RINVOL_RINVOL_MASK) >> WM8960_RINVOL_RINVOL_SHIFT)
  150. /* Bitfield definition for register: LOUT1 */
  151. /*
  152. * OUT1VU (RW)
  153. *
  154. * Headphone Output PGA Volume Update
  155. * Writing a 1 to this bit will cause left and right
  156. * headphone output volumes to be updated
  157. * (LOUT1VOL and ROUT1VOL)
  158. */
  159. #define WM8960_LOUT1_OUT1VU_MASK (0x100U)
  160. #define WM8960_LOUT1_OUT1VU_SHIFT (8U)
  161. #define WM8960_LOUT1_OUT1VU_SET(x) (((uint16_t)(x) << WM8960_LOUT1_OUT1VU_SHIFT) & WM8960_LOUT1_OUT1VU_MASK)
  162. #define WM8960_LOUT1_OUT1VU_GET(x) (((uint16_t)(x) & WM8960_LOUT1_OUT1VU_MASK) >> WM8960_LOUT1_OUT1VU_SHIFT)
  163. /*
  164. * LO1ZC (RW)
  165. *
  166. * Left Headphone Output Zero Cross Enable
  167. * 0 = Change gain immediately
  168. * 1 = Change gain on zero cross only
  169. */
  170. #define WM8960_LOUT1_LO1ZC_MASK (0x80U)
  171. #define WM8960_LOUT1_LO1ZC_SHIFT (7U)
  172. #define WM8960_LOUT1_LO1ZC_SET(x) (((uint16_t)(x) << WM8960_LOUT1_LO1ZC_SHIFT) & WM8960_LOUT1_LO1ZC_MASK)
  173. #define WM8960_LOUT1_LO1ZC_GET(x) (((uint16_t)(x) & WM8960_LOUT1_LO1ZC_MASK) >> WM8960_LOUT1_LO1ZC_SHIFT)
  174. /*
  175. * LOUT1VOL (RW)
  176. *
  177. * LOUT1 Volume
  178. * 1111111 = +6dB
  179. * … 1dB steps down to
  180. * 0110000 = -73dB
  181. * 0101111 to 0000000 = Analogue MUTE
  182. */
  183. #define WM8960_LOUT1_LOUT1VOL_MASK (0x7FU)
  184. #define WM8960_LOUT1_LOUT1VOL_SHIFT (0U)
  185. #define WM8960_LOUT1_LOUT1VOL_SET(x) (((uint16_t)(x) << WM8960_LOUT1_LOUT1VOL_SHIFT) & WM8960_LOUT1_LOUT1VOL_MASK)
  186. #define WM8960_LOUT1_LOUT1VOL_GET(x) (((uint16_t)(x) & WM8960_LOUT1_LOUT1VOL_MASK) >> WM8960_LOUT1_LOUT1VOL_SHIFT)
  187. /* Bitfield definition for register: ROUT1 */
  188. /*
  189. * OUT1VU (RW)
  190. *
  191. * Headphone Output PGA Volume Update
  192. * Writing a 1 to this bit will cause left and right
  193. * headphone output volumes to be updated
  194. * (LOUT1VOL and ROUT1VOL)
  195. */
  196. #define WM8960_ROUT1_OUT1VU_MASK (0x100U)
  197. #define WM8960_ROUT1_OUT1VU_SHIFT (8U)
  198. #define WM8960_ROUT1_OUT1VU_SET(x) (((uint16_t)(x) << WM8960_ROUT1_OUT1VU_SHIFT) & WM8960_ROUT1_OUT1VU_MASK)
  199. #define WM8960_ROUT1_OUT1VU_GET(x) (((uint16_t)(x) & WM8960_ROUT1_OUT1VU_MASK) >> WM8960_ROUT1_OUT1VU_SHIFT)
  200. /*
  201. * RO1ZC (RW)
  202. *
  203. * Right Headphone Output Zero Cross Enable
  204. * 0 = Change gain immediately
  205. * 1 = Change gain on zero cross only
  206. */
  207. #define WM8960_ROUT1_RO1ZC_MASK (0x80U)
  208. #define WM8960_ROUT1_RO1ZC_SHIFT (7U)
  209. #define WM8960_ROUT1_RO1ZC_SET(x) (((uint16_t)(x) << WM8960_ROUT1_RO1ZC_SHIFT) & WM8960_ROUT1_RO1ZC_MASK)
  210. #define WM8960_ROUT1_RO1ZC_GET(x) (((uint16_t)(x) & WM8960_ROUT1_RO1ZC_MASK) >> WM8960_ROUT1_RO1ZC_SHIFT)
  211. /*
  212. * ROUT1VOL (RW)
  213. *
  214. * ROUT1 Volume
  215. * 1111111 = +6dB
  216. * … 1dB steps down to
  217. * 0110000 = -73dB
  218. * 0101111 to 0000000 = Analogue MUTE
  219. */
  220. #define WM8960_ROUT1_ROUT1VOL_MASK (0x7FU)
  221. #define WM8960_ROUT1_ROUT1VOL_SHIFT (0U)
  222. #define WM8960_ROUT1_ROUT1VOL_SET(x) (((uint16_t)(x) << WM8960_ROUT1_ROUT1VOL_SHIFT) & WM8960_ROUT1_ROUT1VOL_MASK)
  223. #define WM8960_ROUT1_ROUT1VOL_GET(x) (((uint16_t)(x) & WM8960_ROUT1_ROUT1VOL_MASK) >> WM8960_ROUT1_ROUT1VOL_SHIFT)
  224. /* Bitfield definition for register: CLOCK1 */
  225. /*
  226. * ADCDIV (RW)
  227. *
  228. * ADC Sample rate divider (Also determines
  229. * ADCLRC in master mode)
  230. * 000 = SYSCLK / (1.0 * 256)
  231. * 001 = SYSCLK / (1.5 * 256)
  232. * 010 = SYSCLK / (2 * 256)
  233. * 011 = SYSCLK / (3 * 256)
  234. * 100 = SYSCLK / (4 * 256)
  235. * 101 = SYSCLK / (5.5 * 256)
  236. * 110 = SYSCLK / (6 * 256)
  237. * 111 = Reserved
  238. */
  239. #define WM8960_CLOCK1_ADCDIV_MASK (0x1C0U)
  240. #define WM8960_CLOCK1_ADCDIV_SHIFT (6U)
  241. #define WM8960_CLOCK1_ADCDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_ADCDIV_SHIFT) & WM8960_CLOCK1_ADCDIV_MASK)
  242. #define WM8960_CLOCK1_ADCDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_ADCDIV_MASK) >> WM8960_CLOCK1_ADCDIV_SHIFT)
  243. /*
  244. * DACDIV (RW)
  245. *
  246. * DAC Sample rate divider (Also determines
  247. * DACLRC in master mode)
  248. * 000 = SYSCLK / (1.0 * 256)
  249. * 001 = SYSCLK / (1.5 * 256)
  250. * 010 = SYSCLK / (2 * 256)
  251. * 011 = SYSCLK / (3 * 256)
  252. * 100 = SYSCLK / (4 * 256)
  253. * 101 = SYSCLK / (5.5 * 256)
  254. * 110 = SYSCLK / (6 * 256)
  255. * 111 = Reserved
  256. */
  257. #define WM8960_CLOCK1_DACDIV_MASK (0x38U)
  258. #define WM8960_CLOCK1_DACDIV_SHIFT (3U)
  259. #define WM8960_CLOCK1_DACDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_DACDIV_SHIFT) & WM8960_CLOCK1_DACDIV_MASK)
  260. #define WM8960_CLOCK1_DACDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_DACDIV_MASK) >> WM8960_CLOCK1_DACDIV_SHIFT)
  261. /*
  262. * SYSCLKDIV (RW)
  263. *
  264. * SYSCLK Pre-divider. Clock source (MCLK or
  265. * PLL output) will be divided by this value to
  266. * generate SYSCLK.
  267. * 00 = Divide SYSCLK by 1
  268. * 01 = Reserved
  269. * 10 = Divide SYSCLK by 2
  270. * 11 = Reserved
  271. */
  272. #define WM8960_CLOCK1_SYSCLKDIV_MASK (0x6U)
  273. #define WM8960_CLOCK1_SYSCLKDIV_SHIFT (1U)
  274. #define WM8960_CLOCK1_SYSCLKDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_SYSCLKDIV_SHIFT) & WM8960_CLOCK1_SYSCLKDIV_MASK)
  275. #define WM8960_CLOCK1_SYSCLKDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_SYSCLKDIV_MASK) >> WM8960_CLOCK1_SYSCLKDIV_SHIFT)
  276. /*
  277. * CLKSEL (RW)
  278. *
  279. * SYSCLK Selection
  280. * 0 = SYSCLK derived from MCLK
  281. * 1 = SYSCLK derived from PLL output
  282. */
  283. #define WM8960_CLOCK1_CLKSEL_MASK (0x1U)
  284. #define WM8960_CLOCK1_CLKSEL_SHIFT (0U)
  285. #define WM8960_CLOCK1_CLKSEL_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_CLKSEL_SHIFT) & WM8960_CLOCK1_CLKSEL_MASK)
  286. #define WM8960_CLOCK1_CLKSEL_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_CLKSEL_MASK) >> WM8960_CLOCK1_CLKSEL_SHIFT)
  287. /* Bitfield definition for register: DACCTL1 */
  288. /*
  289. * DACDIV2 (RW)
  290. *
  291. * DAC 6dB Attenuate Enable
  292. * 0 = Disabled (0dB)
  293. * 1 = -6dB Enabled
  294. */
  295. #define WM8960_DACCTL1_DACDIV2_MASK (0x80U)
  296. #define WM8960_DACCTL1_DACDIV2_SHIFT (7U)
  297. #define WM8960_DACCTL1_DACDIV2_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_DACDIV2_SHIFT) & WM8960_DACCTL1_DACDIV2_MASK)
  298. #define WM8960_DACCTL1_DACDIV2_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_DACDIV2_MASK) >> WM8960_DACCTL1_DACDIV2_SHIFT)
  299. /*
  300. * ADCPOL (RW)
  301. *
  302. * ADC polarity control:
  303. * 00 = Polarity not inverted
  304. * 01 = ADC L inverted
  305. * 10 = ADC R inverted
  306. * 11 = ADC L and R inverted
  307. */
  308. #define WM8960_DACCTL1_ADCPOL_MASK (0x60U)
  309. #define WM8960_DACCTL1_ADCPOL_SHIFT (5U)
  310. #define WM8960_DACCTL1_ADCPOL_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_ADCPOL_SHIFT) & WM8960_DACCTL1_ADCPOL_MASK)
  311. #define WM8960_DACCTL1_ADCPOL_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_ADCPOL_MASK) >> WM8960_DACCTL1_ADCPOL_SHIFT)
  312. /*
  313. * DACMU (RW)
  314. *
  315. * DAC Digital Soft Mute
  316. * 1 = Mute
  317. * 0 = No mute (signal active)
  318. */
  319. #define WM8960_DACCTL1_DACMU_MASK (0x8U)
  320. #define WM8960_DACCTL1_DACMU_SHIFT (3U)
  321. #define WM8960_DACCTL1_DACMU_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_DACMU_SHIFT) & WM8960_DACCTL1_DACMU_MASK)
  322. #define WM8960_DACCTL1_DACMU_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_DACMU_MASK) >> WM8960_DACCTL1_DACMU_SHIFT)
  323. /*
  324. * DEEMPH (RW)
  325. *
  326. * De-emphasis Control
  327. * 11 = 48kHz sample rate
  328. * 10 = 44.1kHz sample rate
  329. * 01 = 32kHz sample rate
  330. * 00 = No de-emphasis
  331. */
  332. #define WM8960_DACCTL1_DEEMPH_MASK (0x6U)
  333. #define WM8960_DACCTL1_DEEMPH_SHIFT (1U)
  334. #define WM8960_DACCTL1_DEEMPH_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_DEEMPH_SHIFT) & WM8960_DACCTL1_DEEMPH_MASK)
  335. #define WM8960_DACCTL1_DEEMPH_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_DEEMPH_MASK) >> WM8960_DACCTL1_DEEMPH_SHIFT)
  336. /*
  337. * ADCHPD (RW)
  338. *
  339. * ADC High Pass Filter Disable
  340. * 0 = Enable high pass filter on left and right channels
  341. * 1 = Disable high pass filter on left and right channels
  342. */
  343. #define WM8960_DACCTL1_ADCHPD_MASK (0x1U)
  344. #define WM8960_DACCTL1_ADCHPD_SHIFT (0U)
  345. #define WM8960_DACCTL1_ADCHPD_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_ADCHPD_SHIFT) & WM8960_DACCTL1_ADCHPD_MASK)
  346. #define WM8960_DACCTL1_ADCHPD_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_ADCHPD_MASK) >> WM8960_DACCTL1_ADCHPD_SHIFT)
  347. /* Bitfield definition for register: DACCTL2 */
  348. /*
  349. * DACPOL (RW)
  350. *
  351. * DAC polarity control:
  352. * 00 = Polarity not inverted
  353. * 01 = DAC L inverted
  354. * 10 = DAC R inverted
  355. * 11 = DAC L and R inverted
  356. */
  357. #define WM8960_DACCTL2_DACPOL_MASK (0x60U)
  358. #define WM8960_DACCTL2_DACPOL_SHIFT (5U)
  359. #define WM8960_DACCTL2_DACPOL_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACPOL_SHIFT) & WM8960_DACCTL2_DACPOL_MASK)
  360. #define WM8960_DACCTL2_DACPOL_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACPOL_MASK) >> WM8960_DACCTL2_DACPOL_SHIFT)
  361. /*
  362. * DACSMM (RW)
  363. *
  364. * DAC Soft Mute Mode
  365. * 0 = Disabling soft-mute (DACMU=0) will cause
  366. * the volume to change immediately to the
  367. * LDACVOL / RDACVOL settings
  368. * 1 = Disabling soft-mute (DACMU=0) will cause
  369. * the volume to ramp up gradually to the
  370. * LDACVOL / RDACVOL settings
  371. */
  372. #define WM8960_DACCTL2_DACSMM_MASK (0x8U)
  373. #define WM8960_DACCTL2_DACSMM_SHIFT (3U)
  374. #define WM8960_DACCTL2_DACSMM_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACSMM_SHIFT) & WM8960_DACCTL2_DACSMM_MASK)
  375. #define WM8960_DACCTL2_DACSMM_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACSMM_MASK) >> WM8960_DACCTL2_DACSMM_SHIFT)
  376. /*
  377. * DACMR (RW)
  378. *
  379. * DAC Soft Mute Ramp Rate
  380. * 0 = Fast ramp (24kHz at fs=48k, providing
  381. * maximum delay of 10.7ms)
  382. * 1 = Slow ramp (1.5kHz at fs=48k, providing
  383. * maximum delay of 171ms)
  384. */
  385. #define WM8960_DACCTL2_DACMR_MASK (0x4U)
  386. #define WM8960_DACCTL2_DACMR_SHIFT (2U)
  387. #define WM8960_DACCTL2_DACMR_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACMR_SHIFT) & WM8960_DACCTL2_DACMR_MASK)
  388. #define WM8960_DACCTL2_DACMR_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACMR_MASK) >> WM8960_DACCTL2_DACMR_SHIFT)
  389. /*
  390. * DACSLOPE (RW)
  391. *
  392. * Selects DAC filter characteristics
  393. * 0 = Normal mode
  394. * 1 = Sloping stopband
  395. */
  396. #define WM8960_DACCTL2_DACSLOPE_MASK (0x2U)
  397. #define WM8960_DACCTL2_DACSLOPE_SHIFT (1U)
  398. #define WM8960_DACCTL2_DACSLOPE_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACSLOPE_SHIFT) & WM8960_DACCTL2_DACSLOPE_MASK)
  399. #define WM8960_DACCTL2_DACSLOPE_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACSLOPE_MASK) >> WM8960_DACCTL2_DACSLOPE_SHIFT)
  400. /* Bitfield definition for register: IFACE1 */
  401. /*
  402. * ALRSWAP (RW)
  403. *
  404. * Left/Right ADC Channel Swap
  405. * 1 = Swap left and right ADC data in audio
  406. * interface
  407. * 0 = Output left and right data as normal
  408. */
  409. #define WM8960_IFACE1_ALRSWAP_MASK (0x100U)
  410. #define WM8960_IFACE1_ALRSWAP_SHIFT (8U)
  411. #define WM8960_IFACE1_ALRSWAP_SET(x) (((uint16_t)(x) << WM8960_IFACE1_ALRSWAP_SHIFT) & WM8960_IFACE1_ALRSWAP_MASK)
  412. #define WM8960_IFACE1_ALRSWAP_GET(x) (((uint16_t)(x) & WM8960_IFACE1_ALRSWAP_MASK) >> WM8960_IFACE1_ALRSWAP_SHIFT)
  413. /*
  414. * BCLKINV (RW)
  415. *
  416. * BCLK invert bit (for master and slave modes)
  417. * 0 = BCLK not inverted
  418. * 1 = BCLK inverted
  419. */
  420. #define WM8960_IFACE1_BCLKINV_MASK (0x80U)
  421. #define WM8960_IFACE1_BCLKINV_SHIFT (7U)
  422. #define WM8960_IFACE1_BCLKINV_SET(x) (((uint16_t)(x) << WM8960_IFACE1_BCLKINV_SHIFT) & WM8960_IFACE1_BCLKINV_MASK)
  423. #define WM8960_IFACE1_BCLKINV_GET(x) (((uint16_t)(x) & WM8960_IFACE1_BCLKINV_MASK) >> WM8960_IFACE1_BCLKINV_SHIFT)
  424. /*
  425. * MS (RW)
  426. *
  427. * Master / Slave Mode Control
  428. * 0 = Enable slave mode
  429. * 1 = Enable master mode
  430. */
  431. #define WM8960_IFACE1_MS_MASK (0x40U)
  432. #define WM8960_IFACE1_MS_SHIFT (6U)
  433. #define WM8960_IFACE1_MS_SET(x) (((uint16_t)(x) << WM8960_IFACE1_MS_SHIFT) & WM8960_IFACE1_MS_MASK)
  434. #define WM8960_IFACE1_MS_GET(x) (((uint16_t)(x) & WM8960_IFACE1_MS_MASK) >> WM8960_IFACE1_MS_SHIFT)
  435. /*
  436. * DLRSWAP (RW)
  437. *
  438. * Left/Right DAC Channel Swap
  439. * 0 = Output left and right data as normal
  440. * 1 = Swap left and right DAC data in audio interface
  441. */
  442. #define WM8960_IFACE1_DLRSWAP_MASK (0x20U)
  443. #define WM8960_IFACE1_DLRSWAP_SHIFT (5U)
  444. #define WM8960_IFACE1_DLRSWAP_SET(x) (((uint16_t)(x) << WM8960_IFACE1_DLRSWAP_SHIFT) & WM8960_IFACE1_DLRSWAP_MASK)
  445. #define WM8960_IFACE1_DLRSWAP_GET(x) (((uint16_t)(x) & WM8960_IFACE1_DLRSWAP_MASK) >> WM8960_IFACE1_DLRSWAP_SHIFT)
  446. /*
  447. * LRP (RW)
  448. *
  449. * Right, left and I2S modes – LRCLK polarity
  450. * 0 = normal LRCLK polarity
  451. * 1 = invert LRCLK polarity
  452. * DSP Mode – mode A/B select
  453. * 0 = MSB is available on 2nd BCLK rising edge after LRC rising edge (mode A)
  454. * 1 = MSB is available on 1st BCLK rising edge after LRC rising edge (mode B)
  455. */
  456. #define WM8960_IFACE1_LRP_MASK (0x10U)
  457. #define WM8960_IFACE1_LRP_SHIFT (4U)
  458. #define WM8960_IFACE1_LRP_SET(x) (((uint16_t)(x) << WM8960_IFACE1_LRP_SHIFT) & WM8960_IFACE1_LRP_MASK)
  459. #define WM8960_IFACE1_LRP_GET(x) (((uint16_t)(x) & WM8960_IFACE1_LRP_MASK) >> WM8960_IFACE1_LRP_SHIFT)
  460. /*
  461. * WL (RW)
  462. *
  463. * Audio Data Word Length
  464. * 00 = 16 bits
  465. * 01 = 20 bits
  466. * 10 = 24 bits
  467. * 11 = 32 bits (see Note)
  468. */
  469. #define WM8960_IFACE1_WL_MASK (0xCU)
  470. #define WM8960_IFACE1_WL_SHIFT (2U)
  471. #define WM8960_IFACE1_WL_SET(x) (((uint16_t)(x) << WM8960_IFACE1_WL_SHIFT) & WM8960_IFACE1_WL_MASK)
  472. #define WM8960_IFACE1_WL_GET(x) (((uint16_t)(x) & WM8960_IFACE1_WL_MASK) >> WM8960_IFACE1_WL_SHIFT)
  473. /*
  474. * FORMAT (RW)
  475. *
  476. * 00 = Right justified
  477. * 01 = Left justified
  478. * 10 = I2S Format
  479. * 11 = DSP Mode
  480. */
  481. #define WM8960_IFACE1_FORMAT_MASK (0x3U)
  482. #define WM8960_IFACE1_FORMAT_SHIFT (0U)
  483. #define WM8960_IFACE1_FORMAT_SET(x) (((uint16_t)(x) << WM8960_IFACE1_FORMAT_SHIFT) & WM8960_IFACE1_FORMAT_MASK)
  484. #define WM8960_IFACE1_FORMAT_GET(x) (((uint16_t)(x) & WM8960_IFACE1_FORMAT_MASK) >> WM8960_IFACE1_FORMAT_SHIFT)
  485. /* Bitfield definition for register: CLOCK2 */
  486. /*
  487. * DCLKDIV (RW)
  488. *
  489. * Class D switching clock divider.
  490. * 000 = SYSCLK / 1.5 (Not recommended)
  491. * 001 = SYSCLK / 2
  492. * 010 = SYSCLK / 3
  493. * 011 = SYSCLK / 4
  494. * 100 = SYSCLK / 6
  495. * 101 = SYSCLK / 8
  496. * 110 = SYSCLK / 12
  497. * 111 = SYSCLK / 16
  498. */
  499. #define WM8960_CLOCK2_DCLKDIV_MASK (0x1C0U)
  500. #define WM8960_CLOCK2_DCLKDIV_SHIFT (6U)
  501. #define WM8960_CLOCK2_DCLKDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK2_DCLKDIV_SHIFT) & WM8960_CLOCK2_DCLKDIV_MASK)
  502. #define WM8960_CLOCK2_DCLKDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK2_DCLKDIV_MASK) >> WM8960_CLOCK2_DCLKDIV_SHIFT)
  503. /*
  504. * BCLKDIV (RW)
  505. *
  506. * BCLK Frequency (Master Mode)
  507. * 0000 = SYSCLK
  508. * 0001 = SYSCLK / 1.5
  509. * 0010 = SYSCLK / 2
  510. * 0011 = SYSCLK / 3
  511. * 0100 = SYSCLK / 4
  512. * 0101 = SYSCLK / 5.5
  513. * 0110 = SYSCLK / 6
  514. * 0111 = SYSCLK / 8
  515. * 1000 = SYSCLK / 11
  516. * 1001 = SYSCLK / 12
  517. * 1010 = SYSCLK / 16
  518. * 1011 = SYSCLK / 22
  519. * 1100 = SYSCLK / 24
  520. * 1101 to 1111 = SYSCLK / 32
  521. */
  522. #define WM8960_CLOCK2_BCLKDIV_MASK (0xFU)
  523. #define WM8960_CLOCK2_BCLKDIV_SHIFT (0U)
  524. #define WM8960_CLOCK2_BCLKDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK2_BCLKDIV_SHIFT) & WM8960_CLOCK2_BCLKDIV_MASK)
  525. #define WM8960_CLOCK2_BCLKDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK2_BCLKDIV_MASK) >> WM8960_CLOCK2_BCLKDIV_SHIFT)
  526. /* Bitfield definition for register: IFACE2 */
  527. /*
  528. * ALRCGPIO (RW)
  529. *
  530. * ADCLRC/GPIO1 Pin Function Select
  531. * 0 = ADCLRC frame clock for ADC
  532. * 1 = GPIO pin
  533. */
  534. #define WM8960_IFACE2_ALRCGPIO_MASK (0x40U)
  535. #define WM8960_IFACE2_ALRCGPIO_SHIFT (6U)
  536. #define WM8960_IFACE2_ALRCGPIO_SET(x) (((uint16_t)(x) << WM8960_IFACE2_ALRCGPIO_SHIFT) & WM8960_IFACE2_ALRCGPIO_MASK)
  537. #define WM8960_IFACE2_ALRCGPIO_GET(x) (((uint16_t)(x) & WM8960_IFACE2_ALRCGPIO_MASK) >> WM8960_IFACE2_ALRCGPIO_SHIFT)
  538. /*
  539. * WL8 (RW)
  540. *
  541. * 8-Bit Word Length Select (Used with
  542. * companding)
  543. * 0 = Off
  544. * 1 = Device operates in 8-bit mode.
  545. */
  546. #define WM8960_IFACE2_WL8_MASK (0x20U)
  547. #define WM8960_IFACE2_WL8_SHIFT (5U)
  548. #define WM8960_IFACE2_WL8_SET(x) (((uint16_t)(x) << WM8960_IFACE2_WL8_SHIFT) & WM8960_IFACE2_WL8_MASK)
  549. #define WM8960_IFACE2_WL8_GET(x) (((uint16_t)(x) & WM8960_IFACE2_WL8_MASK) >> WM8960_IFACE2_WL8_SHIFT)
  550. /*
  551. * DACCOMP (RW)
  552. *
  553. * DAC companding
  554. * 00 = off
  555. * 01 = reserved
  556. * 10 = μ-law
  557. * 11 = A-law
  558. */
  559. #define WM8960_IFACE2_DACCOMP_MASK (0x18U)
  560. #define WM8960_IFACE2_DACCOMP_SHIFT (3U)
  561. #define WM8960_IFACE2_DACCOMP_SET(x) (((uint16_t)(x) << WM8960_IFACE2_DACCOMP_SHIFT) & WM8960_IFACE2_DACCOMP_MASK)
  562. #define WM8960_IFACE2_DACCOMP_GET(x) (((uint16_t)(x) & WM8960_IFACE2_DACCOMP_MASK) >> WM8960_IFACE2_DACCOMP_SHIFT)
  563. /*
  564. * ADCCOMP (RW)
  565. *
  566. * ADC companding
  567. * 00 = off
  568. * 01 = reserved
  569. * 10 = μ-law
  570. * 11 = A-law
  571. */
  572. #define WM8960_IFACE2_ADCCOMP_MASK (0x6U)
  573. #define WM8960_IFACE2_ADCCOMP_SHIFT (1U)
  574. #define WM8960_IFACE2_ADCCOMP_SET(x) (((uint16_t)(x) << WM8960_IFACE2_ADCCOMP_SHIFT) & WM8960_IFACE2_ADCCOMP_MASK)
  575. #define WM8960_IFACE2_ADCCOMP_GET(x) (((uint16_t)(x) & WM8960_IFACE2_ADCCOMP_MASK) >> WM8960_IFACE2_ADCCOMP_SHIFT)
  576. /*
  577. * LOOPBACK (RW)
  578. *
  579. * Digital Loopback Function
  580. * 0 = No loopback.
  581. * 1 = Loopback enabled, ADC data output is fed
  582. * directly into DAC data input
  583. */
  584. #define WM8960_IFACE2_LOOPBACK_MASK (0x1U)
  585. #define WM8960_IFACE2_LOOPBACK_SHIFT (0U)
  586. #define WM8960_IFACE2_LOOPBACK_SET(x) (((uint16_t)(x) << WM8960_IFACE2_LOOPBACK_SHIFT) & WM8960_IFACE2_LOOPBACK_MASK)
  587. #define WM8960_IFACE2_LOOPBACK_GET(x) (((uint16_t)(x) & WM8960_IFACE2_LOOPBACK_MASK) >> WM8960_IFACE2_LOOPBACK_SHIFT)
  588. /* Bitfield definition for register: LDAC */
  589. /*
  590. * DACVU (RW)
  591. *
  592. * DAC Volume Update
  593. * Writing a 1 to this bit will cause left and right
  594. * DAC volumes to be updated (LDACVOL and RDACVOL)
  595. */
  596. #define WM8960_LDAC_DACVU_MASK (0x100U)
  597. #define WM8960_LDAC_DACVU_SHIFT (8U)
  598. #define WM8960_LDAC_DACVU_SET(x) (((uint16_t)(x) << WM8960_LDAC_DACVU_SHIFT) & WM8960_LDAC_DACVU_MASK)
  599. #define WM8960_LDAC_DACVU_GET(x) (((uint16_t)(x) & WM8960_LDAC_DACVU_MASK) >> WM8960_LDAC_DACVU_SHIFT)
  600. /*
  601. * LDACVOL (RW)
  602. *
  603. * Left DAC Digital Volume Control
  604. * 0000 0000 = Digital Mute
  605. * 0000 0001 = -127dB
  606. * 0000 0010 = -126.5dB
  607. * ... 0.5dB steps up to
  608. * 1111 1111 = 0dB
  609. */
  610. #define WM8960_LDAC_LDACVOL_MASK (0xFFU)
  611. #define WM8960_LDAC_LDACVOL_SHIFT (0U)
  612. #define WM8960_LDAC_LDACVOL_SET(x) (((uint16_t)(x) << WM8960_LDAC_LDACVOL_SHIFT) & WM8960_LDAC_LDACVOL_MASK)
  613. #define WM8960_LDAC_LDACVOL_GET(x) (((uint16_t)(x) & WM8960_LDAC_LDACVOL_MASK) >> WM8960_LDAC_LDACVOL_SHIFT)
  614. /* Bitfield definition for register: RDAC */
  615. /*
  616. * DACVU (RW)
  617. *
  618. * DAC Volume Update
  619. * Writing a 1 to this bit will cause left and right
  620. * DAC volumes to be updated (LDACVOL and RDACVOL)
  621. */
  622. #define WM8960_RDAC_DACVU_MASK (0x100U)
  623. #define WM8960_RDAC_DACVU_SHIFT (8U)
  624. #define WM8960_RDAC_DACVU_SET(x) (((uint16_t)(x) << WM8960_RDAC_DACVU_SHIFT) & WM8960_RDAC_DACVU_MASK)
  625. #define WM8960_RDAC_DACVU_GET(x) (((uint16_t)(x) & WM8960_RDAC_DACVU_MASK) >> WM8960_RDAC_DACVU_SHIFT)
  626. /*
  627. * RDACVOL (RW)
  628. *
  629. * Right DAC Digital Volume Control
  630. * 0000 0000 = Digital Mute
  631. * 0000 0001 = -127dB
  632. * 0000 0010 = -126.5dB
  633. * ... 0.5dB steps up to
  634. * 1111 1111 = 0dB
  635. */
  636. #define WM8960_RDAC_RDACVOL_MASK (0xFFU)
  637. #define WM8960_RDAC_RDACVOL_SHIFT (0U)
  638. #define WM8960_RDAC_RDACVOL_SET(x) (((uint16_t)(x) << WM8960_RDAC_RDACVOL_SHIFT) & WM8960_RDAC_RDACVOL_MASK)
  639. #define WM8960_RDAC_RDACVOL_GET(x) (((uint16_t)(x) & WM8960_RDAC_RDACVOL_MASK) >> WM8960_RDAC_RDACVOL_SHIFT)
  640. /* Bitfield definition for register: RESET */
  641. /*
  642. * RESET (RW)
  643. *
  644. * Writing to this register resets all registers to their default state.
  645. */
  646. #define WM8960_RESET_RESET_MASK (0x1FFU)
  647. #define WM8960_RESET_RESET_SHIFT (0U)
  648. #define WM8960_RESET_RESET_SET(x) (((uint16_t)(x) << WM8960_RESET_RESET_SHIFT) & WM8960_RESET_RESET_MASK)
  649. #define WM8960_RESET_RESET_GET(x) (((uint16_t)(x) & WM8960_RESET_RESET_MASK) >> WM8960_RESET_RESET_SHIFT)
  650. /* Bitfield definition for register: 3D */
  651. /*
  652. * 3DUC (RW)
  653. *
  654. * 3D Enhance Filter Upper Cut-Off Frequency
  655. * 0 = High (Recommended for fs>=32kHz)
  656. * 1 = Low (Recommended for fs<32kHz)
  657. */
  658. #define WM8960_3D_3DUC_MASK (0x40U)
  659. #define WM8960_3D_3DUC_SHIFT (6U)
  660. #define WM8960_3D_3DUC_SET(x) (((uint16_t)(x) << WM8960_3D_3DUC_SHIFT) & WM8960_3D_3DUC_MASK)
  661. #define WM8960_3D_3DUC_GET(x) (((uint16_t)(x) & WM8960_3D_3DUC_MASK) >> WM8960_3D_3DUC_SHIFT)
  662. /*
  663. * 3DLC (RW)
  664. *
  665. * 3D Enhance Filter Lower Cut-Off Frequency
  666. * 0 = Low (Recommended for fs>=32kHz)
  667. * 1 = High (Recommended for fs<32kHz)
  668. */
  669. #define WM8960_3D_3DLC_MASK (0x20U)
  670. #define WM8960_3D_3DLC_SHIFT (5U)
  671. #define WM8960_3D_3DLC_SET(x) (((uint16_t)(x) << WM8960_3D_3DLC_SHIFT) & WM8960_3D_3DLC_MASK)
  672. #define WM8960_3D_3DLC_GET(x) (((uint16_t)(x) & WM8960_3D_3DLC_MASK) >> WM8960_3D_3DLC_SHIFT)
  673. /*
  674. * 3DDEPTH (RW)
  675. *
  676. * 3D Stereo Depth
  677. * 0000 = 0% (minimum 3D effect)
  678. * 0001 = 6.67%
  679. * ....
  680. * 1110 = 93.3%
  681. * 1111 = 100% (maximum 3D effect)
  682. */
  683. #define WM8960_3D_3DDEPTH_MASK (0x1EU)
  684. #define WM8960_3D_3DDEPTH_SHIFT (1U)
  685. #define WM8960_3D_3DDEPTH_SET(x) (((uint16_t)(x) << WM8960_3D_3DDEPTH_SHIFT) & WM8960_3D_3DDEPTH_MASK)
  686. #define WM8960_3D_3DDEPTH_GET(x) (((uint16_t)(x) & WM8960_3D_3DDEPTH_MASK) >> WM8960_3D_3DDEPTH_SHIFT)
  687. /*
  688. * 3DEN (RW)
  689. *
  690. * 3D Stereo Enhancement Enable
  691. * 0 = Disabled
  692. * 1 = Enabled
  693. */
  694. #define WM8960_3D_3DEN_MASK (0x1U)
  695. #define WM8960_3D_3DEN_SHIFT (0U)
  696. #define WM8960_3D_3DEN_SET(x) (((uint16_t)(x) << WM8960_3D_3DEN_SHIFT) & WM8960_3D_3DEN_MASK)
  697. #define WM8960_3D_3DEN_GET(x) (((uint16_t)(x) & WM8960_3D_3DEN_MASK) >> WM8960_3D_3DEN_SHIFT)
  698. /* Bitfield definition for register: ALC1 */
  699. /*
  700. * ALCSEL (RW)
  701. *
  702. * ALC Function Select
  703. * 00 = ALC off (PGA gain set by register)
  704. * 01 = Right channel only
  705. * 10 = Left channel only
  706. * 11 = Stereo (PGA registers unused) Note:
  707. * ensure that LINVOL and RINVOL settings
  708. * (reg. 0 and 1) are the same before entering this mode.
  709. */
  710. #define WM8960_ALC1_ALCSEL_MASK (0x180U)
  711. #define WM8960_ALC1_ALCSEL_SHIFT (7U)
  712. #define WM8960_ALC1_ALCSEL_SET(x) (((uint16_t)(x) << WM8960_ALC1_ALCSEL_SHIFT) & WM8960_ALC1_ALCSEL_MASK)
  713. #define WM8960_ALC1_ALCSEL_GET(x) (((uint16_t)(x) & WM8960_ALC1_ALCSEL_MASK) >> WM8960_ALC1_ALCSEL_SHIFT)
  714. /*
  715. * MAXGAIN (RW)
  716. *
  717. * Set Maximum Gain of PGA (During ALC
  718. * operation)
  719. * 111 : +30dB
  720. * 110 : +24dB
  721. * ….(-6dB steps)
  722. * 001 : -6dB
  723. * 000 : -12dB
  724. */
  725. #define WM8960_ALC1_MAXGAIN_MASK (0x70U)
  726. #define WM8960_ALC1_MAXGAIN_SHIFT (4U)
  727. #define WM8960_ALC1_MAXGAIN_SET(x) (((uint16_t)(x) << WM8960_ALC1_MAXGAIN_SHIFT) & WM8960_ALC1_MAXGAIN_MASK)
  728. #define WM8960_ALC1_MAXGAIN_GET(x) (((uint16_t)(x) & WM8960_ALC1_MAXGAIN_MASK) >> WM8960_ALC1_MAXGAIN_SHIFT)
  729. /*
  730. * ALCL (RW)
  731. *
  732. * ALC Target (Sets signal level at ADC input)
  733. * 0000 = -22.5dB FS
  734. * 0001 = -21.0dB FS
  735. * … (1.5dB steps)
  736. * 1101 = -3.0dB FS
  737. * 1110 = -1.5dB FS
  738. * 1111 = -1.5dB FS
  739. */
  740. #define WM8960_ALC1_ALCL_MASK (0xFU)
  741. #define WM8960_ALC1_ALCL_SHIFT (0U)
  742. #define WM8960_ALC1_ALCL_SET(x) (((uint16_t)(x) << WM8960_ALC1_ALCL_SHIFT) & WM8960_ALC1_ALCL_MASK)
  743. #define WM8960_ALC1_ALCL_GET(x) (((uint16_t)(x) & WM8960_ALC1_ALCL_MASK) >> WM8960_ALC1_ALCL_SHIFT)
  744. /* Bitfield definition for register: ALC2 */
  745. /*
  746. * MINGAIN (RW)
  747. *
  748. * Set Minimum Gain of PGA (During ALC
  749. * operation)
  750. * 000 = -17.25dB
  751. * 001 = -11.25dB
  752. * 010 = -5.25dB
  753. * 011 = +0.75dB
  754. * 100 = +6.75dB
  755. * 101 = +12.75dB
  756. * 110 = +18.75dB
  757. * 111 = +24.75dB
  758. */
  759. #define WM8960_ALC2_MINGAIN_MASK (0x70U)
  760. #define WM8960_ALC2_MINGAIN_SHIFT (4U)
  761. #define WM8960_ALC2_MINGAIN_SET(x) (((uint16_t)(x) << WM8960_ALC2_MINGAIN_SHIFT) & WM8960_ALC2_MINGAIN_MASK)
  762. #define WM8960_ALC2_MINGAIN_GET(x) (((uint16_t)(x) & WM8960_ALC2_MINGAIN_MASK) >> WM8960_ALC2_MINGAIN_SHIFT)
  763. /*
  764. * HLD (RW)
  765. *
  766. * ALC hold time before gain is increased.
  767. * 0000 = 0ms
  768. * 0001 = 2.67ms
  769. * 0010 = 5.33ms
  770. * … (time doubles with every step)
  771. * 1111 = 43.691s
  772. */
  773. #define WM8960_ALC2_HLD_MASK (0xFU)
  774. #define WM8960_ALC2_HLD_SHIFT (0U)
  775. #define WM8960_ALC2_HLD_SET(x) (((uint16_t)(x) << WM8960_ALC2_HLD_SHIFT) & WM8960_ALC2_HLD_MASK)
  776. #define WM8960_ALC2_HLD_GET(x) (((uint16_t)(x) & WM8960_ALC2_HLD_MASK) >> WM8960_ALC2_HLD_SHIFT)
  777. /* Bitfield definition for register: ALC3 */
  778. /*
  779. * ALCMODE (RW)
  780. *
  781. * Determines the ALC mode of operation:
  782. * 0 = ALC mode
  783. * 1 = Limiter mode
  784. */
  785. #define WM8960_ALC3_ALCMODE_MASK (0x100U)
  786. #define WM8960_ALC3_ALCMODE_SHIFT (8U)
  787. #define WM8960_ALC3_ALCMODE_SET(x) (((uint16_t)(x) << WM8960_ALC3_ALCMODE_SHIFT) & WM8960_ALC3_ALCMODE_MASK)
  788. #define WM8960_ALC3_ALCMODE_GET(x) (((uint16_t)(x) & WM8960_ALC3_ALCMODE_MASK) >> WM8960_ALC3_ALCMODE_SHIFT)
  789. /*
  790. * DCY (RW)
  791. *
  792. * ALC decay (gain ramp-up) time
  793. * 0000 = 24ms
  794. * 0001 = 48ms
  795. * 0010 = 96ms
  796. * … (time doubles with every step)
  797. * 1010 or higher = 24.58s
  798. */
  799. #define WM8960_ALC3_DCY_MASK (0xF0U)
  800. #define WM8960_ALC3_DCY_SHIFT (4U)
  801. #define WM8960_ALC3_DCY_SET(x) (((uint16_t)(x) << WM8960_ALC3_DCY_SHIFT) & WM8960_ALC3_DCY_MASK)
  802. #define WM8960_ALC3_DCY_GET(x) (((uint16_t)(x) & WM8960_ALC3_DCY_MASK) >> WM8960_ALC3_DCY_SHIFT)
  803. /*
  804. * ATK (RW)
  805. *
  806. * ALC attack (gain ramp-down) time
  807. * 0000 = 6ms
  808. * 0001 = 12ms
  809. * 0010 = 24ms
  810. * … (time doubles with every step)
  811. * 1010 or higher = 6.14s
  812. */
  813. #define WM8960_ALC3_ATK_MASK (0xFU)
  814. #define WM8960_ALC3_ATK_SHIFT (0U)
  815. #define WM8960_ALC3_ATK_SET(x) (((uint16_t)(x) << WM8960_ALC3_ATK_SHIFT) & WM8960_ALC3_ATK_MASK)
  816. #define WM8960_ALC3_ATK_GET(x) (((uint16_t)(x) & WM8960_ALC3_ATK_MASK) >> WM8960_ALC3_ATK_SHIFT)
  817. /* Bitfield definition for register: NOISEG */
  818. /*
  819. * NGTH (RW)
  820. *
  821. * Noise gate threshold
  822. * 00000 -76.5dBfs
  823. * 00001 -75dBfs
  824. * … 1.5 dB steps
  825. * 11110 -31.5dBfs
  826. * 11111 -30dBfs
  827. */
  828. #define WM8960_NOISEG_NGTH_MASK (0xF8U)
  829. #define WM8960_NOISEG_NGTH_SHIFT (3U)
  830. #define WM8960_NOISEG_NGTH_SET(x) (((uint16_t)(x) << WM8960_NOISEG_NGTH_SHIFT) & WM8960_NOISEG_NGTH_MASK)
  831. #define WM8960_NOISEG_NGTH_GET(x) (((uint16_t)(x) & WM8960_NOISEG_NGTH_MASK) >> WM8960_NOISEG_NGTH_SHIFT)
  832. /*
  833. * NGAT (RW)
  834. *
  835. * Noise gate function enable
  836. * 0 = disable
  837. * 1 = enable
  838. */
  839. #define WM8960_NOISEG_NGAT_MASK (0x1U)
  840. #define WM8960_NOISEG_NGAT_SHIFT (0U)
  841. #define WM8960_NOISEG_NGAT_SET(x) (((uint16_t)(x) << WM8960_NOISEG_NGAT_SHIFT) & WM8960_NOISEG_NGAT_MASK)
  842. #define WM8960_NOISEG_NGAT_GET(x) (((uint16_t)(x) & WM8960_NOISEG_NGAT_MASK) >> WM8960_NOISEG_NGAT_SHIFT)
  843. /* Bitfield definition for register: LADC */
  844. /*
  845. * ADCVU (RW)
  846. *
  847. * ADC Volume Update
  848. * Writing a 1 to this bit will cause left and right
  849. * ADC volumes to be updated (LADCVOL and
  850. * RADCVOL)
  851. */
  852. #define WM8960_LADC_ADCVU_MASK (0x100U)
  853. #define WM8960_LADC_ADCVU_SHIFT (8U)
  854. #define WM8960_LADC_ADCVU_SET(x) (((uint16_t)(x) << WM8960_LADC_ADCVU_SHIFT) & WM8960_LADC_ADCVU_MASK)
  855. #define WM8960_LADC_ADCVU_GET(x) (((uint16_t)(x) & WM8960_LADC_ADCVU_MASK) >> WM8960_LADC_ADCVU_SHIFT)
  856. /*
  857. * LADCVOL (RW)
  858. *
  859. * Left ADC Digital Volume Control
  860. * 0000 0000 = Digital Mute
  861. * 0000 0001 = -97dB
  862. * 0000 0010 = -96.5dB
  863. * ... 0.5dB steps up to
  864. * 1111 1111 = +30dB
  865. */
  866. #define WM8960_LADC_LADCVOL_MASK (0xFFU)
  867. #define WM8960_LADC_LADCVOL_SHIFT (0U)
  868. #define WM8960_LADC_LADCVOL_SET(x) (((uint16_t)(x) << WM8960_LADC_LADCVOL_SHIFT) & WM8960_LADC_LADCVOL_MASK)
  869. #define WM8960_LADC_LADCVOL_GET(x) (((uint16_t)(x) & WM8960_LADC_LADCVOL_MASK) >> WM8960_LADC_LADCVOL_SHIFT)
  870. /* Bitfield definition for register: RADC */
  871. /*
  872. * ADCVU (RW)
  873. *
  874. * ADC Volume Update
  875. * Writing a 1 to this bit will cause left and right
  876. * ADC volumes to be updated (LADCVOL and RADCVOL)
  877. */
  878. #define WM8960_RADC_ADCVU_MASK (0x100U)
  879. #define WM8960_RADC_ADCVU_SHIFT (8U)
  880. #define WM8960_RADC_ADCVU_SET(x) (((uint16_t)(x) << WM8960_RADC_ADCVU_SHIFT) & WM8960_RADC_ADCVU_MASK)
  881. #define WM8960_RADC_ADCVU_GET(x) (((uint16_t)(x) & WM8960_RADC_ADCVU_MASK) >> WM8960_RADC_ADCVU_SHIFT)
  882. /*
  883. * RADCVOL (RW)
  884. *
  885. * Right ADC Digital Volume Control
  886. * 0000 0000 = Digital Mute
  887. * 0000 0001 = -97dB
  888. * 0000 0010 = -96.5dB
  889. * ... 0.5dB steps up to
  890. * 1111 1111 = +30dB
  891. */
  892. #define WM8960_RADC_RADCVOL_MASK (0xFFU)
  893. #define WM8960_RADC_RADCVOL_SHIFT (0U)
  894. #define WM8960_RADC_RADCVOL_SET(x) (((uint16_t)(x) << WM8960_RADC_RADCVOL_SHIFT) & WM8960_RADC_RADCVOL_MASK)
  895. #define WM8960_RADC_RADCVOL_GET(x) (((uint16_t)(x) & WM8960_RADC_RADCVOL_MASK) >> WM8960_RADC_RADCVOL_SHIFT)
  896. /* Bitfield definition for register: ADDCTL1 */
  897. /*
  898. * TSDEN (RW)
  899. *
  900. * Thermal Shutdown Enable
  901. * 0 = Thermal shutdown disabled
  902. * 1 = Thermal shutdown enabled
  903. * (TSENSEN must be enabled for this function to work)
  904. */
  905. #define WM8960_ADDCTL1_TSDEN_MASK (0x100U)
  906. #define WM8960_ADDCTL1_TSDEN_SHIFT (8U)
  907. #define WM8960_ADDCTL1_TSDEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_TSDEN_SHIFT) & WM8960_ADDCTL1_TSDEN_MASK)
  908. #define WM8960_ADDCTL1_TSDEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_TSDEN_MASK) >> WM8960_ADDCTL1_TSDEN_SHIFT)
  909. /*
  910. * VSEL (RW)
  911. *
  912. * Analogue Bias Optimisation
  913. * 00 = Reserved
  914. * 01 = Increased bias current optimized for
  915. * AVDD=2.7V
  916. * 1X = Lowest bias current, optimized for
  917. * AVDD=3.3V
  918. */
  919. #define WM8960_ADDCTL1_VSEL_MASK (0xC0U)
  920. #define WM8960_ADDCTL1_VSEL_SHIFT (6U)
  921. #define WM8960_ADDCTL1_VSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_VSEL_SHIFT) & WM8960_ADDCTL1_VSEL_MASK)
  922. #define WM8960_ADDCTL1_VSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_VSEL_MASK) >> WM8960_ADDCTL1_VSEL_SHIFT)
  923. /*
  924. * DMONOMIX (RW)
  925. *
  926. * DAC Mono Mix
  927. * 0 = Stereo
  928. * 1 = Mono (Mono MIX output on enabled DACs
  929. */
  930. #define WM8960_ADDCTL1_DMONOMIX_MASK (0x10U)
  931. #define WM8960_ADDCTL1_DMONOMIX_SHIFT (4U)
  932. #define WM8960_ADDCTL1_DMONOMIX_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_DMONOMIX_SHIFT) & WM8960_ADDCTL1_DMONOMIX_MASK)
  933. #define WM8960_ADDCTL1_DMONOMIX_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_DMONOMIX_MASK) >> WM8960_ADDCTL1_DMONOMIX_SHIFT)
  934. /*
  935. * DATSEL (RW)
  936. *
  937. * ADC Data Output Select
  938. * 00: left data = left ADC; right data =right ADC
  939. * 01: left data = left ADC; right data = left ADC
  940. * 10: left data = right ADC; right data =right ADC
  941. * 11: left data = right ADC; right data = left ADC
  942. */
  943. #define WM8960_ADDCTL1_DATSEL_MASK (0xCU)
  944. #define WM8960_ADDCTL1_DATSEL_SHIFT (2U)
  945. #define WM8960_ADDCTL1_DATSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_DATSEL_SHIFT) & WM8960_ADDCTL1_DATSEL_MASK)
  946. #define WM8960_ADDCTL1_DATSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_DATSEL_MASK) >> WM8960_ADDCTL1_DATSEL_SHIFT)
  947. /*
  948. * TOCLKSEL (RW)
  949. *
  950. * Slow Clock Select (Used for volume update
  951. * timeouts and for jack detect debounce)
  952. * 0 = SYSCLK / 221 (Slower Response)
  953. * 1 = SYSCLK / 219 (Faster Response)
  954. */
  955. #define WM8960_ADDCTL1_TOCLKSEL_MASK (0x2U)
  956. #define WM8960_ADDCTL1_TOCLKSEL_SHIFT (1U)
  957. #define WM8960_ADDCTL1_TOCLKSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_TOCLKSEL_SHIFT) & WM8960_ADDCTL1_TOCLKSEL_MASK)
  958. #define WM8960_ADDCTL1_TOCLKSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_TOCLKSEL_MASK) >> WM8960_ADDCTL1_TOCLKSEL_SHIFT)
  959. /*
  960. * TOEN (RW)
  961. *
  962. * Enables Slow Clock for Volume Update Timeout
  963. * and Jack Detect Debounce
  964. * 0 = Slow clock disabled
  965. * 1 = Slow clock enabled
  966. */
  967. #define WM8960_ADDCTL1_TOEN_MASK (0x1U)
  968. #define WM8960_ADDCTL1_TOEN_SHIFT (0U)
  969. #define WM8960_ADDCTL1_TOEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_TOEN_SHIFT) & WM8960_ADDCTL1_TOEN_MASK)
  970. #define WM8960_ADDCTL1_TOEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_TOEN_MASK) >> WM8960_ADDCTL1_TOEN_SHIFT)
  971. /* Bitfield definition for register: ADDCTL2 */
  972. /*
  973. * HPSWEN (RW)
  974. *
  975. * Headphone Switch Enable
  976. * 0 = Headphone switch disabled
  977. * 1 = Headphone switch enabled
  978. */
  979. #define WM8960_ADDCTL2_HPSWEN_MASK (0x40U)
  980. #define WM8960_ADDCTL2_HPSWEN_SHIFT (6U)
  981. #define WM8960_ADDCTL2_HPSWEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_HPSWEN_SHIFT) & WM8960_ADDCTL2_HPSWEN_MASK)
  982. #define WM8960_ADDCTL2_HPSWEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_HPSWEN_MASK) >> WM8960_ADDCTL2_HPSWEN_SHIFT)
  983. /*
  984. * HPSWPOL (RW)
  985. *
  986. * Headphone Switch Polarity
  987. * 0 = HPDETECT high = headphone
  988. * 1 = HPDETECT high = speaker
  989. */
  990. #define WM8960_ADDCTL2_HPSWPOL_MASK (0x20U)
  991. #define WM8960_ADDCTL2_HPSWPOL_SHIFT (5U)
  992. #define WM8960_ADDCTL2_HPSWPOL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_HPSWPOL_SHIFT) & WM8960_ADDCTL2_HPSWPOL_MASK)
  993. #define WM8960_ADDCTL2_HPSWPOL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_HPSWPOL_MASK) >> WM8960_ADDCTL2_HPSWPOL_SHIFT)
  994. /*
  995. * TRIS (RW)
  996. *
  997. * Tristates ADCDAT and switches ADCLRC,
  998. * DACLRC and BCLK to inputs.
  999. * 0 = ADCDAT is an output; ADCLRC, DACLRC
  1000. * and BCLK are inputs (slave mode) or outputs
  1001. * (master mode)
  1002. * 1 = ADCDAT is tristated; DACLRC and BCLK
  1003. * are inputs; ADCLRC is an input (when not
  1004. * configured as a GPIO)
  1005. */
  1006. #define WM8960_ADDCTL2_TRIS_MASK (0x8U)
  1007. #define WM8960_ADDCTL2_TRIS_SHIFT (3U)
  1008. #define WM8960_ADDCTL2_TRIS_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_TRIS_SHIFT) & WM8960_ADDCTL2_TRIS_MASK)
  1009. #define WM8960_ADDCTL2_TRIS_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_TRIS_MASK) >> WM8960_ADDCTL2_TRIS_SHIFT)
  1010. /*
  1011. * LRCM (RW)
  1012. *
  1013. * Selects disable mode for ADCLRC and DACLRC
  1014. * (Master mode)
  1015. * 0 = ADCLRC disabled when ADC (Left and
  1016. * Right) disabled; DACLRC disabled when
  1017. * DAC (Left and Right) disabled.
  1018. * 1 = ADCLRC and DACLRC disabled only when
  1019. * ADC (Left and Right) and DAC (Left and Right)
  1020. * are disabled.
  1021. */
  1022. #define WM8960_ADDCTL2_LRCM_MASK (0x4U)
  1023. #define WM8960_ADDCTL2_LRCM_SHIFT (2U)
  1024. #define WM8960_ADDCTL2_LRCM_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_LRCM_SHIFT) & WM8960_ADDCTL2_LRCM_MASK)
  1025. #define WM8960_ADDCTL2_LRCM_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_LRCM_MASK) >> WM8960_ADDCTL2_LRCM_SHIFT)
  1026. /* Bitfield definition for register: POWER1 */
  1027. /*
  1028. * VMIDSEL (RW)
  1029. *
  1030. * Vmid Divider Enable and Select
  1031. * 00 = Vmid disabled (for OFF mode)
  1032. * 01 = 2 x 50k divider enabled (for playback /
  1033. * record)
  1034. * 10 = 2 x 250k divider enabled (for low-power
  1035. * standby)
  1036. * 11 = 2 x 5k divider enabled (for fast start-up)
  1037. */
  1038. #define WM8960_POWER1_VMIDSEL_MASK (0x180U)
  1039. #define WM8960_POWER1_VMIDSEL_SHIFT (7U)
  1040. #define WM8960_POWER1_VMIDSEL_SET(x) (((uint16_t)(x) << WM8960_POWER1_VMIDSEL_SHIFT) & WM8960_POWER1_VMIDSEL_MASK)
  1041. #define WM8960_POWER1_VMIDSEL_GET(x) (((uint16_t)(x) & WM8960_POWER1_VMIDSEL_MASK) >> WM8960_POWER1_VMIDSEL_SHIFT)
  1042. /*
  1043. * VREF (RW)
  1044. *
  1045. * VREF (necessary for all other functions)
  1046. * 0 = Power down
  1047. * 1 = Power up
  1048. */
  1049. #define WM8960_POWER1_VREF_MASK (0x40U)
  1050. #define WM8960_POWER1_VREF_SHIFT (6U)
  1051. #define WM8960_POWER1_VREF_SET(x) (((uint16_t)(x) << WM8960_POWER1_VREF_SHIFT) & WM8960_POWER1_VREF_MASK)
  1052. #define WM8960_POWER1_VREF_GET(x) (((uint16_t)(x) & WM8960_POWER1_VREF_MASK) >> WM8960_POWER1_VREF_SHIFT)
  1053. /*
  1054. * AINL (RW)
  1055. *
  1056. * Analogue in PGA Left
  1057. * 0 = Power down
  1058. * 1 = Power up
  1059. */
  1060. #define WM8960_POWER1_AINL_MASK (0x20U)
  1061. #define WM8960_POWER1_AINL_SHIFT (5U)
  1062. #define WM8960_POWER1_AINL_SET(x) (((uint16_t)(x) << WM8960_POWER1_AINL_SHIFT) & WM8960_POWER1_AINL_MASK)
  1063. #define WM8960_POWER1_AINL_GET(x) (((uint16_t)(x) & WM8960_POWER1_AINL_MASK) >> WM8960_POWER1_AINL_SHIFT)
  1064. /*
  1065. * AINR (RW)
  1066. *
  1067. * Analogue in PGA Right
  1068. * 0 = Power down
  1069. * 1 = Power up
  1070. */
  1071. #define WM8960_POWER1_AINR_MASK (0x10U)
  1072. #define WM8960_POWER1_AINR_SHIFT (4U)
  1073. #define WM8960_POWER1_AINR_SET(x) (((uint16_t)(x) << WM8960_POWER1_AINR_SHIFT) & WM8960_POWER1_AINR_MASK)
  1074. #define WM8960_POWER1_AINR_GET(x) (((uint16_t)(x) & WM8960_POWER1_AINR_MASK) >> WM8960_POWER1_AINR_SHIFT)
  1075. /*
  1076. * ADCL (RW)
  1077. *
  1078. * ADC Left
  1079. * 0 = Power down
  1080. * 1 = Power up
  1081. */
  1082. #define WM8960_POWER1_ADCL_MASK (0x8U)
  1083. #define WM8960_POWER1_ADCL_SHIFT (3U)
  1084. #define WM8960_POWER1_ADCL_SET(x) (((uint16_t)(x) << WM8960_POWER1_ADCL_SHIFT) & WM8960_POWER1_ADCL_MASK)
  1085. #define WM8960_POWER1_ADCL_GET(x) (((uint16_t)(x) & WM8960_POWER1_ADCL_MASK) >> WM8960_POWER1_ADCL_SHIFT)
  1086. /*
  1087. * ADCR (RW)
  1088. *
  1089. * ADC Right
  1090. * 0 = Power down
  1091. * 1 = Power up
  1092. */
  1093. #define WM8960_POWER1_ADCR_MASK (0x4U)
  1094. #define WM8960_POWER1_ADCR_SHIFT (2U)
  1095. #define WM8960_POWER1_ADCR_SET(x) (((uint16_t)(x) << WM8960_POWER1_ADCR_SHIFT) & WM8960_POWER1_ADCR_MASK)
  1096. #define WM8960_POWER1_ADCR_GET(x) (((uint16_t)(x) & WM8960_POWER1_ADCR_MASK) >> WM8960_POWER1_ADCR_SHIFT)
  1097. /*
  1098. * MICB (RW)
  1099. *
  1100. * MICBIAS
  1101. * 0 = Power down
  1102. * 1 = Power up
  1103. */
  1104. #define WM8960_POWER1_MICB_MASK (0x2U)
  1105. #define WM8960_POWER1_MICB_SHIFT (1U)
  1106. #define WM8960_POWER1_MICB_SET(x) (((uint16_t)(x) << WM8960_POWER1_MICB_SHIFT) & WM8960_POWER1_MICB_MASK)
  1107. #define WM8960_POWER1_MICB_GET(x) (((uint16_t)(x) & WM8960_POWER1_MICB_MASK) >> WM8960_POWER1_MICB_SHIFT)
  1108. /*
  1109. * DIGENB (RW)
  1110. *
  1111. * Master Clock Disable
  1112. * 0 = Master clock enabled
  1113. * 1 = Master clock disabled
  1114. */
  1115. #define WM8960_POWER1_DIGENB_MASK (0x1U)
  1116. #define WM8960_POWER1_DIGENB_SHIFT (0U)
  1117. #define WM8960_POWER1_DIGENB_SET(x) (((uint16_t)(x) << WM8960_POWER1_DIGENB_SHIFT) & WM8960_POWER1_DIGENB_MASK)
  1118. #define WM8960_POWER1_DIGENB_GET(x) (((uint16_t)(x) & WM8960_POWER1_DIGENB_MASK) >> WM8960_POWER1_DIGENB_SHIFT)
  1119. /* Bitfield definition for register: POWER2 */
  1120. /*
  1121. * DACL (RW)
  1122. *
  1123. * DAC Left
  1124. * 0 = Power down
  1125. * 1 = Power up
  1126. */
  1127. #define WM8960_POWER2_DACL_MASK (0x100U)
  1128. #define WM8960_POWER2_DACL_SHIFT (8U)
  1129. #define WM8960_POWER2_DACL_SET(x) (((uint16_t)(x) << WM8960_POWER2_DACL_SHIFT) & WM8960_POWER2_DACL_MASK)
  1130. #define WM8960_POWER2_DACL_GET(x) (((uint16_t)(x) & WM8960_POWER2_DACL_MASK) >> WM8960_POWER2_DACL_SHIFT)
  1131. /*
  1132. * DACR (RW)
  1133. *
  1134. * DAC Right
  1135. * 0 = Power down
  1136. * 1 = Power up
  1137. */
  1138. #define WM8960_POWER2_DACR_MASK (0x80U)
  1139. #define WM8960_POWER2_DACR_SHIFT (7U)
  1140. #define WM8960_POWER2_DACR_SET(x) (((uint16_t)(x) << WM8960_POWER2_DACR_SHIFT) & WM8960_POWER2_DACR_MASK)
  1141. #define WM8960_POWER2_DACR_GET(x) (((uint16_t)(x) & WM8960_POWER2_DACR_MASK) >> WM8960_POWER2_DACR_SHIFT)
  1142. /*
  1143. * LOUT1 (RW)
  1144. *
  1145. * LOUT1 Output Buffer
  1146. * 0 = Power down
  1147. * 1 = Power up
  1148. */
  1149. #define WM8960_POWER2_LOUT1_MASK (0x40U)
  1150. #define WM8960_POWER2_LOUT1_SHIFT (6U)
  1151. #define WM8960_POWER2_LOUT1_SET(x) (((uint16_t)(x) << WM8960_POWER2_LOUT1_SHIFT) & WM8960_POWER2_LOUT1_MASK)
  1152. #define WM8960_POWER2_LOUT1_GET(x) (((uint16_t)(x) & WM8960_POWER2_LOUT1_MASK) >> WM8960_POWER2_LOUT1_SHIFT)
  1153. /*
  1154. * ROUT1 (RW)
  1155. *
  1156. * ROUT1 Output Buffer
  1157. * 0 = Power down
  1158. * 1 = Power up
  1159. */
  1160. #define WM8960_POWER2_ROUT1_MASK (0x20U)
  1161. #define WM8960_POWER2_ROUT1_SHIFT (5U)
  1162. #define WM8960_POWER2_ROUT1_SET(x) (((uint16_t)(x) << WM8960_POWER2_ROUT1_SHIFT) & WM8960_POWER2_ROUT1_MASK)
  1163. #define WM8960_POWER2_ROUT1_GET(x) (((uint16_t)(x) & WM8960_POWER2_ROUT1_MASK) >> WM8960_POWER2_ROUT1_SHIFT)
  1164. /*
  1165. * SPKL (RW)
  1166. *
  1167. * SPK_LP/SPK_LN Output Buffers
  1168. * 0 = Power down
  1169. * 1 = Power up
  1170. */
  1171. #define WM8960_POWER2_SPKL_MASK (0x10U)
  1172. #define WM8960_POWER2_SPKL_SHIFT (4U)
  1173. #define WM8960_POWER2_SPKL_SET(x) (((uint16_t)(x) << WM8960_POWER2_SPKL_SHIFT) & WM8960_POWER2_SPKL_MASK)
  1174. #define WM8960_POWER2_SPKL_GET(x) (((uint16_t)(x) & WM8960_POWER2_SPKL_MASK) >> WM8960_POWER2_SPKL_SHIFT)
  1175. /*
  1176. * SPKR (RW)
  1177. *
  1178. * SPK_RP/SPK_RN Output Buffers
  1179. * 0 = Power down
  1180. * 1 = Power up
  1181. */
  1182. #define WM8960_POWER2_SPKR_MASK (0x8U)
  1183. #define WM8960_POWER2_SPKR_SHIFT (3U)
  1184. #define WM8960_POWER2_SPKR_SET(x) (((uint16_t)(x) << WM8960_POWER2_SPKR_SHIFT) & WM8960_POWER2_SPKR_MASK)
  1185. #define WM8960_POWER2_SPKR_GET(x) (((uint16_t)(x) & WM8960_POWER2_SPKR_MASK) >> WM8960_POWER2_SPKR_SHIFT)
  1186. /*
  1187. * OUT3 (RW)
  1188. *
  1189. * OUT3 Output Buffer
  1190. * 0 = Power down
  1191. * 1 = Power up
  1192. */
  1193. #define WM8960_POWER2_OUT3_MASK (0x2U)
  1194. #define WM8960_POWER2_OUT3_SHIFT (1U)
  1195. #define WM8960_POWER2_OUT3_SET(x) (((uint16_t)(x) << WM8960_POWER2_OUT3_SHIFT) & WM8960_POWER2_OUT3_MASK)
  1196. #define WM8960_POWER2_OUT3_GET(x) (((uint16_t)(x) & WM8960_POWER2_OUT3_MASK) >> WM8960_POWER2_OUT3_SHIFT)
  1197. /*
  1198. * PLL_EN (RW)
  1199. *
  1200. * PLL Enable
  1201. * 0 = Power down
  1202. * 1 = Power up
  1203. */
  1204. #define WM8960_POWER2_PLL_EN_MASK (0x1U)
  1205. #define WM8960_POWER2_PLL_EN_SHIFT (0U)
  1206. #define WM8960_POWER2_PLL_EN_SET(x) (((uint16_t)(x) << WM8960_POWER2_PLL_EN_SHIFT) & WM8960_POWER2_PLL_EN_MASK)
  1207. #define WM8960_POWER2_PLL_EN_GET(x) (((uint16_t)(x) & WM8960_POWER2_PLL_EN_MASK) >> WM8960_POWER2_PLL_EN_SHIFT)
  1208. /* Bitfield definition for register: ADDCTL3 */
  1209. /*
  1210. * VROI (RW)
  1211. *
  1212. * VREF to Analogue Output Resistance (Disabled
  1213. * Outputs)
  1214. * 0 = 500 VMID to output
  1215. * 1 = 20k VMID to output
  1216. */
  1217. #define WM8960_ADDCTL3_VROI_MASK (0x40U)
  1218. #define WM8960_ADDCTL3_VROI_SHIFT (6U)
  1219. #define WM8960_ADDCTL3_VROI_SET(x) (((uint16_t)(x) << WM8960_ADDCTL3_VROI_SHIFT) & WM8960_ADDCTL3_VROI_MASK)
  1220. #define WM8960_ADDCTL3_VROI_GET(x) (((uint16_t)(x) & WM8960_ADDCTL3_VROI_MASK) >> WM8960_ADDCTL3_VROI_SHIFT)
  1221. /*
  1222. * OUT3CAP (RW)
  1223. *
  1224. * Capless Mode Headphone Switch Enable
  1225. * 0 = OUT3 unaffected by jack detect events
  1226. * 1 = OUT3 enabled and disabled together with
  1227. * HP_L and HP_R in response to jack detect
  1228. * events
  1229. */
  1230. #define WM8960_ADDCTL3_OUT3CAP_MASK (0x8U)
  1231. #define WM8960_ADDCTL3_OUT3CAP_SHIFT (3U)
  1232. #define WM8960_ADDCTL3_OUT3CAP_SET(x) (((uint16_t)(x) << WM8960_ADDCTL3_OUT3CAP_SHIFT) & WM8960_ADDCTL3_OUT3CAP_MASK)
  1233. #define WM8960_ADDCTL3_OUT3CAP_GET(x) (((uint16_t)(x) & WM8960_ADDCTL3_OUT3CAP_MASK) >> WM8960_ADDCTL3_OUT3CAP_SHIFT)
  1234. /*
  1235. * ADC_ALC_SR (RW)
  1236. *
  1237. * ALC Sample Rate
  1238. * 000 = 44.1k / 48k
  1239. * 001 = 32k
  1240. * 010 = 22.05k / 24k
  1241. * 011 = 16k
  1242. * 100 = 11.25k / 12k
  1243. * 101 = 8k
  1244. * 110 and 111 = Reserved
  1245. */
  1246. #define WM8960_ADDCTL3_ADC_ALC_SR_MASK (0x7U)
  1247. #define WM8960_ADDCTL3_ADC_ALC_SR_SHIFT (0U)
  1248. #define WM8960_ADDCTL3_ADC_ALC_SR_SET(x) (((uint16_t)(x) << WM8960_ADDCTL3_ADC_ALC_SR_SHIFT) & WM8960_ADDCTL3_ADC_ALC_SR_MASK)
  1249. #define WM8960_ADDCTL3_ADC_ALC_SR_GET(x) (((uint16_t)(x) & WM8960_ADDCTL3_ADC_ALC_SR_MASK) >> WM8960_ADDCTL3_ADC_ALC_SR_SHIFT)
  1250. /* Bitfield definition for register: APOP1 */
  1251. /*
  1252. * POBCTRL (RW)
  1253. *
  1254. * Selects the bias current source for output
  1255. * amplifiers and VMID buffer
  1256. * 0 = VMID / R bias
  1257. * 1 = VGS / R bias
  1258. */
  1259. #define WM8960_APOP1_POBCTRL_MASK (0x80U)
  1260. #define WM8960_APOP1_POBCTRL_SHIFT (7U)
  1261. #define WM8960_APOP1_POBCTRL_SET(x) (((uint16_t)(x) << WM8960_APOP1_POBCTRL_SHIFT) & WM8960_APOP1_POBCTRL_MASK)
  1262. #define WM8960_APOP1_POBCTRL_GET(x) (((uint16_t)(x) & WM8960_APOP1_POBCTRL_MASK) >> WM8960_APOP1_POBCTRL_SHIFT)
  1263. /*
  1264. * BUFDCOPEN (RW)
  1265. *
  1266. * Enables the VGS / R current generator
  1267. * 0 = Disabled
  1268. * 1 = Enabled
  1269. */
  1270. #define WM8960_APOP1_BUFDCOPEN_MASK (0x10U)
  1271. #define WM8960_APOP1_BUFDCOPEN_SHIFT (4U)
  1272. #define WM8960_APOP1_BUFDCOPEN_SET(x) (((uint16_t)(x) << WM8960_APOP1_BUFDCOPEN_SHIFT) & WM8960_APOP1_BUFDCOPEN_MASK)
  1273. #define WM8960_APOP1_BUFDCOPEN_GET(x) (((uint16_t)(x) & WM8960_APOP1_BUFDCOPEN_MASK) >> WM8960_APOP1_BUFDCOPEN_SHIFT)
  1274. /*
  1275. * BUFIOEN (RW)
  1276. *
  1277. * Enables the VGS / R current generator and the
  1278. * analogue input and output bias
  1279. * 0 = Disabled
  1280. * 1 = Enabled
  1281. */
  1282. #define WM8960_APOP1_BUFIOEN_MASK (0x8U)
  1283. #define WM8960_APOP1_BUFIOEN_SHIFT (3U)
  1284. #define WM8960_APOP1_BUFIOEN_SET(x) (((uint16_t)(x) << WM8960_APOP1_BUFIOEN_SHIFT) & WM8960_APOP1_BUFIOEN_MASK)
  1285. #define WM8960_APOP1_BUFIOEN_GET(x) (((uint16_t)(x) & WM8960_APOP1_BUFIOEN_MASK) >> WM8960_APOP1_BUFIOEN_SHIFT)
  1286. /*
  1287. * SOFT_ST (RW)
  1288. *
  1289. * Enables VMID soft start
  1290. * 0 = Disabled
  1291. * 1 = Enabled
  1292. */
  1293. #define WM8960_APOP1_SOFT_ST_MASK (0x4U)
  1294. #define WM8960_APOP1_SOFT_ST_SHIFT (2U)
  1295. #define WM8960_APOP1_SOFT_ST_SET(x) (((uint16_t)(x) << WM8960_APOP1_SOFT_ST_SHIFT) & WM8960_APOP1_SOFT_ST_MASK)
  1296. #define WM8960_APOP1_SOFT_ST_GET(x) (((uint16_t)(x) & WM8960_APOP1_SOFT_ST_MASK) >> WM8960_APOP1_SOFT_ST_SHIFT)
  1297. /*
  1298. * HPSTBY (RW)
  1299. *
  1300. * Headphone Amplifier Standby
  1301. * 0 = Standby mode disabled (Normal operation)
  1302. * 1 = Standby mode enabled
  1303. */
  1304. #define WM8960_APOP1_HPSTBY_MASK (0x1U)
  1305. #define WM8960_APOP1_HPSTBY_SHIFT (0U)
  1306. #define WM8960_APOP1_HPSTBY_SET(x) (((uint16_t)(x) << WM8960_APOP1_HPSTBY_SHIFT) & WM8960_APOP1_HPSTBY_MASK)
  1307. #define WM8960_APOP1_HPSTBY_GET(x) (((uint16_t)(x) & WM8960_APOP1_HPSTBY_MASK) >> WM8960_APOP1_HPSTBY_SHIFT)
  1308. /* Bitfield definition for register: APOP2 */
  1309. /*
  1310. * DISOP (RW)
  1311. *
  1312. * Discharges the DC-blocking headphone
  1313. * capacitors on HP_L and HP_R
  1314. * 0 = Disabled
  1315. * 1 = Enabled
  1316. */
  1317. #define WM8960_APOP2_DISOP_MASK (0x40U)
  1318. #define WM8960_APOP2_DISOP_SHIFT (6U)
  1319. #define WM8960_APOP2_DISOP_SET(x) (((uint16_t)(x) << WM8960_APOP2_DISOP_SHIFT) & WM8960_APOP2_DISOP_MASK)
  1320. #define WM8960_APOP2_DISOP_GET(x) (((uint16_t)(x) & WM8960_APOP2_DISOP_MASK) >> WM8960_APOP2_DISOP_SHIFT)
  1321. /*
  1322. * DRES (RW)
  1323. *
  1324. * DRES determines the value of the resistors used
  1325. * to discharge the DC-blocking headphone
  1326. * capacitors when DISOP=1
  1327. * DRES[1:0] Resistance (Ohms)
  1328. * 0 0 400
  1329. * 0 1 200
  1330. * 1 0 600
  1331. * 1 1 150
  1332. */
  1333. #define WM8960_APOP2_DRES_MASK (0x30U)
  1334. #define WM8960_APOP2_DRES_SHIFT (4U)
  1335. #define WM8960_APOP2_DRES_SET(x) (((uint16_t)(x) << WM8960_APOP2_DRES_SHIFT) & WM8960_APOP2_DRES_MASK)
  1336. #define WM8960_APOP2_DRES_GET(x) (((uint16_t)(x) & WM8960_APOP2_DRES_MASK) >> WM8960_APOP2_DRES_SHIFT)
  1337. /* Bitfield definition for register: LINPATH */
  1338. /*
  1339. * LMN1 (RW)
  1340. *
  1341. * Connect LINPUT1 to inverting input of Left Input
  1342. * PGA
  1343. * 0 = LINPUT1 not connected to PGA
  1344. * 1 = LINPUT1 connected to PGA
  1345. */
  1346. #define WM8960_LINPATH_LMN1_MASK (0x100U)
  1347. #define WM8960_LINPATH_LMN1_SHIFT (8U)
  1348. #define WM8960_LINPATH_LMN1_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMN1_SHIFT) & WM8960_LINPATH_LMN1_MASK)
  1349. #define WM8960_LINPATH_LMN1_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMN1_MASK) >> WM8960_LINPATH_LMN1_SHIFT)
  1350. /*
  1351. * LMP3 (RW)
  1352. *
  1353. * Connect LINPUT3 to non-inverting input of Left
  1354. * Input PGA
  1355. * 0 = LINPUT3 not connected to PGA
  1356. * 1 = LINPUT3 connected to PGA (Constant input
  1357. * impedance)
  1358. */
  1359. #define WM8960_LINPATH_LMP3_MASK (0x80U)
  1360. #define WM8960_LINPATH_LMP3_SHIFT (7U)
  1361. #define WM8960_LINPATH_LMP3_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMP3_SHIFT) & WM8960_LINPATH_LMP3_MASK)
  1362. #define WM8960_LINPATH_LMP3_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMP3_MASK) >> WM8960_LINPATH_LMP3_SHIFT)
  1363. /*
  1364. * LMP2 (RW)
  1365. *
  1366. * Connect LINPUT2 to non-inverting input of Left
  1367. * Input PGA
  1368. * 0 = LINPUT2 not connected to PGA
  1369. * 1 = LINPUT2 connected to PGA (Constant input impedance)
  1370. */
  1371. #define WM8960_LINPATH_LMP2_MASK (0x40U)
  1372. #define WM8960_LINPATH_LMP2_SHIFT (6U)
  1373. #define WM8960_LINPATH_LMP2_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMP2_SHIFT) & WM8960_LINPATH_LMP2_MASK)
  1374. #define WM8960_LINPATH_LMP2_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMP2_MASK) >> WM8960_LINPATH_LMP2_SHIFT)
  1375. /*
  1376. * LMICBOOST (RW)
  1377. *
  1378. * Left Channel Input PGA Boost Gain
  1379. * 00 = +0dB
  1380. * 01 = +13dB
  1381. * 10 = +20dB
  1382. * 11 = +29dB
  1383. */
  1384. #define WM8960_LINPATH_LMICBOOST_MASK (0x30U)
  1385. #define WM8960_LINPATH_LMICBOOST_SHIFT (4U)
  1386. #define WM8960_LINPATH_LMICBOOST_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMICBOOST_SHIFT) & WM8960_LINPATH_LMICBOOST_MASK)
  1387. #define WM8960_LINPATH_LMICBOOST_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMICBOOST_MASK) >> WM8960_LINPATH_LMICBOOST_SHIFT)
  1388. /*
  1389. * LMIC2B (RW)
  1390. *
  1391. * Connect Left Input PGA to Left Input Boost Mixer
  1392. * 0 = Not connected
  1393. * 1 = Connected
  1394. */
  1395. #define WM8960_LINPATH_LMIC2B_MASK (0x8U)
  1396. #define WM8960_LINPATH_LMIC2B_SHIFT (3U)
  1397. #define WM8960_LINPATH_LMIC2B_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMIC2B_SHIFT) & WM8960_LINPATH_LMIC2B_MASK)
  1398. #define WM8960_LINPATH_LMIC2B_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMIC2B_MASK) >> WM8960_LINPATH_LMIC2B_SHIFT)
  1399. /* Bitfield definition for register: RINPATH */
  1400. /*
  1401. * RMN1 (RW)
  1402. *
  1403. * Connect RINPUT1 to inverting input of Right
  1404. * Input PGA
  1405. * 0 = RINPUT1 not connected to PGA
  1406. * 1 = RINPUT1 connected to PGA
  1407. */
  1408. #define WM8960_RINPATH_RMN1_MASK (0x100U)
  1409. #define WM8960_RINPATH_RMN1_SHIFT (8U)
  1410. #define WM8960_RINPATH_RMN1_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMN1_SHIFT) & WM8960_RINPATH_RMN1_MASK)
  1411. #define WM8960_RINPATH_RMN1_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMN1_MASK) >> WM8960_RINPATH_RMN1_SHIFT)
  1412. /*
  1413. * RMP3 (RW)
  1414. *
  1415. * Connect RINPUT3 to non-inverting input of Right
  1416. * Input PGA
  1417. * 0 = RINPUT3 not connected to PGA
  1418. * 1 = RINPUT3 connected to PGA (Constant input impedance)
  1419. */
  1420. #define WM8960_RINPATH_RMP3_MASK (0x80U)
  1421. #define WM8960_RINPATH_RMP3_SHIFT (7U)
  1422. #define WM8960_RINPATH_RMP3_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMP3_SHIFT) & WM8960_RINPATH_RMP3_MASK)
  1423. #define WM8960_RINPATH_RMP3_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMP3_MASK) >> WM8960_RINPATH_RMP3_SHIFT)
  1424. /*
  1425. * RMP2 (RW)
  1426. *
  1427. * Connect RINPUT2 to non-inverting input of Right
  1428. * Input PGA
  1429. * 0 = RINPUT2 not connected to PGA
  1430. * 1 = RINPUT2 connected to PGA (Constant input
  1431. * impedance)
  1432. */
  1433. #define WM8960_RINPATH_RMP2_MASK (0x40U)
  1434. #define WM8960_RINPATH_RMP2_SHIFT (6U)
  1435. #define WM8960_RINPATH_RMP2_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMP2_SHIFT) & WM8960_RINPATH_RMP2_MASK)
  1436. #define WM8960_RINPATH_RMP2_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMP2_MASK) >> WM8960_RINPATH_RMP2_SHIFT)
  1437. /*
  1438. * RMICBOOST (RW)
  1439. *
  1440. * Right Channel Input PGA Boost Gain
  1441. * 00 = +0dB
  1442. * 01 = +13dB
  1443. * 10 = +20dB
  1444. * 11 = +29dB
  1445. */
  1446. #define WM8960_RINPATH_RMICBOOST_MASK (0x30U)
  1447. #define WM8960_RINPATH_RMICBOOST_SHIFT (4U)
  1448. #define WM8960_RINPATH_RMICBOOST_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMICBOOST_SHIFT) & WM8960_RINPATH_RMICBOOST_MASK)
  1449. #define WM8960_RINPATH_RMICBOOST_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMICBOOST_MASK) >> WM8960_RINPATH_RMICBOOST_SHIFT)
  1450. /*
  1451. * RMIC2B (RW)
  1452. *
  1453. * Connect Right Input PGA to Right Input Boost
  1454. * Mixer
  1455. * 0 = Not connected
  1456. * 1 = Connected
  1457. */
  1458. #define WM8960_RINPATH_RMIC2B_MASK (0x8U)
  1459. #define WM8960_RINPATH_RMIC2B_SHIFT (3U)
  1460. #define WM8960_RINPATH_RMIC2B_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMIC2B_SHIFT) & WM8960_RINPATH_RMIC2B_MASK)
  1461. #define WM8960_RINPATH_RMIC2B_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMIC2B_MASK) >> WM8960_RINPATH_RMIC2B_SHIFT)
  1462. /* Bitfield definition for register: LOUTMIX */
  1463. /*
  1464. * LD2LO (RW)
  1465. *
  1466. * Left DAC to Left Output Mixer
  1467. * 0 = Disable (Mute)
  1468. * 1 = Enable Path
  1469. */
  1470. #define WM8960_LOUTMIX_LD2LO_MASK (0x100U)
  1471. #define WM8960_LOUTMIX_LD2LO_SHIFT (8U)
  1472. #define WM8960_LOUTMIX_LD2LO_SET(x) (((uint16_t)(x) << WM8960_LOUTMIX_LD2LO_SHIFT) & WM8960_LOUTMIX_LD2LO_MASK)
  1473. #define WM8960_LOUTMIX_LD2LO_GET(x) (((uint16_t)(x) & WM8960_LOUTMIX_LD2LO_MASK) >> WM8960_LOUTMIX_LD2LO_SHIFT)
  1474. /*
  1475. * LI2LO (RW)
  1476. *
  1477. * LINPUT3 to Left Output Mixer
  1478. * 0 = Disable (Mute)
  1479. * 1 = Enable Path
  1480. */
  1481. #define WM8960_LOUTMIX_LI2LO_MASK (0x80U)
  1482. #define WM8960_LOUTMIX_LI2LO_SHIFT (7U)
  1483. #define WM8960_LOUTMIX_LI2LO_SET(x) (((uint16_t)(x) << WM8960_LOUTMIX_LI2LO_SHIFT) & WM8960_LOUTMIX_LI2LO_MASK)
  1484. #define WM8960_LOUTMIX_LI2LO_GET(x) (((uint16_t)(x) & WM8960_LOUTMIX_LI2LO_MASK) >> WM8960_LOUTMIX_LI2LO_SHIFT)
  1485. /*
  1486. * LI2LOVOL (RW)
  1487. *
  1488. * LINPUT3 to Left Output Mixer Volume
  1489. * 000 = 0dB
  1490. * ...(3dB steps)
  1491. * 111 = -21dB
  1492. */
  1493. #define WM8960_LOUTMIX_LI2LOVOL_MASK (0x70U)
  1494. #define WM8960_LOUTMIX_LI2LOVOL_SHIFT (4U)
  1495. #define WM8960_LOUTMIX_LI2LOVOL_SET(x) (((uint16_t)(x) << WM8960_LOUTMIX_LI2LOVOL_SHIFT) & WM8960_LOUTMIX_LI2LOVOL_MASK)
  1496. #define WM8960_LOUTMIX_LI2LOVOL_GET(x) (((uint16_t)(x) & WM8960_LOUTMIX_LI2LOVOL_MASK) >> WM8960_LOUTMIX_LI2LOVOL_SHIFT)
  1497. /* Bitfield definition for register: ROUTMIX */
  1498. /*
  1499. * RD2RO (RW)
  1500. *
  1501. * Right DAC to Right Output Mixer
  1502. * 0 = Disable (Mute)
  1503. * 1 = Enable Path
  1504. */
  1505. #define WM8960_ROUTMIX_RD2RO_MASK (0x100U)
  1506. #define WM8960_ROUTMIX_RD2RO_SHIFT (8U)
  1507. #define WM8960_ROUTMIX_RD2RO_SET(x) (((uint16_t)(x) << WM8960_ROUTMIX_RD2RO_SHIFT) & WM8960_ROUTMIX_RD2RO_MASK)
  1508. #define WM8960_ROUTMIX_RD2RO_GET(x) (((uint16_t)(x) & WM8960_ROUTMIX_RD2RO_MASK) >> WM8960_ROUTMIX_RD2RO_SHIFT)
  1509. /*
  1510. * RI2RO (RW)
  1511. *
  1512. * RINPUT3 to Right Output Mixer
  1513. * 0 = Disable (Mute)
  1514. * 1 = Enable Path
  1515. */
  1516. #define WM8960_ROUTMIX_RI2RO_MASK (0x80U)
  1517. #define WM8960_ROUTMIX_RI2RO_SHIFT (7U)
  1518. #define WM8960_ROUTMIX_RI2RO_SET(x) (((uint16_t)(x) << WM8960_ROUTMIX_RI2RO_SHIFT) & WM8960_ROUTMIX_RI2RO_MASK)
  1519. #define WM8960_ROUTMIX_RI2RO_GET(x) (((uint16_t)(x) & WM8960_ROUTMIX_RI2RO_MASK) >> WM8960_ROUTMIX_RI2RO_SHIFT)
  1520. /*
  1521. * RI2ROVOL (RW)
  1522. *
  1523. * RINPUT3 to Right Output Mixer Volume
  1524. * 000 = 0dB
  1525. * ...(3dB steps)
  1526. * 111 = -21dB
  1527. */
  1528. #define WM8960_ROUTMIX_RI2ROVOL_MASK (0x70U)
  1529. #define WM8960_ROUTMIX_RI2ROVOL_SHIFT (4U)
  1530. #define WM8960_ROUTMIX_RI2ROVOL_SET(x) (((uint16_t)(x) << WM8960_ROUTMIX_RI2ROVOL_SHIFT) & WM8960_ROUTMIX_RI2ROVOL_MASK)
  1531. #define WM8960_ROUTMIX_RI2ROVOL_GET(x) (((uint16_t)(x) & WM8960_ROUTMIX_RI2ROVOL_MASK) >> WM8960_ROUTMIX_RI2ROVOL_SHIFT)
  1532. /* Bitfield definition for register: MONOMIX1 */
  1533. /*
  1534. * L2MO (RW)
  1535. *
  1536. * Left Output Mixer to Mono Output Mixer Control
  1537. * 0 = Left channel mix disabled
  1538. * 1 = Left channel mix enabled
  1539. */
  1540. #define WM8960_MONOMIX1_L2MO_MASK (0x80U)
  1541. #define WM8960_MONOMIX1_L2MO_SHIFT (7U)
  1542. #define WM8960_MONOMIX1_L2MO_SET(x) (((uint16_t)(x) << WM8960_MONOMIX1_L2MO_SHIFT) & WM8960_MONOMIX1_L2MO_MASK)
  1543. #define WM8960_MONOMIX1_L2MO_GET(x) (((uint16_t)(x) & WM8960_MONOMIX1_L2MO_MASK) >> WM8960_MONOMIX1_L2MO_SHIFT)
  1544. /* Bitfield definition for register: MONOMIX2 */
  1545. /*
  1546. * R2MO (RW)
  1547. *
  1548. * Right Output Mixer to Mono Output Mixer Control
  1549. * 0 = Right channel mix disabled
  1550. * 1 = Right channel mix enabled
  1551. */
  1552. #define WM8960_MONOMIX2_R2MO_MASK (0x80U)
  1553. #define WM8960_MONOMIX2_R2MO_SHIFT (7U)
  1554. #define WM8960_MONOMIX2_R2MO_SET(x) (((uint16_t)(x) << WM8960_MONOMIX2_R2MO_SHIFT) & WM8960_MONOMIX2_R2MO_MASK)
  1555. #define WM8960_MONOMIX2_R2MO_GET(x) (((uint16_t)(x) & WM8960_MONOMIX2_R2MO_MASK) >> WM8960_MONOMIX2_R2MO_SHIFT)
  1556. /* Bitfield definition for register: LOUT2 */
  1557. /*
  1558. * SPKVU (RW)
  1559. *
  1560. * Speaker Volume Update
  1561. * Writing a 1 to this bit will cause left and right speaker volumes to be updated (SPKLVOL and SPKRVOL)
  1562. */
  1563. #define WM8960_LOUT2_SPKVU_MASK (0x100U)
  1564. #define WM8960_LOUT2_SPKVU_SHIFT (8U)
  1565. #define WM8960_LOUT2_SPKVU_SET(x) (((uint16_t)(x) << WM8960_LOUT2_SPKVU_SHIFT) & WM8960_LOUT2_SPKVU_MASK)
  1566. #define WM8960_LOUT2_SPKVU_GET(x) (((uint16_t)(x) & WM8960_LOUT2_SPKVU_MASK) >> WM8960_LOUT2_SPKVU_SHIFT)
  1567. /*
  1568. * SPKLZC (RW)
  1569. *
  1570. * Left Speaker Zero Cross Enable
  1571. * 1 = Change gain on zero cross only
  1572. * 0 = Change gain immediately
  1573. */
  1574. #define WM8960_LOUT2_SPKLZC_MASK (0x80U)
  1575. #define WM8960_LOUT2_SPKLZC_SHIFT (7U)
  1576. #define WM8960_LOUT2_SPKLZC_SET(x) (((uint16_t)(x) << WM8960_LOUT2_SPKLZC_SHIFT) & WM8960_LOUT2_SPKLZC_MASK)
  1577. #define WM8960_LOUT2_SPKLZC_GET(x) (((uint16_t)(x) & WM8960_LOUT2_SPKLZC_MASK) >> WM8960_LOUT2_SPKLZC_SHIFT)
  1578. /*
  1579. * SPKLVOL (RW)
  1580. *
  1581. * SPK_LP/SPK_LN Volume
  1582. * 1111111 = +6dB
  1583. * … 1dB steps down to
  1584. * 0110000 = -73dB
  1585. * 0101111 to 0000000 = Analogue MUTE
  1586. */
  1587. #define WM8960_LOUT2_SPKLVOL_MASK (0x7FU)
  1588. #define WM8960_LOUT2_SPKLVOL_SHIFT (0U)
  1589. #define WM8960_LOUT2_SPKLVOL_SET(x) (((uint16_t)(x) << WM8960_LOUT2_SPKLVOL_SHIFT) & WM8960_LOUT2_SPKLVOL_MASK)
  1590. #define WM8960_LOUT2_SPKLVOL_GET(x) (((uint16_t)(x) & WM8960_LOUT2_SPKLVOL_MASK) >> WM8960_LOUT2_SPKLVOL_SHIFT)
  1591. /* Bitfield definition for register: ROUT2 */
  1592. /*
  1593. * SPKVU (RW)
  1594. *
  1595. * Speaker Volume Update
  1596. * Writing a 1 to this bit will cause left and right
  1597. * speaker volumes to be updated (SPKLVOL and SPKRVOL)
  1598. */
  1599. #define WM8960_ROUT2_SPKVU_MASK (0x100U)
  1600. #define WM8960_ROUT2_SPKVU_SHIFT (8U)
  1601. #define WM8960_ROUT2_SPKVU_SET(x) (((uint16_t)(x) << WM8960_ROUT2_SPKVU_SHIFT) & WM8960_ROUT2_SPKVU_MASK)
  1602. #define WM8960_ROUT2_SPKVU_GET(x) (((uint16_t)(x) & WM8960_ROUT2_SPKVU_MASK) >> WM8960_ROUT2_SPKVU_SHIFT)
  1603. /*
  1604. * SPKRZC (RW)
  1605. *
  1606. * Right Speaker Zero Cross Enable
  1607. * 1 = Change gain on zero cross only
  1608. * 0 = Change gain immediately
  1609. */
  1610. #define WM8960_ROUT2_SPKRZC_MASK (0x80U)
  1611. #define WM8960_ROUT2_SPKRZC_SHIFT (7U)
  1612. #define WM8960_ROUT2_SPKRZC_SET(x) (((uint16_t)(x) << WM8960_ROUT2_SPKRZC_SHIFT) & WM8960_ROUT2_SPKRZC_MASK)
  1613. #define WM8960_ROUT2_SPKRZC_GET(x) (((uint16_t)(x) & WM8960_ROUT2_SPKRZC_MASK) >> WM8960_ROUT2_SPKRZC_SHIFT)
  1614. /*
  1615. * SPKRVOL (RW)
  1616. *
  1617. * SPK_RP/SPK_RN Volume
  1618. * 1111111 = +6dB
  1619. * … 1dB steps down to
  1620. * 0110000 = -73dB
  1621. * 0101111 to 0000000 = Analogue MUTE
  1622. */
  1623. #define WM8960_ROUT2_SPKRVOL_MASK (0x7FU)
  1624. #define WM8960_ROUT2_SPKRVOL_SHIFT (0U)
  1625. #define WM8960_ROUT2_SPKRVOL_SET(x) (((uint16_t)(x) << WM8960_ROUT2_SPKRVOL_SHIFT) & WM8960_ROUT2_SPKRVOL_MASK)
  1626. #define WM8960_ROUT2_SPKRVOL_GET(x) (((uint16_t)(x) & WM8960_ROUT2_SPKRVOL_MASK) >> WM8960_ROUT2_SPKRVOL_SHIFT)
  1627. /* Bitfield definition for register: MONO */
  1628. /*
  1629. * MOUTVOL (RW)
  1630. *
  1631. * Mono Output Mixer Volume Control
  1632. * 0 = 0dB
  1633. * 1 = -6dB
  1634. */
  1635. #define WM8960_MONO_MOUTVOL_MASK (0x40U)
  1636. #define WM8960_MONO_MOUTVOL_SHIFT (6U)
  1637. #define WM8960_MONO_MOUTVOL_SET(x) (((uint16_t)(x) << WM8960_MONO_MOUTVOL_SHIFT) & WM8960_MONO_MOUTVOL_MASK)
  1638. #define WM8960_MONO_MOUTVOL_GET(x) (((uint16_t)(x) & WM8960_MONO_MOUTVOL_MASK) >> WM8960_MONO_MOUTVOL_SHIFT)
  1639. /* Bitfield definition for register: INBMIX1 */
  1640. /*
  1641. * LIN3BOOST (RW)
  1642. *
  1643. * LINPUT3 to Boost Mixer Gain
  1644. * 000 = Mute
  1645. * 001 = -12dB
  1646. * ...3dB steps up to
  1647. * 111 = +6dB
  1648. */
  1649. #define WM8960_INBMIX1_LIN3BOOST_MASK (0x70U)
  1650. #define WM8960_INBMIX1_LIN3BOOST_SHIFT (4U)
  1651. #define WM8960_INBMIX1_LIN3BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX1_LIN3BOOST_SHIFT) & WM8960_INBMIX1_LIN3BOOST_MASK)
  1652. #define WM8960_INBMIX1_LIN3BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX1_LIN3BOOST_MASK) >> WM8960_INBMIX1_LIN3BOOST_SHIFT)
  1653. /*
  1654. * LIN2BOOST (RW)
  1655. *
  1656. * LINPUT2 to Boost Mixer Gain
  1657. * 000 = Mute
  1658. * 001 = -12dB
  1659. * ...3dB steps up to
  1660. * 111 = +6dB
  1661. */
  1662. #define WM8960_INBMIX1_LIN2BOOST_MASK (0xEU)
  1663. #define WM8960_INBMIX1_LIN2BOOST_SHIFT (1U)
  1664. #define WM8960_INBMIX1_LIN2BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX1_LIN2BOOST_SHIFT) & WM8960_INBMIX1_LIN2BOOST_MASK)
  1665. #define WM8960_INBMIX1_LIN2BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX1_LIN2BOOST_MASK) >> WM8960_INBMIX1_LIN2BOOST_SHIFT)
  1666. /* Bitfield definition for register: INBMIX2 */
  1667. /*
  1668. * RIN3BOOST (RW)
  1669. *
  1670. * RINPUT3 to Boost Mixer Gain
  1671. * 000 = Mute
  1672. * 001 = -12dB
  1673. * ...3dB steps up to
  1674. * 111 = +6dB
  1675. */
  1676. #define WM8960_INBMIX2_RIN3BOOST_MASK (0x70U)
  1677. #define WM8960_INBMIX2_RIN3BOOST_SHIFT (4U)
  1678. #define WM8960_INBMIX2_RIN3BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX2_RIN3BOOST_SHIFT) & WM8960_INBMIX2_RIN3BOOST_MASK)
  1679. #define WM8960_INBMIX2_RIN3BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX2_RIN3BOOST_MASK) >> WM8960_INBMIX2_RIN3BOOST_SHIFT)
  1680. /*
  1681. * RIN2BOOST (RW)
  1682. *
  1683. * RINPUT2 to Boost Mixer Gain
  1684. * 000 = Mute
  1685. * 001 = -12dB
  1686. * ...3dB steps up to
  1687. * 111 = +6dB
  1688. */
  1689. #define WM8960_INBMIX2_RIN2BOOST_MASK (0xEU)
  1690. #define WM8960_INBMIX2_RIN2BOOST_SHIFT (1U)
  1691. #define WM8960_INBMIX2_RIN2BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX2_RIN2BOOST_SHIFT) & WM8960_INBMIX2_RIN2BOOST_MASK)
  1692. #define WM8960_INBMIX2_RIN2BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX2_RIN2BOOST_MASK) >> WM8960_INBMIX2_RIN2BOOST_SHIFT)
  1693. /* Bitfield definition for register: BYPASS1 */
  1694. /*
  1695. * LB2LO (RW)
  1696. *
  1697. * Left Input Boost Mixer to Left Output Mixer
  1698. * 0 = Disable (Mute)
  1699. * 1 = Enable Path
  1700. */
  1701. #define WM8960_BYPASS1_LB2LO_MASK (0x80U)
  1702. #define WM8960_BYPASS1_LB2LO_SHIFT (7U)
  1703. #define WM8960_BYPASS1_LB2LO_SET(x) (((uint16_t)(x) << WM8960_BYPASS1_LB2LO_SHIFT) & WM8960_BYPASS1_LB2LO_MASK)
  1704. #define WM8960_BYPASS1_LB2LO_GET(x) (((uint16_t)(x) & WM8960_BYPASS1_LB2LO_MASK) >> WM8960_BYPASS1_LB2LO_SHIFT)
  1705. /*
  1706. * LB2LOVOL (RW)
  1707. *
  1708. * Left Input Boost Mixer to Left Output Mixer
  1709. * Volume
  1710. * 000 = 0dB
  1711. * ...(3dB steps)
  1712. * 111 = -21dB
  1713. */
  1714. #define WM8960_BYPASS1_LB2LOVOL_MASK (0x70U)
  1715. #define WM8960_BYPASS1_LB2LOVOL_SHIFT (4U)
  1716. #define WM8960_BYPASS1_LB2LOVOL_SET(x) (((uint16_t)(x) << WM8960_BYPASS1_LB2LOVOL_SHIFT) & WM8960_BYPASS1_LB2LOVOL_MASK)
  1717. #define WM8960_BYPASS1_LB2LOVOL_GET(x) (((uint16_t)(x) & WM8960_BYPASS1_LB2LOVOL_MASK) >> WM8960_BYPASS1_LB2LOVOL_SHIFT)
  1718. /* Bitfield definition for register: BYPASS2 */
  1719. /*
  1720. * RB2RO (RW)
  1721. *
  1722. * Right Input Boost Mixer to Right Output Mixer
  1723. * 0 = Disable (Mute)
  1724. * 1 = Enable Path
  1725. */
  1726. #define WM8960_BYPASS2_RB2RO_MASK (0x80U)
  1727. #define WM8960_BYPASS2_RB2RO_SHIFT (7U)
  1728. #define WM8960_BYPASS2_RB2RO_SET(x) (((uint16_t)(x) << WM8960_BYPASS2_RB2RO_SHIFT) & WM8960_BYPASS2_RB2RO_MASK)
  1729. #define WM8960_BYPASS2_RB2RO_GET(x) (((uint16_t)(x) & WM8960_BYPASS2_RB2RO_MASK) >> WM8960_BYPASS2_RB2RO_SHIFT)
  1730. /*
  1731. * RB2ROVOL (RW)
  1732. *
  1733. * Right Input Boost Mixer to Right Output Mixer
  1734. * Volume
  1735. * 000 = 0dB
  1736. * ...(3dB steps)
  1737. * 111 = -21dB
  1738. */
  1739. #define WM8960_BYPASS2_RB2ROVOL_MASK (0x70U)
  1740. #define WM8960_BYPASS2_RB2ROVOL_SHIFT (4U)
  1741. #define WM8960_BYPASS2_RB2ROVOL_SET(x) (((uint16_t)(x) << WM8960_BYPASS2_RB2ROVOL_SHIFT) & WM8960_BYPASS2_RB2ROVOL_MASK)
  1742. #define WM8960_BYPASS2_RB2ROVOL_GET(x) (((uint16_t)(x) & WM8960_BYPASS2_RB2ROVOL_MASK) >> WM8960_BYPASS2_RB2ROVOL_SHIFT)
  1743. /* Bitfield definition for register: POWER3 */
  1744. /*
  1745. * LMIC (RW)
  1746. *
  1747. * Left Channel Input PGA Enable
  1748. * 0 = PGA disabled
  1749. * 1 = PGA enabled (if AINL = 1)
  1750. */
  1751. #define WM8960_POWER3_LMIC_MASK (0x20U)
  1752. #define WM8960_POWER3_LMIC_SHIFT (5U)
  1753. #define WM8960_POWER3_LMIC_SET(x) (((uint16_t)(x) << WM8960_POWER3_LMIC_SHIFT) & WM8960_POWER3_LMIC_MASK)
  1754. #define WM8960_POWER3_LMIC_GET(x) (((uint16_t)(x) & WM8960_POWER3_LMIC_MASK) >> WM8960_POWER3_LMIC_SHIFT)
  1755. /*
  1756. * RMIC (RW)
  1757. *
  1758. * Right Channel Input PGA Enable
  1759. * 0 = PGA disabled
  1760. * 1 = PGA enabled (if AINR = 1)
  1761. */
  1762. #define WM8960_POWER3_RMIC_MASK (0x10U)
  1763. #define WM8960_POWER3_RMIC_SHIFT (4U)
  1764. #define WM8960_POWER3_RMIC_SET(x) (((uint16_t)(x) << WM8960_POWER3_RMIC_SHIFT) & WM8960_POWER3_RMIC_MASK)
  1765. #define WM8960_POWER3_RMIC_GET(x) (((uint16_t)(x) & WM8960_POWER3_RMIC_MASK) >> WM8960_POWER3_RMIC_SHIFT)
  1766. /*
  1767. * LOMIX (RW)
  1768. *
  1769. * Left Output Mixer Enable Control
  1770. * 0 = Disabled
  1771. * 1 = Enabled
  1772. */
  1773. #define WM8960_POWER3_LOMIX_MASK (0x8U)
  1774. #define WM8960_POWER3_LOMIX_SHIFT (3U)
  1775. #define WM8960_POWER3_LOMIX_SET(x) (((uint16_t)(x) << WM8960_POWER3_LOMIX_SHIFT) & WM8960_POWER3_LOMIX_MASK)
  1776. #define WM8960_POWER3_LOMIX_GET(x) (((uint16_t)(x) & WM8960_POWER3_LOMIX_MASK) >> WM8960_POWER3_LOMIX_SHIFT)
  1777. /*
  1778. * ROMIX (RW)
  1779. *
  1780. * Right Output Mixer Enable Control
  1781. * 0 = Disabled
  1782. * 1 = Enabled
  1783. */
  1784. #define WM8960_POWER3_ROMIX_MASK (0x4U)
  1785. #define WM8960_POWER3_ROMIX_SHIFT (2U)
  1786. #define WM8960_POWER3_ROMIX_SET(x) (((uint16_t)(x) << WM8960_POWER3_ROMIX_SHIFT) & WM8960_POWER3_ROMIX_MASK)
  1787. #define WM8960_POWER3_ROMIX_GET(x) (((uint16_t)(x) & WM8960_POWER3_ROMIX_MASK) >> WM8960_POWER3_ROMIX_SHIFT)
  1788. /* Bitfield definition for register: ADDCTL4 */
  1789. /*
  1790. * GPIOPOL (RW)
  1791. *
  1792. * GPIO Polarity Invert
  1793. * 0 = Non inverted
  1794. * 1 = Inverted
  1795. */
  1796. #define WM8960_ADDCTL4_GPIOPOL_MASK (0x80U)
  1797. #define WM8960_ADDCTL4_GPIOPOL_SHIFT (7U)
  1798. #define WM8960_ADDCTL4_GPIOPOL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_GPIOPOL_SHIFT) & WM8960_ADDCTL4_GPIOPOL_MASK)
  1799. #define WM8960_ADDCTL4_GPIOPOL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_GPIOPOL_MASK) >> WM8960_ADDCTL4_GPIOPOL_SHIFT)
  1800. /*
  1801. * GPIOSEL (RW)
  1802. *
  1803. * ADCLRC/GPIO1 GPIO Function Select:
  1804. * 000 = Jack detect input
  1805. * 001 = Reserved
  1806. * 010 = Temperature ok
  1807. * 011 = Debounced jack detect output
  1808. * 100 = SYSCLK output
  1809. * 101 = PLL lock
  1810. * 110 = Logic 0
  1811. * 111 = Logic 1
  1812. */
  1813. #define WM8960_ADDCTL4_GPIOSEL_MASK (0x70U)
  1814. #define WM8960_ADDCTL4_GPIOSEL_SHIFT (4U)
  1815. #define WM8960_ADDCTL4_GPIOSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_GPIOSEL_SHIFT) & WM8960_ADDCTL4_GPIOSEL_MASK)
  1816. #define WM8960_ADDCTL4_GPIOSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_GPIOSEL_MASK) >> WM8960_ADDCTL4_GPIOSEL_SHIFT)
  1817. /*
  1818. * HPSEL (RW)
  1819. *
  1820. * Headphone Switch Input Select
  1821. * 0X = GPIO1 used for jack detect input (Requires
  1822. * ADCLRC pin to be configured as a GPIO)
  1823. * 10 = JD2 used for jack detect input
  1824. * 11 = JD3 used for jack detect input
  1825. */
  1826. #define WM8960_ADDCTL4_HPSEL_MASK (0xCU)
  1827. #define WM8960_ADDCTL4_HPSEL_SHIFT (2U)
  1828. #define WM8960_ADDCTL4_HPSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_HPSEL_SHIFT) & WM8960_ADDCTL4_HPSEL_MASK)
  1829. #define WM8960_ADDCTL4_HPSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_HPSEL_MASK) >> WM8960_ADDCTL4_HPSEL_SHIFT)
  1830. /*
  1831. * TSENSEN (RW)
  1832. *
  1833. * Temperature Sensor Enable
  1834. * 0 = Temperature sensor disabled
  1835. * 1 = Temperature sensor enabled
  1836. */
  1837. #define WM8960_ADDCTL4_TSENSEN_MASK (0x2U)
  1838. #define WM8960_ADDCTL4_TSENSEN_SHIFT (1U)
  1839. #define WM8960_ADDCTL4_TSENSEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_TSENSEN_SHIFT) & WM8960_ADDCTL4_TSENSEN_MASK)
  1840. #define WM8960_ADDCTL4_TSENSEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_TSENSEN_MASK) >> WM8960_ADDCTL4_TSENSEN_SHIFT)
  1841. /*
  1842. * MBSEL (RW)
  1843. *
  1844. * Microphone Bias Voltage Control
  1845. * 0 = 0.9 * AVDD
  1846. * 1 = 0.65 * AVDD
  1847. */
  1848. #define WM8960_ADDCTL4_MBSEL_MASK (0x1U)
  1849. #define WM8960_ADDCTL4_MBSEL_SHIFT (0U)
  1850. #define WM8960_ADDCTL4_MBSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_MBSEL_SHIFT) & WM8960_ADDCTL4_MBSEL_MASK)
  1851. #define WM8960_ADDCTL4_MBSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_MBSEL_MASK) >> WM8960_ADDCTL4_MBSEL_SHIFT)
  1852. /* Bitfield definition for register: CLASSD1 */
  1853. /*
  1854. * SPK_OP_EN (RW)
  1855. *
  1856. * Enable Class D Speaker Outputs
  1857. * 00 = Off
  1858. * 01 = Left speaker only
  1859. * 10 = Right speaker only
  1860. * 11 = Left and right speakers enabled
  1861. */
  1862. #define WM8960_CLASSD1_SPK_OP_EN_MASK (0xC0U)
  1863. #define WM8960_CLASSD1_SPK_OP_EN_SHIFT (6U)
  1864. #define WM8960_CLASSD1_SPK_OP_EN_SET(x) (((uint16_t)(x) << WM8960_CLASSD1_SPK_OP_EN_SHIFT) & WM8960_CLASSD1_SPK_OP_EN_MASK)
  1865. #define WM8960_CLASSD1_SPK_OP_EN_GET(x) (((uint16_t)(x) & WM8960_CLASSD1_SPK_OP_EN_MASK) >> WM8960_CLASSD1_SPK_OP_EN_SHIFT)
  1866. /* Bitfield definition for register: CLASSD3 */
  1867. /*
  1868. * DCGAIN (RW)
  1869. *
  1870. * DC Speaker Boost (Boosts speaker DC output
  1871. * level by up to 1.8 x on left and right channels)
  1872. * 000 = 1.00x boost (+0dB)
  1873. * 001 = 1.27x boost (+2.1dB)
  1874. * 010 = 1.40x boost (+2.9dB)
  1875. * 011 = 1.52x boost (+3.6dB)
  1876. * 100 = 1.67x boost (+4.5dB)
  1877. * 101 = 1.8x boost (+5.1dB)
  1878. * 110 to 111 = Reserved
  1879. */
  1880. #define WM8960_CLASSD3_DCGAIN_MASK (0x38U)
  1881. #define WM8960_CLASSD3_DCGAIN_SHIFT (3U)
  1882. #define WM8960_CLASSD3_DCGAIN_SET(x) (((uint16_t)(x) << WM8960_CLASSD3_DCGAIN_SHIFT) & WM8960_CLASSD3_DCGAIN_MASK)
  1883. #define WM8960_CLASSD3_DCGAIN_GET(x) (((uint16_t)(x) & WM8960_CLASSD3_DCGAIN_MASK) >> WM8960_CLASSD3_DCGAIN_SHIFT)
  1884. /*
  1885. * ACGAIN (RW)
  1886. *
  1887. * AC Speaker Boost (Boosts speaker AC output
  1888. * signal by up to 1.8 x on left and right channels)
  1889. * 000 = 1.00x boost (+0dB)
  1890. * 001 = 1.27x boost (+2.1dB)
  1891. * 010 = 1.40x boost (+2.9dB)
  1892. * 011 = 1.52x boost (+3.6dB)
  1893. * 100 = 1.67x boost (+4.5dB)
  1894. * 101 = 1.8x boost (+5.1dB)
  1895. * 110 to 111 = Reserved
  1896. */
  1897. #define WM8960_CLASSD3_ACGAIN_MASK (0x7U)
  1898. #define WM8960_CLASSD3_ACGAIN_SHIFT (0U)
  1899. #define WM8960_CLASSD3_ACGAIN_SET(x) (((uint16_t)(x) << WM8960_CLASSD3_ACGAIN_SHIFT) & WM8960_CLASSD3_ACGAIN_MASK)
  1900. #define WM8960_CLASSD3_ACGAIN_GET(x) (((uint16_t)(x) & WM8960_CLASSD3_ACGAIN_MASK) >> WM8960_CLASSD3_ACGAIN_SHIFT)
  1901. /* Bitfield definition for register: PLL1 */
  1902. /*
  1903. * OPCLKDIV (RW)
  1904. *
  1905. * SYSCLK Output to GPIO Clock Division ratio
  1906. * 000 = SYSCLK
  1907. * 001 = SYSCLK / 2
  1908. * 010 = SYSCLK / 3
  1909. * 011 = SYSCLK / 4
  1910. * 100 = SYSCLK / 5.5
  1911. * 101 = SYSCLK / 6
  1912. */
  1913. #define WM8960_PLL1_OPCLKDIV_MASK (0x1C0U)
  1914. #define WM8960_PLL1_OPCLKDIV_SHIFT (6U)
  1915. #define WM8960_PLL1_OPCLKDIV_SET(x) (((uint16_t)(x) << WM8960_PLL1_OPCLKDIV_SHIFT) & WM8960_PLL1_OPCLKDIV_MASK)
  1916. #define WM8960_PLL1_OPCLKDIV_GET(x) (((uint16_t)(x) & WM8960_PLL1_OPCLKDIV_MASK) >> WM8960_PLL1_OPCLKDIV_SHIFT)
  1917. /*
  1918. * SDM (RW)
  1919. *
  1920. * Enable Integer Mode
  1921. * 0 = Integer mode
  1922. * 1 = Fractional mode
  1923. */
  1924. #define WM8960_PLL1_SDM_MASK (0x20U)
  1925. #define WM8960_PLL1_SDM_SHIFT (5U)
  1926. #define WM8960_PLL1_SDM_SET(x) (((uint16_t)(x) << WM8960_PLL1_SDM_SHIFT) & WM8960_PLL1_SDM_MASK)
  1927. #define WM8960_PLL1_SDM_GET(x) (((uint16_t)(x) & WM8960_PLL1_SDM_MASK) >> WM8960_PLL1_SDM_SHIFT)
  1928. /*
  1929. * PLLPRESCALE (RW)
  1930. *
  1931. * Divide MCLK by 2 before input to PLL
  1932. * 0 = Divide by 1
  1933. * 1 = Divide by 2
  1934. */
  1935. #define WM8960_PLL1_PLLPRESCALE_MASK (0x10U)
  1936. #define WM8960_PLL1_PLLPRESCALE_SHIFT (4U)
  1937. #define WM8960_PLL1_PLLPRESCALE_SET(x) (((uint16_t)(x) << WM8960_PLL1_PLLPRESCALE_SHIFT) & WM8960_PLL1_PLLPRESCALE_MASK)
  1938. #define WM8960_PLL1_PLLPRESCALE_GET(x) (((uint16_t)(x) & WM8960_PLL1_PLLPRESCALE_MASK) >> WM8960_PLL1_PLLPRESCALE_SHIFT)
  1939. /*
  1940. * PLLN (RW)
  1941. *
  1942. * Integer (N) part of PLL input/output frequency
  1943. * ratio. Use values greater than 5 and less than 13
  1944. */
  1945. #define WM8960_PLL1_PLLN_MASK (0xFU)
  1946. #define WM8960_PLL1_PLLN_SHIFT (0U)
  1947. #define WM8960_PLL1_PLLN_SET(x) (((uint16_t)(x) << WM8960_PLL1_PLLN_SHIFT) & WM8960_PLL1_PLLN_MASK)
  1948. #define WM8960_PLL1_PLLN_GET(x) (((uint16_t)(x) & WM8960_PLL1_PLLN_MASK) >> WM8960_PLL1_PLLN_SHIFT)
  1949. /* Bitfield definition for register: PLL2 */
  1950. /*
  1951. * PLLK (RW)
  1952. *
  1953. * Fractional (K) part of PLL1 input/output
  1954. * frequency ratio (treat as one 24-digit binary number).
  1955. */
  1956. #define WM8960_PLL2_PLLK_MASK (0xFFU)
  1957. #define WM8960_PLL2_PLLK_SHIFT (0U)
  1958. #define WM8960_PLL2_PLLK_SET(x) (((uint16_t)(x) << WM8960_PLL2_PLLK_SHIFT) & WM8960_PLL2_PLLK_MASK)
  1959. #define WM8960_PLL2_PLLK_GET(x) (((uint16_t)(x) & WM8960_PLL2_PLLK_MASK) >> WM8960_PLL2_PLLK_SHIFT)
  1960. /* Bitfield definition for register: PLL3 */
  1961. /*
  1962. * PLLK (RW)
  1963. *
  1964. * Fractional (K) part of PLL1 input/output
  1965. * frequency ratio (treat as one 24-digit binary number).
  1966. */
  1967. #define WM8960_PLL3_PLLK_MASK (0xFFU)
  1968. #define WM8960_PLL3_PLLK_SHIFT (0U)
  1969. #define WM8960_PLL3_PLLK_SET(x) (((uint16_t)(x) << WM8960_PLL3_PLLK_SHIFT) & WM8960_PLL3_PLLK_MASK)
  1970. #define WM8960_PLL3_PLLK_GET(x) (((uint16_t)(x) & WM8960_PLL3_PLLK_MASK) >> WM8960_PLL3_PLLK_SHIFT)
  1971. /* Bitfield definition for register: PLL4 */
  1972. /*
  1973. * PLLK (RW)
  1974. *
  1975. * Fractional (K) part of PLL1 input/output
  1976. * frequency ratio (treat as one 24-digit binary number).
  1977. */
  1978. #define WM8960_PLL4_PLLK_MASK (0xFFU)
  1979. #define WM8960_PLL4_PLLK_SHIFT (0U)
  1980. #define WM8960_PLL4_PLLK_SET(x) (((uint16_t)(x) << WM8960_PLL4_PLLK_SHIFT) & WM8960_PLL4_PLLK_MASK)
  1981. #define WM8960_PLL4_PLLK_GET(x) (((uint16_t)(x) & WM8960_PLL4_PLLK_MASK) >> WM8960_PLL4_PLLK_SHIFT)
  1982. #endif /* _HPM_WM8960_REG_H_ */