View | Details | Raw Unified | Return to bug 208555 | Differences between
and this patch

Collapse All | Expand All

(-)a/sound/pci/hda/legion_15imhg05_speakers.c (+491 lines)
Line 0 Link Here
1
// SPDX-License-Identifier: GPL-2.0
2
/* Fixes for Lenovo Legion 15IMHg05 speaker output. */
3
4
static const struct hda_verb alc287_legion_init_verbs[] = {
5
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
6
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0320 },
7
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
8
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0041 },
9
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
10
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0041 },
11
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
12
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
13
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
14
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
15
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
16
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
17
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
18
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
19
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
20
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
21
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
22
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
23
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
24
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
25
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
26
    { 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
27
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
28
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
29
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
30
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
31
    { 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
32
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
33
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
34
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
35
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
36
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
37
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
38
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
39
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
40
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
41
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
42
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
43
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
44
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
45
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
46
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
47
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
48
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
49
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
50
    { 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
51
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
52
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
53
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
54
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
55
    { 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
56
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
57
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
58
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
59
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
60
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
61
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
62
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
63
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
64
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
65
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
66
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
67
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
68
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
69
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
70
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
71
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
72
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
73
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
74
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
75
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
76
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
77
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
78
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
79
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
80
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
81
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
82
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
83
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
84
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
85
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
86
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
87
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
88
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
89
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
90
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
91
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
92
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
93
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
94
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
95
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
96
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
97
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
98
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
99
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
100
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
101
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
102
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
103
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
104
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
105
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
106
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
107
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
108
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
109
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
110
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
111
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
112
    { 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
113
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
114
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
115
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
116
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
117
    { 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
118
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
119
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
120
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
121
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
122
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001d },
123
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
124
    { 0x20, AC_VERB_SET_PROC_COEF, 0x004e },
125
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
126
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
127
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001d },
128
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
129
    { 0x20, AC_VERB_SET_PROC_COEF, 0x004e },
130
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
131
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
132
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
133
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
134
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
135
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
136
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
137
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
138
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
139
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
140
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
141
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
142
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
143
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
144
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
145
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
146
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
147
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
148
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
149
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
150
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
151
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
152
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
153
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
154
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
155
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
156
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
157
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
158
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
159
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
160
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
161
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
162
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
163
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
164
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
165
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
166
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
167
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
168
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
169
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
170
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
171
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
172
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
173
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
174
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
175
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
176
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
177
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
178
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
179
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
180
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
181
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
182
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
183
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
184
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
185
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
186
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
187
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
188
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
189
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
190
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
191
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
192
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
193
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
194
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
195
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
196
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
197
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
198
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
199
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
200
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
201
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
202
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
203
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
204
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
205
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
206
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
207
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
208
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
209
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
210
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
211
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
212
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
213
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
214
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
215
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
216
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
217
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
218
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
219
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
220
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
221
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
222
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
223
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
224
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
225
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
226
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
227
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
228
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
229
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
230
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
231
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
232
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
233
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
234
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
235
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
236
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
237
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
238
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
239
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
240
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
241
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
242
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
243
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
244
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
245
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
246
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
247
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
248
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
249
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
250
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
251
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
252
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
253
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
254
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
255
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
256
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
257
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
258
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
259
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
260
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
261
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
262
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
263
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
264
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
265
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
266
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
267
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
268
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
269
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
270
    { 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
271
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
272
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
273
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
274
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
275
    { 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
276
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
277
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
278
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
279
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
280
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
281
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
282
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
283
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
284
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
285
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
286
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
287
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
288
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
289
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
290
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
291
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
292
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
293
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
294
    { 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
295
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
296
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
297
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
298
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
299
    { 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
300
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
301
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
302
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
303
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
304
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
305
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
306
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
307
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
308
    { 0x20, AC_VERB_SET_PROC_COEF, 0x002a },
309
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
310
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
311
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
312
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
313
    { 0x20, AC_VERB_SET_PROC_COEF, 0x002a },
314
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
315
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
316
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
317
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
318
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
319
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
320
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0046 },
321
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
322
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
323
    { 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
324
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
325
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0046 },
326
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
327
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
328
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
329
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
330
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
331
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
332
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0044 },
333
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
334
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
335
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
336
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
337
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0044 },
338
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
339
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
340
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
341
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
342
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
343
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
344
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
345
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
346
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
347
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
348
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
349
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
350
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
351
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
352
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
353
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
354
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
355
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
356
    { 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
357
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
358
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
359
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
360
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
361
    { 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
362
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
363
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
364
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
365
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
366
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
367
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
368
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
369
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
370
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
371
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
372
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
373
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
374
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
375
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
376
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
377
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
378
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
379
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
380
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
381
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
382
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
383
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
384
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
385
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
386
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
387
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
388
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
389
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
390
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
391
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
392
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
393
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
394
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
395
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
396
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
397
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
398
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
399
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
400
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
401
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
402
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
403
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
404
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
405
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
406
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
407
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
408
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
409
    { 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
410
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
411
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
412
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
413
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
414
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
415
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
416
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
417
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
418
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
419
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
420
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
421
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
422
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
423
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
424
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
425
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
426
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
427
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
428
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
429
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
430
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
431
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
432
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
433
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
434
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
435
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
436
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
437
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
438
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
439
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
440
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
441
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
442
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
443
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
444
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
445
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
446
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
447
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
448
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
449
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
450
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
451
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
452
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
453
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
454
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
455
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
456
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
457
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
458
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
459
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
460
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
461
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
462
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
463
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
464
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
465
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
466
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
467
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
468
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
469
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
470
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
471
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
472
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
473
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
474
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
475
    { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
476
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
477
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
478
    { 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
479
    { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
480
    {}
481
};
482
483
static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec,
484
						  const struct hda_fixup *fix,
485
						  int action) {
486
    switch (action) {
487
    case HDA_FIXUP_ACT_INIT:
488
	snd_hda_add_verbs(codec, alc287_legion_init_verbs);
489
	break;
490
    }
491
}
(-)a/sound/pci/hda/patch_realtek.c (+12 lines)
Lines 6352-6357 static void alc_fixup_thinkpad_acpi(struct hda_codec *codec, Link Here
6352
/* for alc285_fixup_ideapad_s740_coef() */
6352
/* for alc285_fixup_ideapad_s740_coef() */
6353
#include "ideapad_s740_helper.c"
6353
#include "ideapad_s740_helper.c"
6354
6354
6355
/* For alc287_fixup_legion_15imhg05_speakers() */
6356
#include "legion_15imhg05_speakers.c"
6357
6355
enum {
6358
enum {
6356
	ALC269_FIXUP_GPIO2,
6359
	ALC269_FIXUP_GPIO2,
6357
	ALC269_FIXUP_SONY_VAIO,
6360
	ALC269_FIXUP_SONY_VAIO,
Lines 6561-6566 enum { Link Here
6561
	ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP,
6564
	ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP,
6562
	ALC623_FIXUP_LENOVO_THINKSTATION_P340,
6565
	ALC623_FIXUP_LENOVO_THINKSTATION_P340,
6563
	ALC255_FIXUP_ACER_HEADPHONE_AND_MIC,
6566
	ALC255_FIXUP_ACER_HEADPHONE_AND_MIC,
6567
	ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
6564
};
6568
};
6565
6569
6566
static const struct hda_fixup alc269_fixups[] = {
6570
static const struct hda_fixup alc269_fixups[] = {
Lines 8088-8093 static const struct hda_fixup alc269_fixups[] = { Link Here
8088
		.chained = true,
8092
		.chained = true,
8089
		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
8093
		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
8090
	},
8094
	},
8095
	[ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS] = {
8096
		.type = HDA_FIXUP_FUNC,
8097
		.v.func = alc287_fixup_legion_15imhg05_speakers,
8098
		.chained = true,
8099
		/* TODO: figure this out. Is it needed? */
8100
		/* .chain_id = ALC269_FIXUP_THINKPAD_ACPI, */
8101
	},
8091
	[ALC295_FIXUP_ASUS_DACS] = {
8102
	[ALC295_FIXUP_ASUS_DACS] = {
8092
		.type = HDA_FIXUP_FUNC,
8103
		.type = HDA_FIXUP_FUNC,
8093
		.v.func = alc295_fixup_asus_dacs,
8104
		.v.func = alc295_fixup_asus_dacs,
Lines 8520-8525 static const struct snd_pci_quirk alc269_fixup_tbl[] = { Link Here
8520
	SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940", ALC298_FIXUP_LENOVO_SPK_VOLUME),
8531
	SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940", ALC298_FIXUP_LENOVO_SPK_VOLUME),
8521
	SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740", ALC285_FIXUP_IDEAPAD_S740_COEF),
8532
	SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740", ALC285_FIXUP_IDEAPAD_S740_COEF),
8522
	SND_PCI_QUIRK(0x17aa, 0x3843, "Yoga 9i", ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP),
8533
	SND_PCI_QUIRK(0x17aa, 0x3843, "Yoga 9i", ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP),
8534
	SND_PCI_QUIRK(0x17aa, 0x3813, "Lenovo Legion 7", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
8523
	SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
8535
	SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
8524
	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
8536
	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
8525
	SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
8537
	SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),

Return to bug 208555