rt286.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /*
  2. * rt286.h -- RT286 ALSA SoC audio driver
  3. *
  4. * Copyright 2011 Realtek Microelectronics
  5. * Author: Johnny Hsu <johnnyhsu@realtek.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. */
  11. #ifndef __RT286_H__
  12. #define __RT286_H__
  13. #define VERB_CMD(V, N, D) ((N << 20) | (V << 8) | D)
  14. #define RT286_AUDIO_FUNCTION_GROUP 0x01
  15. #define RT286_DAC_OUT1 0x02
  16. #define RT286_DAC_OUT2 0x03
  17. #define RT286_ADC_IN1 0x09
  18. #define RT286_ADC_IN2 0x08
  19. #define RT286_MIXER_IN 0x0b
  20. #define RT286_MIXER_OUT1 0x0c
  21. #define RT286_MIXER_OUT2 0x0d
  22. #define RT286_DMIC1 0x12
  23. #define RT286_DMIC2 0x13
  24. #define RT286_SPK_OUT 0x14
  25. #define RT286_MIC1 0x18
  26. #define RT286_LINE1 0x1a
  27. #define RT286_BEEP 0x1d
  28. #define RT286_SPDIF 0x1e
  29. #define RT286_VENDOR_REGISTERS 0x20
  30. #define RT286_HP_OUT 0x21
  31. #define RT286_MIXER_IN1 0x22
  32. #define RT286_MIXER_IN2 0x23
  33. #define RT286_SET_PIN_SFT 6
  34. #define RT286_SET_PIN_ENABLE 0x40
  35. #define RT286_SET_PIN_DISABLE 0
  36. #define RT286_SET_EAPD_HIGH 0x2
  37. #define RT286_SET_EAPD_LOW 0
  38. #define RT286_MUTE_SFT 7
  39. /* Verb commands */
  40. #define RT286_GET_PARAM(NID, PARAM) VERB_CMD(AC_VERB_PARAMETERS, NID, PARAM)
  41. #define RT286_SET_POWER(NID) VERB_CMD(AC_VERB_SET_POWER_STATE, NID, 0)
  42. #define RT286_SET_AUDIO_POWER RT286_SET_POWER(RT286_AUDIO_FUNCTION_GROUP)
  43. #define RT286_SET_HPO_POWER RT286_SET_POWER(RT286_HP_OUT)
  44. #define RT286_SET_SPK_POWER RT286_SET_POWER(RT286_SPK_OUT)
  45. #define RT286_SET_DMIC1_POWER RT286_SET_POWER(RT286_DMIC1)
  46. #define RT286_SPK_MUX\
  47. VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT286_SPK_OUT, 0)
  48. #define RT286_HPO_MUX\
  49. VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT286_HP_OUT, 0)
  50. #define RT286_ADC0_MUX\
  51. VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT286_MIXER_IN1, 0)
  52. #define RT286_ADC1_MUX\
  53. VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT286_MIXER_IN2, 0)
  54. #define RT286_SET_MIC1\
  55. VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT286_MIC1, 0)
  56. #define RT286_SET_PIN_HPO\
  57. VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT286_HP_OUT, 0)
  58. #define RT286_SET_PIN_SPK\
  59. VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT286_SPK_OUT, 0)
  60. #define RT286_SET_PIN_DMIC1\
  61. VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT286_DMIC1, 0)
  62. #define RT286_SPK_EAPD\
  63. VERB_CMD(AC_VERB_SET_EAPD_BTLENABLE, RT286_SPK_OUT, 0)
  64. #define RT286_SET_AMP_GAIN_HPO\
  65. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_HP_OUT, 0)
  66. #define RT286_SET_AMP_GAIN_ADC_IN1\
  67. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_ADC_IN1, 0)
  68. #define RT286_SET_AMP_GAIN_ADC_IN2\
  69. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_ADC_IN2, 0)
  70. #define RT286_GET_HP_SENSE\
  71. VERB_CMD(AC_VERB_GET_PIN_SENSE, RT286_HP_OUT, 0)
  72. #define RT286_GET_MIC1_SENSE\
  73. VERB_CMD(AC_VERB_GET_PIN_SENSE, RT286_MIC1, 0)
  74. #define RT286_SET_DMIC2_DEFAULT\
  75. VERB_CMD(AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, RT286_DMIC2, 0)
  76. #define RT286_DACL_GAIN\
  77. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_DAC_OUT1, 0xa000)
  78. #define RT286_DACR_GAIN\
  79. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_DAC_OUT1, 0x9000)
  80. #define RT286_ADCL_GAIN\
  81. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_ADC_IN1, 0x6000)
  82. #define RT286_ADCR_GAIN\
  83. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_ADC_IN1, 0x5000)
  84. #define RT286_MIC_GAIN\
  85. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIC1, 0x7000)
  86. #define RT286_SPOL_GAIN\
  87. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_SPK_OUT, 0xa000)
  88. #define RT286_SPOR_GAIN\
  89. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_SPK_OUT, 0x9000)
  90. #define RT286_HPOL_GAIN\
  91. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_HP_OUT, 0xa000)
  92. #define RT286_HPOR_GAIN\
  93. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_HP_OUT, 0x9000)
  94. #define RT286_F_DAC_SWITCH\
  95. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIXER_OUT1, 0x7000)
  96. #define RT286_F_RECMIX_SWITCH\
  97. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIXER_OUT1, 0x7100)
  98. #define RT286_REC_MIC_SWITCH\
  99. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIXER_IN, 0x7000)
  100. #define RT286_REC_I2S_SWITCH\
  101. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIXER_IN, 0x7100)
  102. #define RT286_REC_LINE_SWITCH\
  103. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIXER_IN, 0x7200)
  104. #define RT286_REC_BEEP_SWITCH\
  105. VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT286_MIXER_IN, 0x7300)
  106. #define RT286_DAC_FORMAT\
  107. VERB_CMD(AC_VERB_SET_STREAM_FORMAT, RT286_DAC_OUT1, 0)
  108. #define RT286_ADC_FORMAT\
  109. VERB_CMD(AC_VERB_SET_STREAM_FORMAT, RT286_ADC_IN1, 0)
  110. #define RT286_COEF_INDEX\
  111. VERB_CMD(AC_VERB_SET_COEF_INDEX, RT286_VENDOR_REGISTERS, 0)
  112. #define RT286_PROC_COEF\
  113. VERB_CMD(AC_VERB_SET_PROC_COEF, RT286_VENDOR_REGISTERS, 0)
  114. #define RT286_SET_GPIO_MASK\
  115. VERB_CMD(AC_VERB_SET_GPIO_MASK, RT286_AUDIO_FUNCTION_GROUP, 0)
  116. #define RT286_SET_GPIO_DIRECTION\
  117. VERB_CMD(AC_VERB_SET_GPIO_DIRECTION, RT286_AUDIO_FUNCTION_GROUP, 0)
  118. #define RT286_SET_GPIO_DATA\
  119. VERB_CMD(AC_VERB_SET_GPIO_DATA, RT286_AUDIO_FUNCTION_GROUP, 0)
  120. /* Index registers */
  121. #define RT286_A_BIAS_CTRL1 0x01
  122. #define RT286_A_BIAS_CTRL2 0x02
  123. #define RT286_POWER_CTRL1 0x03
  124. #define RT286_A_BIAS_CTRL3 0x04
  125. #define RT286_POWER_CTRL2 0x08
  126. #define RT286_I2S_CTRL1 0x09
  127. #define RT286_I2S_CTRL2 0x0a
  128. #define RT286_CLK_DIV 0x0b
  129. #define RT286_DC_GAIN 0x0d
  130. #define RT286_POWER_CTRL3 0x0f
  131. #define RT286_MIC1_DET_CTRL 0x19
  132. #define RT286_MISC_CTRL1 0x20
  133. #define RT286_GPIO_CTRL 0x29
  134. #define RT286_IRQ_CTRL 0x33
  135. #define RT286_PLL_CTRL1 0x49
  136. #define RT286_CBJ_CTRL1 0x4f
  137. #define RT286_CBJ_CTRL2 0x50
  138. #define RT286_PLL_CTRL 0x63
  139. #define RT286_DEPOP_CTRL1 0x66
  140. #define RT286_DEPOP_CTRL2 0x67
  141. #define RT286_DEPOP_CTRL3 0x68
  142. #define RT286_DEPOP_CTRL4 0x69
  143. /* SPDIF (0x06) */
  144. #define RT286_SPDIF_SEL_SFT 0
  145. #define RT286_SPDIF_SEL_PCM0 0
  146. #define RT286_SPDIF_SEL_PCM1 1
  147. #define RT286_SPDIF_SEL_SPOUT 2
  148. #define RT286_SPDIF_SEL_PP 3
  149. /* RECMIX (0x0b) */
  150. #define RT286_M_REC_BEEP_SFT 0
  151. #define RT286_M_REC_LINE1_SFT 1
  152. #define RT286_M_REC_MIC1_SFT 2
  153. #define RT286_M_REC_I2S_SFT 3
  154. /* Front (0x0c) */
  155. #define RT286_M_FRONT_DAC_SFT 0
  156. #define RT286_M_FRONT_REC_SFT 1
  157. /* SPK-OUT (0x14) */
  158. #define RT286_M_SPK_MUX_SFT 14
  159. #define RT286_SPK_SEL_MASK 0x1
  160. #define RT286_SPK_SEL_SFT 0
  161. #define RT286_SPK_SEL_F 0
  162. #define RT286_SPK_SEL_S 1
  163. /* HP-OUT (0x21) */
  164. #define RT286_M_HP_MUX_SFT 14
  165. #define RT286_HP_SEL_MASK 0x1
  166. #define RT286_HP_SEL_SFT 0
  167. #define RT286_HP_SEL_F 0
  168. #define RT286_HP_SEL_S 1
  169. /* ADC (0x22) (0x23) */
  170. #define RT286_ADC_SEL_MASK 0x7
  171. #define RT286_ADC_SEL_SFT 0
  172. #define RT286_ADC_SEL_SURR 0
  173. #define RT286_ADC_SEL_FRONT 1
  174. #define RT286_ADC_SEL_DMIC 2
  175. #define RT286_ADC_SEL_BEEP 4
  176. #define RT286_ADC_SEL_LINE1 5
  177. #define RT286_ADC_SEL_I2S 6
  178. #define RT286_ADC_SEL_MIC1 7
  179. #define RT286_SCLK_S_MCLK 0
  180. #define RT286_SCLK_S_PLL 1
  181. enum {
  182. RT286_AIF1,
  183. RT286_AIF2,
  184. RT286_AIFS,
  185. };
  186. int rt286_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack);
  187. #endif /* __RT286_H__ */