rt1016.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * rt1016.h -- RT1016 ALSA SoC audio amplifier driver
  4. *
  5. * Copyright 2020 Realtek Semiconductor Corp.
  6. * Author: Oder Chiou <oder_chiou@realtek.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. */
  12. #ifndef __RT1016_H__
  13. #define __RT1016_H__
  14. #define RT1016_DEVICE_ID_VAL 0x6595
  15. #define RT1016_RESET 0x00
  16. #define RT1016_PADS_CTRL_1 0x01
  17. #define RT1016_PADS_CTRL_2 0x02
  18. #define RT1016_I2C_CTRL 0x03
  19. #define RT1016_VOL_CTRL_1 0x04
  20. #define RT1016_VOL_CTRL_2 0x05
  21. #define RT1016_VOL_CTRL_3 0x06
  22. #define RT1016_ANA_CTRL_1 0x07
  23. #define RT1016_MUX_SEL 0x08
  24. #define RT1016_RX_I2S_CTRL 0x09
  25. #define RT1016_ANA_FLAG 0x0a
  26. #define RT1016_VERSION2_ID 0x0c
  27. #define RT1016_VERSION1_ID 0x0d
  28. #define RT1016_VENDER_ID 0x0e
  29. #define RT1016_DEVICE_ID 0x0f
  30. #define RT1016_ANA_CTRL_2 0x11
  31. #define RT1016_TEST_SIGNAL 0x1c
  32. #define RT1016_TEST_CTRL_1 0x1d
  33. #define RT1016_TEST_CTRL_2 0x1e
  34. #define RT1016_TEST_CTRL_3 0x1f
  35. #define RT1016_CLOCK_1 0x20
  36. #define RT1016_CLOCK_2 0x21
  37. #define RT1016_CLOCK_3 0x22
  38. #define RT1016_CLOCK_4 0x23
  39. #define RT1016_CLOCK_5 0x24
  40. #define RT1016_CLOCK_6 0x25
  41. #define RT1016_CLOCK_7 0x26
  42. #define RT1016_I2S_CTRL 0x40
  43. #define RT1016_DAC_CTRL_1 0x60
  44. #define RT1016_SC_CTRL_1 0x80
  45. #define RT1016_SC_CTRL_2 0x81
  46. #define RT1016_SC_CTRL_3 0x82
  47. #define RT1016_SC_CTRL_4 0x83
  48. #define RT1016_SIL_DET 0xa0
  49. #define RT1016_SYS_CLK 0xc0
  50. #define RT1016_BIAS_CUR 0xc1
  51. #define RT1016_DAC_CTRL_2 0xc2
  52. #define RT1016_LDO_CTRL 0xc3
  53. #define RT1016_CLASSD_1 0xc4
  54. #define RT1016_PLL1 0xc5
  55. #define RT1016_PLL2 0xc6
  56. #define RT1016_PLL3 0xc7
  57. #define RT1016_CLASSD_2 0xc8
  58. #define RT1016_CLASSD_OUT 0xc9
  59. #define RT1016_CLASSD_3 0xca
  60. #define RT1016_CLASSD_4 0xcb
  61. #define RT1016_CLASSD_5 0xcc
  62. #define RT1016_PWR_CTRL 0xcf
  63. /* global definition */
  64. #define RT1016_L_VOL_MASK (0xff << 8)
  65. #define RT1016_L_VOL_SFT 8
  66. #define RT1016_R_VOL_MASK (0xff)
  67. #define RT1016_R_VOL_SFT 0
  68. /* 0x04 */
  69. #define RT1016_DA_MUTE_L_SFT 7
  70. #define RT1016_DA_MUTE_R_SFT 6
  71. /* 0x20 */
  72. #define RT1016_CLK_SYS_SEL_MASK (0x1 << 15)
  73. #define RT1016_CLK_SYS_SEL_SFT 15
  74. #define RT1016_CLK_SYS_SEL_MCLK (0x0 << 15)
  75. #define RT1016_CLK_SYS_SEL_PLL (0x1 << 15)
  76. #define RT1016_PLL_SEL_MASK (0x1 << 13)
  77. #define RT1016_PLL_SEL_SFT 13
  78. #define RT1016_PLL_SEL_MCLK (0x0 << 13)
  79. #define RT1016_PLL_SEL_BCLK (0x1 << 13)
  80. /* 0x21 */
  81. #define RT1016_FS_PD_MASK (0x7 << 13)
  82. #define RT1016_FS_PD_SFT 13
  83. #define RT1016_OSR_PD_MASK (0x3 << 10)
  84. #define RT1016_OSR_PD_SFT 10
  85. /* 0x22 */
  86. #define RT1016_PWR_DAC_FILTER (0x1 << 11)
  87. #define RT1016_PWR_DAC_FILTER_BIT 11
  88. #define RT1016_PWR_DACMOD (0x1 << 10)
  89. #define RT1016_PWR_DACMOD_BIT 10
  90. #define RT1016_PWR_CLK_FIFO (0x1 << 9)
  91. #define RT1016_PWR_CLK_FIFO_BIT 9
  92. #define RT1016_PWR_CLK_PUREDC (0x1 << 8)
  93. #define RT1016_PWR_CLK_PUREDC_BIT 8
  94. #define RT1016_PWR_SIL_DET (0x1 << 7)
  95. #define RT1016_PWR_SIL_DET_BIT 7
  96. #define RT1016_PWR_RC_25M (0x1 << 6)
  97. #define RT1016_PWR_RC_25M_BIT 6
  98. #define RT1016_PWR_PLL1 (0x1 << 5)
  99. #define RT1016_PWR_PLL1_BIT 5
  100. #define RT1016_PWR_ANA_CTRL (0x1 << 4)
  101. #define RT1016_PWR_ANA_CTRL_BIT 4
  102. #define RT1016_PWR_CLK_SYS (0x1 << 3)
  103. #define RT1016_PWR_CLK_SYS_BIT 3
  104. /* 0x23 */
  105. #define RT1016_PWR_LRCK_DET (0x1 << 15)
  106. #define RT1016_PWR_LRCK_DET_BIT 15
  107. #define RT1016_PWR_BCLK_DET (0x1 << 11)
  108. #define RT1016_PWR_BCLK_DET_BIT 11
  109. /* 0x40 */
  110. #define RT1016_I2S_BCLK_MS_MASK (0x1 << 15)
  111. #define RT1016_I2S_BCLK_MS_SFT 15
  112. #define RT1016_I2S_BCLK_MS_32 (0x0 << 15)
  113. #define RT1016_I2S_BCLK_MS_64 (0x1 << 15)
  114. #define RT1016_I2S_BCLK_POL_MASK (0x1 << 13)
  115. #define RT1016_I2S_BCLK_POL_SFT 13
  116. #define RT1016_I2S_BCLK_POL_NOR (0x0 << 13)
  117. #define RT1016_I2S_BCLK_POL_INV (0x1 << 13)
  118. #define RT1016_I2S_DATA_SWAP_MASK (0x1 << 10)
  119. #define RT1016_I2S_DATA_SWAP_SFT 10
  120. #define RT1016_I2S_DL_MASK (0x7 << 4)
  121. #define RT1016_I2S_DL_SFT 4
  122. #define RT1016_I2S_DL_16 (0x1 << 4)
  123. #define RT1016_I2S_DL_20 (0x2 << 4)
  124. #define RT1016_I2S_DL_24 (0x3 << 4)
  125. #define RT1016_I2S_DL_32 (0x4 << 4)
  126. #define RT1016_I2S_MS_MASK (0x1 << 3)
  127. #define RT1016_I2S_MS_SFT 3
  128. #define RT1016_I2S_MS_M (0x0 << 3)
  129. #define RT1016_I2S_MS_S (0x1 << 3)
  130. #define RT1016_I2S_DF_MASK (0x7 << 0)
  131. #define RT1016_I2S_DF_SFT 0
  132. #define RT1016_I2S_DF_I2S (0x0)
  133. #define RT1016_I2S_DF_LEFT (0x1)
  134. #define RT1016_I2S_DF_PCM_A (0x2)
  135. #define RT1016_I2S_DF_PCM_B (0x3)
  136. /* 0xa0 */
  137. #define RT1016_SIL_DET_EN (0x1 << 15)
  138. #define RT1016_SIL_DET_EN_BIT 15
  139. /* 0xc2 */
  140. #define RT1016_CKGEN_DAC (0x1 << 13)
  141. #define RT1016_CKGEN_DAC_BIT 13
  142. /* 0xc4 */
  143. #define RT1016_VCM_SLOW (0x1 << 6)
  144. #define RT1016_VCM_SLOW_BIT 6
  145. /* 0xc5 */
  146. #define RT1016_PLL_M_MAX 0xf
  147. #define RT1016_PLL_M_MASK (RT1016_PLL_M_MAX << 12)
  148. #define RT1016_PLL_M_SFT 12
  149. #define RT1016_PLL_M_BP (0x1 << 11)
  150. #define RT1016_PLL_M_BP_SFT 11
  151. #define RT1016_PLL_N_MAX 0x1ff
  152. #define RT1016_PLL_N_MASK (RT1016_PLL_N_MAX << 0)
  153. #define RT1016_PLL_N_SFT 0
  154. /* 0xc6 */
  155. #define RT1016_PLL2_EN (0x1 << 15)
  156. #define RT1016_PLL2_EN_BIT 15
  157. #define RT1016_PLL_K_BP (0x1 << 5)
  158. #define RT1016_PLL_K_BP_SFT 5
  159. #define RT1016_PLL_K_MAX 0x1f
  160. #define RT1016_PLL_K_MASK (RT1016_PLL_K_MAX)
  161. #define RT1016_PLL_K_SFT 0
  162. /* 0xcf */
  163. #define RT1016_PWR_BG_1_2 (0x1 << 12)
  164. #define RT1016_PWR_BG_1_2_BIT 12
  165. #define RT1016_PWR_MBIAS_BG (0x1 << 11)
  166. #define RT1016_PWR_MBIAS_BG_BIT 11
  167. #define RT1016_PWR_PLL (0x1 << 9)
  168. #define RT1016_PWR_PLL_BIT 9
  169. #define RT1016_PWR_BASIC (0x1 << 8)
  170. #define RT1016_PWR_BASIC_BIT 8
  171. #define RT1016_PWR_CLSD (0x1 << 7)
  172. #define RT1016_PWR_CLSD_BIT 7
  173. #define RT1016_PWR_25M (0x1 << 6)
  174. #define RT1016_PWR_25M_BIT 6
  175. #define RT1016_PWR_DACL (0x1 << 4)
  176. #define RT1016_PWR_DACL_BIT 4
  177. #define RT1016_PWR_DACR (0x1 << 3)
  178. #define RT1016_PWR_DACR_BIT 3
  179. #define RT1016_PWR_LDO2 (0x1 << 2)
  180. #define RT1016_PWR_LDO2_BIT 2
  181. #define RT1016_PWR_VREF (0x1 << 1)
  182. #define RT1016_PWR_VREF_BIT 1
  183. #define RT1016_PWR_MBIAS (0x1 << 0)
  184. #define RT1016_PWR_MBIAS_BIT 0
  185. /* System Clock Source */
  186. enum {
  187. RT1016_SCLK_S_MCLK,
  188. RT1016_SCLK_S_PLL,
  189. };
  190. /* PLL1 Source */
  191. enum {
  192. RT1016_PLL_S_MCLK,
  193. RT1016_PLL_S_BCLK,
  194. };
  195. enum {
  196. RT1016_AIF1,
  197. RT1016_AIFS,
  198. };
  199. struct rt1016_priv {
  200. struct snd_soc_component *component;
  201. struct regmap *regmap;
  202. int sysclk;
  203. int sysclk_src;
  204. int lrck;
  205. int bclk;
  206. int master;
  207. int pll_src;
  208. int pll_in;
  209. int pll_out;
  210. };
  211. #endif /* __RT1016_H__ */