rt298.h 7.0 KB
Newer Older
B
Bard Liao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
/*
 * rt298.h  --  RT298 ALSA SoC audio driver
 *
 * Copyright 2011 Realtek Microelectronics
 * Author: Johnny Hsu <johnnyhsu@realtek.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __RT298_H__
#define __RT298_H__

#define VERB_CMD(V, N, D) ((N << 20) | (V << 8) | D)

#define RT298_AUDIO_FUNCTION_GROUP			0x01
#define RT298_DAC_OUT1					0x02
#define RT298_DAC_OUT2					0x03
#define RT298_DIG_CVT					0x06
#define RT298_ADC_IN1					0x09
#define RT298_ADC_IN2					0x08
#define RT298_MIXER_IN					0x0b
#define RT298_MIXER_OUT1				0x0c
#define RT298_MIXER_OUT2				0x0d
#define RT298_DMIC1					0x12
#define RT298_DMIC2					0x13
#define RT298_SPK_OUT					0x14
#define RT298_MIC1					0x18
#define RT298_LINE1					0x1a
#define RT298_BEEP					0x1d
#define RT298_SPDIF					0x1e
#define RT298_VENDOR_REGISTERS				0x20
#define RT298_HP_OUT					0x21
#define RT298_MIXER_IN1					0x22
#define RT298_MIXER_IN2					0x23
37
#define RT298_INLINE_CMD				0x55
B
Bard Liao 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

#define RT298_SET_PIN_SFT				6
#define RT298_SET_PIN_ENABLE				0x40
#define RT298_SET_PIN_DISABLE				0
#define RT298_SET_EAPD_HIGH				0x2
#define RT298_SET_EAPD_LOW				0

#define RT298_MUTE_SFT					7

/* Verb commands */
#define RT298_GET_PARAM(NID, PARAM) VERB_CMD(AC_VERB_PARAMETERS, NID, PARAM)
#define RT298_SET_POWER(NID) VERB_CMD(AC_VERB_SET_POWER_STATE, NID, 0)
#define RT298_SET_AUDIO_POWER RT298_SET_POWER(RT298_AUDIO_FUNCTION_GROUP)
#define RT298_SET_HPO_POWER RT298_SET_POWER(RT298_HP_OUT)
#define RT298_SET_SPK_POWER RT298_SET_POWER(RT298_SPK_OUT)
#define RT298_SET_DMIC1_POWER RT298_SET_POWER(RT298_DMIC1)
#define RT298_SPK_MUX\
	VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_SPK_OUT, 0)
#define RT298_HPO_MUX\
	VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_HP_OUT, 0)
#define RT298_ADC0_MUX\
	VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_MIXER_IN1, 0)
#define RT298_ADC1_MUX\
	VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_MIXER_IN2, 0)
#define RT298_SET_MIC1\
	VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_MIC1, 0)
#define RT298_SET_PIN_HPO\
	VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_HP_OUT, 0)
#define RT298_SET_PIN_SPK\
	VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_SPK_OUT, 0)
#define RT298_SET_PIN_DMIC1\
	VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_DMIC1, 0)
#define RT298_SET_PIN_SPDIF\
	VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_SPDIF, 0)
#define RT298_SET_PIN_DIG_CVT\
	VERB_CMD(AC_VERB_SET_DIGI_CONVERT_1, RT298_DIG_CVT, 0)
#define RT298_SPK_EAPD\
	VERB_CMD(AC_VERB_SET_EAPD_BTLENABLE, RT298_SPK_OUT, 0)
#define RT298_SET_AMP_GAIN_HPO\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_HP_OUT, 0)
#define RT298_SET_AMP_GAIN_ADC_IN1\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN1, 0)
#define RT298_SET_AMP_GAIN_ADC_IN2\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN2, 0)
#define RT298_GET_HP_SENSE\
	VERB_CMD(AC_VERB_GET_PIN_SENSE, RT298_HP_OUT, 0)
#define RT298_GET_MIC1_SENSE\
	VERB_CMD(AC_VERB_GET_PIN_SENSE, RT298_MIC1, 0)
#define RT298_SET_DMIC2_DEFAULT\
	VERB_CMD(AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, RT298_DMIC2, 0)
#define RT298_SET_SPDIF_DEFAULT\
	VERB_CMD(AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, RT298_SPDIF, 0)
#define RT298_DACL_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_DAC_OUT1, 0xa000)
#define RT298_DACR_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_DAC_OUT1, 0x9000)
#define RT298_ADCL_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN1, 0x6000)
#define RT298_ADCR_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN1, 0x5000)
#define RT298_MIC_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIC1, 0x7000)
#define RT298_SPOL_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_SPK_OUT, 0xa000)
#define RT298_SPOR_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_SPK_OUT, 0x9000)
#define RT298_HPOL_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_HP_OUT, 0xa000)
#define RT298_HPOR_GAIN\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_HP_OUT, 0x9000)
#define RT298_F_DAC_SWITCH\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_OUT1, 0x7000)
#define RT298_F_RECMIX_SWITCH\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_OUT1, 0x7100)
#define RT298_REC_MIC_SWITCH\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7000)
#define RT298_REC_I2S_SWITCH\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7100)
#define RT298_REC_LINE_SWITCH\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7200)
#define RT298_REC_BEEP_SWITCH\
	VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7300)
#define RT298_DAC_FORMAT\
	VERB_CMD(AC_VERB_SET_STREAM_FORMAT, RT298_DAC_OUT1, 0)
#define RT298_ADC_FORMAT\
	VERB_CMD(AC_VERB_SET_STREAM_FORMAT, RT298_ADC_IN1, 0)
#define RT298_COEF_INDEX\
	VERB_CMD(AC_VERB_SET_COEF_INDEX, RT298_VENDOR_REGISTERS, 0)
#define RT298_PROC_COEF\
	VERB_CMD(AC_VERB_SET_PROC_COEF, RT298_VENDOR_REGISTERS, 0)
128 129 130 131 132 133
#define RT298_UNSOLICITED_INLINE_CMD\
	VERB_CMD(AC_VERB_SET_UNSOLICITED_ENABLE, RT298_INLINE_CMD, 0)
#define RT298_UNSOLICITED_HP_OUT\
	VERB_CMD(AC_VERB_SET_UNSOLICITED_ENABLE, RT298_HP_OUT, 0)
#define RT298_UNSOLICITED_MIC1\
	VERB_CMD(AC_VERB_SET_UNSOLICITED_ENABLE, RT298_MIC1, 0)
B
Bard Liao 已提交
134 135 136 137 138 139

/* Index registers */
#define RT298_A_BIAS_CTRL1	0x01
#define RT298_A_BIAS_CTRL2	0x02
#define RT298_POWER_CTRL1	0x03
#define RT298_A_BIAS_CTRL3	0x04
140
#define RT298_D_FILTER_CTRL	0x05
B
Bard Liao 已提交
141 142 143 144 145 146 147 148 149 150 151
#define RT298_POWER_CTRL2	0x08
#define RT298_I2S_CTRL1		0x09
#define RT298_I2S_CTRL2		0x0a
#define RT298_CLK_DIV		0x0b
#define RT298_DC_GAIN		0x0d
#define RT298_POWER_CTRL3	0x0f
#define RT298_MIC1_DET_CTRL	0x19
#define RT298_MISC_CTRL1	0x20
#define RT298_IRQ_CTRL		0x33
#define RT298_WIND_FILTER_CTRL	0x46
#define RT298_PLL_CTRL1		0x49
152
#define RT298_VAD_CTRL		0x4e
B
Bard Liao 已提交
153 154 155 156 157 158 159
#define RT298_CBJ_CTRL1		0x4f
#define RT298_CBJ_CTRL2		0x50
#define RT298_PLL_CTRL		0x63
#define RT298_DEPOP_CTRL1	0x66
#define RT298_DEPOP_CTRL2	0x67
#define RT298_DEPOP_CTRL3	0x68
#define RT298_DEPOP_CTRL4	0x69
160
#define RT298_IRQ_FLAG_CTRL	0x7c
B
Bard Liao 已提交
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216

/* SPDIF (0x06) */
#define RT298_SPDIF_SEL_SFT	0
#define RT298_SPDIF_SEL_PCM0	0
#define RT298_SPDIF_SEL_PCM1	1
#define RT298_SPDIF_SEL_SPOUT	2
#define RT298_SPDIF_SEL_PP	3

/* RECMIX (0x0b) */
#define RT298_M_REC_BEEP_SFT	0
#define RT298_M_REC_LINE1_SFT	1
#define RT298_M_REC_MIC1_SFT	2
#define RT298_M_REC_I2S_SFT	3

/* Front (0x0c) */
#define RT298_M_FRONT_DAC_SFT	0
#define RT298_M_FRONT_REC_SFT	1

/* SPK-OUT (0x14) */
#define RT298_M_SPK_MUX_SFT	14
#define RT298_SPK_SEL_MASK	0x1
#define RT298_SPK_SEL_SFT	0
#define RT298_SPK_SEL_F		0
#define RT298_SPK_SEL_S		1

/* HP-OUT (0x21) */
#define RT298_M_HP_MUX_SFT	14
#define RT298_HP_SEL_MASK	0x1
#define RT298_HP_SEL_SFT	0
#define RT298_HP_SEL_F		0
#define RT298_HP_SEL_S		1

/* ADC (0x22) (0x23) */
#define RT298_ADC_SEL_MASK	0x7
#define RT298_ADC_SEL_SFT	0
#define RT298_ADC_SEL_SURR	0
#define RT298_ADC_SEL_FRONT	1
#define RT298_ADC_SEL_DMIC	2
#define RT298_ADC_SEL_BEEP	4
#define RT298_ADC_SEL_LINE1	5
#define RT298_ADC_SEL_I2S	6
#define RT298_ADC_SEL_MIC1	7

#define RT298_SCLK_S_MCLK	0
#define RT298_SCLK_S_PLL	1

enum {
	RT298_AIF1,
	RT298_AIF2,
	RT298_AIFS,
};

int rt298_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack);

#endif /* __RT298_H__ */