Annotation of /trunk/kernel-alx-legacy/patches-4.9/0408-4.9.309-all-fixes.patch
Parent Directory | Revision Log
Revision 3710 -
(hide annotations)
(download)
Mon Oct 24 14:08:23 2022 UTC (19 months, 3 weeks ago) by niro
File size: 16018 byte(s)
Mon Oct 24 14:08:23 2022 UTC (19 months, 3 weeks ago) by niro
File size: 16018 byte(s)
-linux-4.9.309
1 | niro | 3710 | diff --git a/Makefile b/Makefile |
2 | index ecf06e17c3c88..c1d4ddadbcb51 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 308 | ||
9 | +SUBLEVEL = 309 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c | ||
14 | index c3fba8b527530..28e241e635675 100644 | ||
15 | --- a/arch/x86/kernel/acpi/boot.c | ||
16 | +++ b/arch/x86/kernel/acpi/boot.c | ||
17 | @@ -1324,6 +1324,17 @@ static int __init disable_acpi_pci(const struct dmi_system_id *d) | ||
18 | return 0; | ||
19 | } | ||
20 | |||
21 | +static int __init disable_acpi_xsdt(const struct dmi_system_id *d) | ||
22 | +{ | ||
23 | + if (!acpi_force) { | ||
24 | + pr_notice("%s detected: force use of acpi=rsdt\n", d->ident); | ||
25 | + acpi_gbl_do_not_use_xsdt = TRUE; | ||
26 | + } else { | ||
27 | + pr_notice("Warning: DMI blacklist says broken, but acpi XSDT forced\n"); | ||
28 | + } | ||
29 | + return 0; | ||
30 | +} | ||
31 | + | ||
32 | static int __init dmi_disable_acpi(const struct dmi_system_id *d) | ||
33 | { | ||
34 | if (!acpi_force) { | ||
35 | @@ -1444,6 +1455,19 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | ||
36 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), | ||
37 | }, | ||
38 | }, | ||
39 | + /* | ||
40 | + * Boxes that need ACPI XSDT use disabled due to corrupted tables | ||
41 | + */ | ||
42 | + { | ||
43 | + .callback = disable_acpi_xsdt, | ||
44 | + .ident = "Advantech DAC-BJ01", | ||
45 | + .matches = { | ||
46 | + DMI_MATCH(DMI_SYS_VENDOR, "NEC"), | ||
47 | + DMI_MATCH(DMI_PRODUCT_NAME, "Bearlake CRB Board"), | ||
48 | + DMI_MATCH(DMI_BIOS_VERSION, "V1.12"), | ||
49 | + DMI_MATCH(DMI_BIOS_DATE, "02/01/2011"), | ||
50 | + }, | ||
51 | + }, | ||
52 | {} | ||
53 | }; | ||
54 | |||
55 | diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c | ||
56 | index 69c6f02f16b5b..ee300bbe88310 100644 | ||
57 | --- a/drivers/acpi/battery.c | ||
58 | +++ b/drivers/acpi/battery.c | ||
59 | @@ -88,6 +88,10 @@ enum acpi_battery_files { | ||
60 | |||
61 | static const struct acpi_device_id battery_device_ids[] = { | ||
62 | {"PNP0C0A", 0}, | ||
63 | + | ||
64 | + /* Microsoft Surface Go 3 */ | ||
65 | + {"MSHW0146", 0}, | ||
66 | + | ||
67 | {"", 0}, | ||
68 | }; | ||
69 | |||
70 | @@ -1153,6 +1157,14 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = { | ||
71 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"), | ||
72 | }, | ||
73 | }, | ||
74 | + { | ||
75 | + /* Microsoft Surface Go 3 */ | ||
76 | + .callback = battery_notification_delay_quirk, | ||
77 | + .matches = { | ||
78 | + DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), | ||
79 | + DMI_MATCH(DMI_PRODUCT_NAME, "Surface Go 3"), | ||
80 | + }, | ||
81 | + }, | ||
82 | {}, | ||
83 | }; | ||
84 | |||
85 | diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c | ||
86 | index ec2f77a471501..2837b2f982135 100644 | ||
87 | --- a/drivers/acpi/video_detect.c | ||
88 | +++ b/drivers/acpi/video_detect.c | ||
89 | @@ -135,6 +135,81 @@ static const struct dmi_system_id video_detect_dmi_table[] = { | ||
90 | DMI_MATCH(DMI_PRODUCT_NAME, "UL30A"), | ||
91 | }, | ||
92 | }, | ||
93 | + /* | ||
94 | + * Clevo NL5xRU and NL5xNU/TUXEDO Aura 15 Gen1 and Gen2 have both a | ||
95 | + * working native and video interface. However the default detection | ||
96 | + * mechanism first registers the video interface before unregistering | ||
97 | + * it again and switching to the native interface during boot. This | ||
98 | + * results in a dangling SBIOS request for backlight change for some | ||
99 | + * reason, causing the backlight to switch to ~2% once per boot on the | ||
100 | + * first power cord connect or disconnect event. Setting the native | ||
101 | + * interface explicitly circumvents this buggy behaviour, by avoiding | ||
102 | + * the unregistering process. | ||
103 | + */ | ||
104 | + { | ||
105 | + .callback = video_detect_force_native, | ||
106 | + .ident = "Clevo NL5xRU", | ||
107 | + .matches = { | ||
108 | + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), | ||
109 | + DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), | ||
110 | + }, | ||
111 | + }, | ||
112 | + { | ||
113 | + .callback = video_detect_force_native, | ||
114 | + .ident = "Clevo NL5xRU", | ||
115 | + .matches = { | ||
116 | + DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), | ||
117 | + DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), | ||
118 | + }, | ||
119 | + }, | ||
120 | + { | ||
121 | + .callback = video_detect_force_native, | ||
122 | + .ident = "Clevo NL5xRU", | ||
123 | + .matches = { | ||
124 | + DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), | ||
125 | + DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), | ||
126 | + }, | ||
127 | + }, | ||
128 | + { | ||
129 | + .callback = video_detect_force_native, | ||
130 | + .ident = "Clevo NL5xRU", | ||
131 | + .matches = { | ||
132 | + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), | ||
133 | + DMI_MATCH(DMI_BOARD_NAME, "AURA1501"), | ||
134 | + }, | ||
135 | + }, | ||
136 | + { | ||
137 | + .callback = video_detect_force_native, | ||
138 | + .ident = "Clevo NL5xRU", | ||
139 | + .matches = { | ||
140 | + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), | ||
141 | + DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"), | ||
142 | + }, | ||
143 | + }, | ||
144 | + { | ||
145 | + .callback = video_detect_force_native, | ||
146 | + .ident = "Clevo NL5xNU", | ||
147 | + .matches = { | ||
148 | + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), | ||
149 | + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"), | ||
150 | + }, | ||
151 | + }, | ||
152 | + { | ||
153 | + .callback = video_detect_force_native, | ||
154 | + .ident = "Clevo NL5xNU", | ||
155 | + .matches = { | ||
156 | + DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), | ||
157 | + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"), | ||
158 | + }, | ||
159 | + }, | ||
160 | + { | ||
161 | + .callback = video_detect_force_native, | ||
162 | + .ident = "Clevo NL5xNU", | ||
163 | + .matches = { | ||
164 | + DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), | ||
165 | + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"), | ||
166 | + }, | ||
167 | + }, | ||
168 | |||
169 | /* | ||
170 | * These models have a working acpi_video backlight control, and using | ||
171 | diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c | ||
172 | index 3852d31ce0a4b..37a9f969c59cd 100644 | ||
173 | --- a/drivers/crypto/qat/qat_common/qat_crypto.c | ||
174 | +++ b/drivers/crypto/qat/qat_common/qat_crypto.c | ||
175 | @@ -170,6 +170,14 @@ int qat_crypto_dev_config(struct adf_accel_dev *accel_dev) | ||
176 | goto err; | ||
177 | if (adf_cfg_section_add(accel_dev, "Accelerator0")) | ||
178 | goto err; | ||
179 | + | ||
180 | + /* Temporarily set the number of crypto instances to zero to avoid | ||
181 | + * registering the crypto algorithms. | ||
182 | + * This will be removed when the algorithms will support the | ||
183 | + * CRYPTO_TFM_REQ_MAY_BACKLOG flag | ||
184 | + */ | ||
185 | + instances = 0; | ||
186 | + | ||
187 | for (i = 0; i < instances; i++) { | ||
188 | val = i; | ||
189 | snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_BANK_NUM, i); | ||
190 | diff --git a/drivers/nfc/st21nfca/se.c b/drivers/nfc/st21nfca/se.c | ||
191 | index eac608a457f03..475f8a67856d0 100644 | ||
192 | --- a/drivers/nfc/st21nfca/se.c | ||
193 | +++ b/drivers/nfc/st21nfca/se.c | ||
194 | @@ -330,6 +330,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host, | ||
195 | return -ENOMEM; | ||
196 | |||
197 | transaction->aid_len = skb->data[1]; | ||
198 | + | ||
199 | + /* Checking if the length of the AID is valid */ | ||
200 | + if (transaction->aid_len > sizeof(transaction->aid)) | ||
201 | + return -EINVAL; | ||
202 | + | ||
203 | memcpy(transaction->aid, &skb->data[2], | ||
204 | transaction->aid_len); | ||
205 | |||
206 | @@ -339,6 +344,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host, | ||
207 | return -EPROTO; | ||
208 | |||
209 | transaction->params_len = skb->data[transaction->aid_len + 3]; | ||
210 | + | ||
211 | + /* Total size is allocated (skb->len - 2) minus fixed array members */ | ||
212 | + if (transaction->params_len > ((skb->len - 2) - sizeof(struct nfc_evt_transaction))) | ||
213 | + return -EINVAL; | ||
214 | + | ||
215 | memcpy(transaction->params, skb->data + | ||
216 | transaction->aid_len + 4, transaction->params_len); | ||
217 | |||
218 | diff --git a/drivers/staging/fbtft/fb_st7789v.c b/drivers/staging/fbtft/fb_st7789v.c | ||
219 | index 085e9872c46d4..93bfde68f5452 100644 | ||
220 | --- a/drivers/staging/fbtft/fb_st7789v.c | ||
221 | +++ b/drivers/staging/fbtft/fb_st7789v.c | ||
222 | @@ -85,6 +85,8 @@ enum st7789v_command { | ||
223 | */ | ||
224 | static int init_display(struct fbtft_par *par) | ||
225 | { | ||
226 | + par->fbtftops.reset(par); | ||
227 | + | ||
228 | /* turn off sleep mode */ | ||
229 | write_reg(par, MIPI_DCS_EXIT_SLEEP_MODE); | ||
230 | mdelay(120); | ||
231 | diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c | ||
232 | index 55be18cae35ba..775901abe678f 100644 | ||
233 | --- a/net/ipv6/ip6_output.c | ||
234 | +++ b/net/ipv6/ip6_output.c | ||
235 | @@ -1329,8 +1329,8 @@ static int __ip6_append_data(struct sock *sk, | ||
236 | sizeof(struct frag_hdr) : 0) + | ||
237 | rt->rt6i_nfheader_len; | ||
238 | |||
239 | - if (mtu < fragheaderlen || | ||
240 | - ((mtu - fragheaderlen) & ~7) + fragheaderlen < sizeof(struct frag_hdr)) | ||
241 | + if (mtu <= fragheaderlen || | ||
242 | + ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr)) | ||
243 | goto emsgsize; | ||
244 | |||
245 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen - | ||
246 | diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c | ||
247 | index a8866455e8b2a..b6dbec793ebbd 100644 | ||
248 | --- a/net/llc/af_llc.c | ||
249 | +++ b/net/llc/af_llc.c | ||
250 | @@ -274,6 +274,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) | ||
251 | { | ||
252 | struct sock *sk = sock->sk; | ||
253 | struct llc_sock *llc = llc_sk(sk); | ||
254 | + struct net_device *dev = NULL; | ||
255 | struct llc_sap *sap; | ||
256 | int rc = -EINVAL; | ||
257 | |||
258 | @@ -285,14 +286,14 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) | ||
259 | goto out; | ||
260 | rc = -ENODEV; | ||
261 | if (sk->sk_bound_dev_if) { | ||
262 | - llc->dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if); | ||
263 | - if (llc->dev && addr->sllc_arphrd != llc->dev->type) { | ||
264 | - dev_put(llc->dev); | ||
265 | - llc->dev = NULL; | ||
266 | + dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if); | ||
267 | + if (dev && addr->sllc_arphrd != dev->type) { | ||
268 | + dev_put(dev); | ||
269 | + dev = NULL; | ||
270 | } | ||
271 | } else | ||
272 | - llc->dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd); | ||
273 | - if (!llc->dev) | ||
274 | + dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd); | ||
275 | + if (!dev) | ||
276 | goto out; | ||
277 | rc = -EUSERS; | ||
278 | llc->laddr.lsap = llc_ui_autoport(); | ||
279 | @@ -302,6 +303,11 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) | ||
280 | sap = llc_sap_open(llc->laddr.lsap, NULL); | ||
281 | if (!sap) | ||
282 | goto out; | ||
283 | + | ||
284 | + /* Note: We do not expect errors from this point. */ | ||
285 | + llc->dev = dev; | ||
286 | + dev = NULL; | ||
287 | + | ||
288 | memcpy(llc->laddr.mac, llc->dev->dev_addr, IFHWADDRLEN); | ||
289 | memcpy(&llc->addr, addr, sizeof(llc->addr)); | ||
290 | /* assign new connection to its SAP */ | ||
291 | @@ -309,6 +315,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) | ||
292 | sock_reset_flag(sk, SOCK_ZAPPED); | ||
293 | rc = 0; | ||
294 | out: | ||
295 | + dev_put(dev); | ||
296 | return rc; | ||
297 | } | ||
298 | |||
299 | @@ -331,6 +338,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) | ||
300 | struct sockaddr_llc *addr = (struct sockaddr_llc *)uaddr; | ||
301 | struct sock *sk = sock->sk; | ||
302 | struct llc_sock *llc = llc_sk(sk); | ||
303 | + struct net_device *dev = NULL; | ||
304 | struct llc_sap *sap; | ||
305 | int rc = -EINVAL; | ||
306 | |||
307 | @@ -347,25 +355,26 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) | ||
308 | rc = -ENODEV; | ||
309 | rcu_read_lock(); | ||
310 | if (sk->sk_bound_dev_if) { | ||
311 | - llc->dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if); | ||
312 | - if (llc->dev) { | ||
313 | + dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if); | ||
314 | + if (dev) { | ||
315 | if (is_zero_ether_addr(addr->sllc_mac)) | ||
316 | - memcpy(addr->sllc_mac, llc->dev->dev_addr, | ||
317 | + memcpy(addr->sllc_mac, dev->dev_addr, | ||
318 | IFHWADDRLEN); | ||
319 | - if (addr->sllc_arphrd != llc->dev->type || | ||
320 | + if (addr->sllc_arphrd != dev->type || | ||
321 | !ether_addr_equal(addr->sllc_mac, | ||
322 | - llc->dev->dev_addr)) { | ||
323 | + dev->dev_addr)) { | ||
324 | rc = -EINVAL; | ||
325 | - llc->dev = NULL; | ||
326 | + dev = NULL; | ||
327 | } | ||
328 | } | ||
329 | - } else | ||
330 | - llc->dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd, | ||
331 | + } else { | ||
332 | + dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd, | ||
333 | addr->sllc_mac); | ||
334 | - if (llc->dev) | ||
335 | - dev_hold(llc->dev); | ||
336 | + } | ||
337 | + if (dev) | ||
338 | + dev_hold(dev); | ||
339 | rcu_read_unlock(); | ||
340 | - if (!llc->dev) | ||
341 | + if (!dev) | ||
342 | goto out; | ||
343 | if (!addr->sllc_sap) { | ||
344 | rc = -EUSERS; | ||
345 | @@ -398,6 +407,11 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) | ||
346 | goto out_put; | ||
347 | } | ||
348 | } | ||
349 | + | ||
350 | + /* Note: We do not expect errors from this point. */ | ||
351 | + llc->dev = dev; | ||
352 | + dev = NULL; | ||
353 | + | ||
354 | llc->laddr.lsap = addr->sllc_sap; | ||
355 | memcpy(llc->laddr.mac, addr->sllc_mac, IFHWADDRLEN); | ||
356 | memcpy(&llc->addr, addr, sizeof(llc->addr)); | ||
357 | @@ -408,6 +422,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) | ||
358 | out_put: | ||
359 | llc_sap_put(sap); | ||
360 | out: | ||
361 | + dev_put(dev); | ||
362 | release_sock(sk); | ||
363 | return rc; | ||
364 | } | ||
365 | diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c | ||
366 | index f37fbc71fc1db..091ac3a7b186f 100644 | ||
367 | --- a/net/mac80211/cfg.c | ||
368 | +++ b/net/mac80211/cfg.c | ||
369 | @@ -1776,13 +1776,11 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh, | ||
370 | const struct mesh_setup *setup) | ||
371 | { | ||
372 | u8 *new_ie; | ||
373 | - const u8 *old_ie; | ||
374 | struct ieee80211_sub_if_data *sdata = container_of(ifmsh, | ||
375 | struct ieee80211_sub_if_data, u.mesh); | ||
376 | |||
377 | /* allocate information elements */ | ||
378 | new_ie = NULL; | ||
379 | - old_ie = ifmsh->ie; | ||
380 | |||
381 | if (setup->ie_len) { | ||
382 | new_ie = kmemdup(setup->ie, setup->ie_len, | ||
383 | @@ -1792,7 +1790,6 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh, | ||
384 | } | ||
385 | ifmsh->ie_len = setup->ie_len; | ||
386 | ifmsh->ie = new_ie; | ||
387 | - kfree(old_ie); | ||
388 | |||
389 | /* now copy the rest of the setup parameters */ | ||
390 | ifmsh->mesh_id_len = setup->mesh_id_len; | ||
391 | diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c | ||
392 | index 9d593ecd8e870..fb14082151ce8 100644 | ||
393 | --- a/net/netfilter/nf_tables_core.c | ||
394 | +++ b/net/netfilter/nf_tables_core.c | ||
395 | @@ -127,7 +127,7 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv) | ||
396 | const struct net *net = pkt->net; | ||
397 | const struct nft_rule *rule; | ||
398 | const struct nft_expr *expr, *last; | ||
399 | - struct nft_regs regs; | ||
400 | + struct nft_regs regs = {}; | ||
401 | unsigned int stackptr = 0; | ||
402 | struct nft_jumpstack jumpstack[NFT_JUMP_STACK_SIZE]; | ||
403 | struct nft_stats *stats; | ||
404 | diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c | ||
405 | index 5c07c5be31423..a70026f42a316 100644 | ||
406 | --- a/sound/core/pcm_native.c | ||
407 | +++ b/sound/core/pcm_native.c | ||
408 | @@ -1489,21 +1489,25 @@ static int snd_pcm_do_reset(struct snd_pcm_substream *substream, int state) | ||
409 | int err = substream->ops->ioctl(substream, SNDRV_PCM_IOCTL1_RESET, NULL); | ||
410 | if (err < 0) | ||
411 | return err; | ||
412 | + snd_pcm_stream_lock_irq(substream); | ||
413 | runtime->hw_ptr_base = 0; | ||
414 | runtime->hw_ptr_interrupt = runtime->status->hw_ptr - | ||
415 | runtime->status->hw_ptr % runtime->period_size; | ||
416 | runtime->silence_start = runtime->status->hw_ptr; | ||
417 | runtime->silence_filled = 0; | ||
418 | + snd_pcm_stream_unlock_irq(substream); | ||
419 | return 0; | ||
420 | } | ||
421 | |||
422 | static void snd_pcm_post_reset(struct snd_pcm_substream *substream, int state) | ||
423 | { | ||
424 | struct snd_pcm_runtime *runtime = substream->runtime; | ||
425 | + snd_pcm_stream_lock_irq(substream); | ||
426 | runtime->control->appl_ptr = runtime->status->hw_ptr; | ||
427 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && | ||
428 | runtime->silence_size > 0) | ||
429 | snd_pcm_playback_silence(substream, ULONG_MAX); | ||
430 | + snd_pcm_stream_unlock_irq(substream); | ||
431 | } | ||
432 | |||
433 | static const struct action_ops snd_pcm_action_reset = { | ||
434 | diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c | ||
435 | index c4840fda44b40..a7f1e4ef3f887 100644 | ||
436 | --- a/sound/pci/ac97/ac97_codec.c | ||
437 | +++ b/sound/pci/ac97/ac97_codec.c | ||
438 | @@ -958,8 +958,8 @@ static int snd_ac97_ad18xx_pcm_get_volume(struct snd_kcontrol *kcontrol, struct | ||
439 | int codec = kcontrol->private_value & 3; | ||
440 | |||
441 | mutex_lock(&ac97->page_mutex); | ||
442 | - ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31); | ||
443 | - ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31); | ||
444 | + ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31); | ||
445 | + ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31); | ||
446 | mutex_unlock(&ac97->page_mutex); | ||
447 | return 0; | ||
448 | } | ||
449 | diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c | ||
450 | index 73f593526b2d7..0024145a7b5be 100644 | ||
451 | --- a/sound/pci/cmipci.c | ||
452 | +++ b/sound/pci/cmipci.c | ||
453 | @@ -315,7 +315,6 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address."); | ||
454 | #define CM_MICGAINZ 0x01 /* mic boost */ | ||
455 | #define CM_MICGAINZ_SHIFT 0 | ||
456 | |||
457 | -#define CM_REG_MIXER3 0x24 | ||
458 | #define CM_REG_AUX_VOL 0x26 | ||
459 | #define CM_VAUXL_MASK 0xf0 | ||
460 | #define CM_VAUXR_MASK 0x0f | ||
461 | @@ -3323,7 +3322,7 @@ static void snd_cmipci_remove(struct pci_dev *pci) | ||
462 | */ | ||
463 | static unsigned char saved_regs[] = { | ||
464 | CM_REG_FUNCTRL1, CM_REG_CHFORMAT, CM_REG_LEGACY_CTRL, CM_REG_MISC_CTRL, | ||
465 | - CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_MIXER3, CM_REG_PLL, | ||
466 | + CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_AUX_VOL, CM_REG_PLL, | ||
467 | CM_REG_CH0_FRAME1, CM_REG_CH0_FRAME2, | ||
468 | CM_REG_CH1_FRAME1, CM_REG_CH1_FRAME2, CM_REG_EXT_MISC, | ||
469 | CM_REG_INT_STATUS, CM_REG_INT_HLDCLR, CM_REG_FUNCTRL0, | ||
470 | diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c | ||
471 | index 1f2c69e599d9c..c94068874ea84 100644 | ||
472 | --- a/sound/usb/mixer_quirks.c | ||
473 | +++ b/sound/usb/mixer_quirks.c | ||
474 | @@ -1879,9 +1879,10 @@ void snd_usb_mixer_fu_apply_quirk(struct usb_mixer_interface *mixer, | ||
475 | if (unitid == 7 && cval->control == UAC_FU_VOLUME) | ||
476 | snd_dragonfly_quirk_db_scale(mixer, cval, kctl); | ||
477 | break; | ||
478 | - /* lowest playback value is muted on C-Media devices */ | ||
479 | - case USB_ID(0x0d8c, 0x000c): | ||
480 | - case USB_ID(0x0d8c, 0x0014): | ||
481 | + /* lowest playback value is muted on some devices */ | ||
482 | + case USB_ID(0x0d8c, 0x000c): /* C-Media */ | ||
483 | + case USB_ID(0x0d8c, 0x0014): /* C-Media */ | ||
484 | + case USB_ID(0x19f7, 0x0003): /* RODE NT-USB */ | ||
485 | if (strstr(kctl->id.name, "Playback")) | ||
486 | cval->min_mute = 1; | ||
487 | break; |