hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
37
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * rt700.h -- RT700 ALSA SoC audio driver header
 *
 * Copyright(c) 2019 Realtek Semiconductor Corp.
 */
 
#ifndef __RT700_H__
#define __RT700_H__
 
extern const struct dev_pm_ops rt700_runtime_pm;
 
struct  rt700_priv {
   struct snd_soc_component *component;
   struct regmap *regmap;
   struct regmap *sdw_regmap;
   struct sdw_slave *slave;
   enum sdw_slave_status status;
   struct sdw_bus_params params;
   bool hw_init;
   bool first_hw_init;
   struct snd_soc_jack *hs_jack;
   struct delayed_work jack_detect_work;
   struct delayed_work jack_btn_check_work;
   int jack_type;
};
 
struct sdw_stream_data {
   struct sdw_stream_runtime *sdw_stream;
};
 
/* NID */
#define RT700_AUDIO_FUNCTION_GROUP            0x01
#define RT700_DAC_OUT1                    0x02
#define RT700_DAC_OUT2                    0x03
#define RT700_ADC_IN1                    0x09
#define RT700_ADC_IN2                    0x08
#define RT700_DMIC1                    0x12
#define RT700_DMIC2                    0x13
#define RT700_SPK_OUT                    0x14
#define RT700_MIC2                    0x19
#define RT700_LINE1                    0x1a
#define RT700_LINE2                    0x1b
#define RT700_BEEP                    0x1d
#define RT700_SPDIF                    0x1e
#define RT700_VENDOR_REGISTERS                0x20
#define RT700_HP_OUT                    0x21
#define RT700_MIXER_IN1                    0x22
#define RT700_MIXER_IN2                    0x23
#define RT700_INLINE_CMD                0x55
 
/* Index (NID:20h) */
#define RT700_DAC_DC_CALI_CTL1                0x00
#define RT700_PARA_VERB_CTL                0x1a
#define RT700_COMBO_JACK_AUTO_CTL1                0x45
#define RT700_COMBO_JACK_AUTO_CTL2                0x46
#define RT700_INLINE_CMD_CTL                0x48
#define RT700_DIGITAL_MISC_CTRL4            0x4a
#define RT700_VREFOUT_CTL                0x6b
#define RT700_FSM_CTL                0x6f
#define RT700_IRQ_FLAG_TABLE1                0x80
#define RT700_IRQ_FLAG_TABLE2                0x81
#define RT700_IRQ_FLAG_TABLE3                0x82
 
/* Verb */
#define RT700_VERB_SET_CONNECT_SEL            0x3100
#define RT700_VERB_SET_EAPD_BTLENABLE            0x3c00
#define RT700_VERB_GET_CONNECT_SEL            0xb100
#define RT700_VERB_SET_POWER_STATE            0x3500
#define RT700_VERB_SET_CHANNEL_STREAMID            0x3600
#define RT700_VERB_SET_PIN_WIDGET_CONTROL        0x3700
#define RT700_VERB_SET_UNSOLICITED_ENABLE        0x3800
#define RT700_SET_AMP_GAIN_MUTE_H            0x7300
#define RT700_SET_AMP_GAIN_MUTE_L            0x8380
#define RT700_VERB_GET_PIN_SENSE            0xb900
 
#define RT700_READ_HDA_3                0x2012
#define RT700_READ_HDA_2                0x2013
#define RT700_READ_HDA_1                0x2014
#define RT700_READ_HDA_0                0x2015
#define RT700_PRIV_INDEX_W_H                0x7520
#define RT700_PRIV_INDEX_W_L                0x85a0
#define RT700_PRIV_DATA_W_H                0x7420
#define RT700_PRIV_DATA_W_L                0x84a0
#define RT700_PRIV_INDEX_R_H                0x9d20
#define RT700_PRIV_INDEX_R_L                0xada0
#define RT700_PRIV_DATA_R_H                0x9c20
#define RT700_PRIV_DATA_R_L                0xaca0
#define RT700_DAC_FORMAT_H                0x7203
#define RT700_DAC_FORMAT_L                0x8283
#define RT700_ADC_FORMAT_H                0x7209
#define RT700_ADC_FORMAT_L                0x8289
#define RT700_SET_AUDIO_POWER_STATE\
   (RT700_VERB_SET_POWER_STATE | RT700_AUDIO_FUNCTION_GROUP)
#define RT700_SET_PIN_DMIC1\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_DMIC1)
#define RT700_SET_PIN_DMIC2\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_DMIC2)
#define RT700_SET_PIN_SPK\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_SPK_OUT)
#define RT700_SET_PIN_HP\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_HP_OUT)
#define RT700_SET_PIN_MIC2\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_MIC2)
#define RT700_SET_PIN_LINE1\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_LINE1)
#define RT700_SET_PIN_LINE2\
   (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_LINE2)
#define RT700_SET_MIC2_UNSOLICITED_ENABLE\
   (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_MIC2)
#define RT700_SET_HP_UNSOLICITED_ENABLE\
   (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_HP_OUT)
#define RT700_SET_INLINE_UNSOLICITED_ENABLE\
   (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_INLINE_CMD)
#define RT700_SET_STREAMID_DAC1\
   (RT700_VERB_SET_CHANNEL_STREAMID | RT700_DAC_OUT1)
#define RT700_SET_STREAMID_DAC2\
   (RT700_VERB_SET_CHANNEL_STREAMID | RT700_DAC_OUT2)
#define RT700_SET_STREAMID_ADC1\
   (RT700_VERB_SET_CHANNEL_STREAMID | RT700_ADC_IN1)
#define RT700_SET_STREAMID_ADC2\
   (RT700_VERB_SET_CHANNEL_STREAMID | RT700_ADC_IN2)
#define RT700_SET_GAIN_DAC1_L\
   (RT700_SET_AMP_GAIN_MUTE_L | RT700_DAC_OUT1)
#define RT700_SET_GAIN_DAC1_H\
   (RT700_SET_AMP_GAIN_MUTE_H | RT700_DAC_OUT1)
#define RT700_SET_GAIN_ADC1_L\
   (RT700_SET_AMP_GAIN_MUTE_L | RT700_ADC_IN1)
#define RT700_SET_GAIN_ADC1_H\
   (RT700_SET_AMP_GAIN_MUTE_H | RT700_ADC_IN1)
#define RT700_SET_GAIN_ADC2_L\
   (RT700_SET_AMP_GAIN_MUTE_L | RT700_ADC_IN2)
#define RT700_SET_GAIN_ADC2_H\
   (RT700_SET_AMP_GAIN_MUTE_H | RT700_ADC_IN2)
#define RT700_SET_GAIN_AMIC_L\
   (RT700_SET_AMP_GAIN_MUTE_L | RT700_MIC2)
#define RT700_SET_GAIN_AMIC_H\
   (RT700_SET_AMP_GAIN_MUTE_H | RT700_MIC2)
#define RT700_SET_GAIN_HP_L\
   (RT700_SET_AMP_GAIN_MUTE_L | RT700_HP_OUT)
#define RT700_SET_GAIN_HP_H\
   (RT700_SET_AMP_GAIN_MUTE_H | RT700_HP_OUT)
#define RT700_SET_GAIN_SPK_L\
   (RT700_SET_AMP_GAIN_MUTE_L | RT700_SPK_OUT)
#define RT700_SET_GAIN_SPK_H\
   (RT700_SET_AMP_GAIN_MUTE_H | RT700_SPK_OUT)
#define RT700_SET_EAPD_SPK\
   (RT700_VERB_SET_EAPD_BTLENABLE | RT700_SPK_OUT)
 
/* combo jack auto switch control 2 (0x46)(NID:20h) */
#define RT700_COMBOJACK_AUTO_DET_STATUS            (0x1 << 11)
#define RT700_COMBOJACK_AUTO_DET_TRS            (0x1 << 10)
#define RT700_COMBOJACK_AUTO_DET_CTIA            (0x1 << 9)
#define RT700_COMBOJACK_AUTO_DET_OMTP            (0x1 << 8)
 
#define RT700_EAPD_HIGH                    0x2
#define RT700_EAPD_LOW                    0x0
#define RT700_MUTE_SFT                    7
#define RT700_DIR_IN_SFT                6
#define RT700_DIR_OUT_SFT                7
 
enum {
   RT700_AIF1,
   RT700_AIF2,
   RT700_AIFS,
};
 
int rt700_io_init(struct device *dev, struct sdw_slave *slave);
int rt700_init(struct device *dev, struct regmap *sdw_regmap,
          struct regmap *regmap, struct sdw_slave *slave);
 
int rt700_jack_detect(struct rt700_priv *rt700, bool *hp, bool *mic);
int rt700_clock_config(struct device *dev);
#endif /* __RT700_H__ */