Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-fix-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"All device-specific small fixes and quirks mostly for usual suspects,
USB-audio and HD-audio"

* tag 'sound-fix-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: echoaudio: Fix potential Oops in snd_echo_resume()
ALSA: hda/hdmi: Use force connectivity quirk on another HP desktop
ALSA: hda/realtek - Fix unused variable warning
ALSA: hda - reverse the setting value in the micmute_led_set
ALSA: echoaduio: Drop superfluous volatile modifier
ALSA: usb-audio: Disable Lenovo P620 Rear line-in volume control
ALSA: usb-audio: add quirk for Pioneer DDJ-RB
ALSA: usb-audio: work around streaming quirk for MacroSilicon MS2109
ALSA: hda - fix the micmute led status for Lenovo ThinkCentre AIO
ALSA: usb-audio: fix overeager device match for MacroSilicon MS2109
ALSA: hda/realtek: Fix pin default on Intel NUC 8 Rugged
ALSA: usb-audio: Creative USB X-Fi Pro SB1095 volume knob support
ALSA: usb-audio: fix spelling mistake "buss" -> "bus"

+92 -12
+1 -4
sound/pci/echoaudio/echoaudio.c
··· 1950 1950 snd_echo_free(chip); 1951 1951 return -EBUSY; 1952 1952 } 1953 - chip->dsp_registers = (volatile u32 __iomem *) 1954 - ioremap(chip->dsp_registers_phys, sz); 1953 + chip->dsp_registers = ioremap(chip->dsp_registers_phys, sz); 1955 1954 if (!chip->dsp_registers) { 1956 1955 dev_err(chip->card->dev, "ioremap failed\n"); 1957 1956 snd_echo_free(chip); ··· 2212 2213 if (err < 0) { 2213 2214 kfree(commpage_bak); 2214 2215 dev_err(dev, "resume init_hw err=%d\n", err); 2215 - snd_echo_free(chip); 2216 2216 return err; 2217 2217 } 2218 2218 ··· 2238 2240 if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED, 2239 2241 KBUILD_MODNAME, chip)) { 2240 2242 dev_err(chip->card->dev, "cannot grab irq\n"); 2241 - snd_echo_free(chip); 2242 2243 return -EBUSY; 2243 2244 } 2244 2245 chip->irq = pci->irq;
+1 -1
sound/pci/echoaudio/echoaudio.h
··· 419 419 short asic_code; /* Current ASIC code */ 420 420 u32 comm_page_phys; /* Physical address of the 421 421 * memory seen by DSP */ 422 - volatile u32 __iomem *dsp_registers; /* DSP's register base */ 422 + u32 __iomem *dsp_registers; /* DSP's register base */ 423 423 u32 active_mask; /* Chs. active mask or 424 424 * punks out */ 425 425 #ifdef CONFIG_PM_SLEEP
+1
sound/pci/hda/patch_hdmi.c
··· 1863 1863 } 1864 1864 1865 1865 static const struct snd_pci_quirk force_connect_list[] = { 1866 + SND_PCI_QUIRK(0x103c, 0x870f, "HP", 1), 1866 1867 SND_PCI_QUIRK(0x103c, 0x871a, "HP", 1), 1867 1868 {} 1868 1869 };
+12 -5
sound/pci/hda/patch_realtek.c
··· 4125 4125 struct alc_spec *spec = codec->spec; 4126 4126 4127 4127 alc_update_gpio_led(codec, spec->gpio_mic_led_mask, 4128 - spec->micmute_led_polarity, !!brightness); 4128 + spec->micmute_led_polarity, !brightness); 4129 4129 return 0; 4130 4130 } 4131 4131 ··· 4160 4160 static void alc285_fixup_hp_gpio_led(struct hda_codec *codec, 4161 4161 const struct hda_fixup *fix, int action) 4162 4162 { 4163 - struct alc_spec *spec = codec->spec; 4164 - 4165 - spec->micmute_led_polarity = 1; 4166 - 4167 4163 alc_fixup_hp_gpio_led(codec, action, 0x04, 0x01); 4168 4164 } 4169 4165 ··· 6155 6159 ALC269_FIXUP_CZC_L101, 6156 6160 ALC269_FIXUP_LEMOTE_A1802, 6157 6161 ALC269_FIXUP_LEMOTE_A190X, 6162 + ALC256_FIXUP_INTEL_NUC8_RUGGED, 6158 6163 }; 6159 6164 6160 6165 static const struct hda_fixup alc269_fixups[] = { ··· 7477 7480 }, 7478 7481 .chain_id = ALC269_FIXUP_DMIC, 7479 7482 }, 7483 + [ALC256_FIXUP_INTEL_NUC8_RUGGED] = { 7484 + .type = HDA_FIXUP_PINS, 7485 + .v.pins = (const struct hda_pintbl[]) { 7486 + { 0x1b, 0x01a1913c }, /* use as headset mic, without its own jack detect */ 7487 + { } 7488 + }, 7489 + .chained = true, 7490 + .chain_id = ALC269_FIXUP_HEADSET_MODE 7491 + }, 7480 7492 }; 7481 7493 7482 7494 static const struct snd_pci_quirk alc269_fixup_tbl[] = { ··· 7783 7777 SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE), 7784 7778 SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802), 7785 7779 SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X), 7780 + SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED), 7786 7781 7787 7782 #if 0 7788 7783 /* Below is a quirk table taken from the old code.
+1
sound/usb/card.h
··· 137 137 unsigned int tx_length_quirk:1; /* add length specifier to transfers */ 138 138 unsigned int fmt_type; /* USB audio format type (1-3) */ 139 139 unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */ 140 + unsigned int stream_offset_adj; /* Bytes to drop from beginning of stream (for non-compliant devices) */ 140 141 141 142 unsigned int running: 1; /* running status */ 142 143
+1
sound/usb/mixer_maps.c
··· 371 371 }; 372 372 373 373 static const struct usbmix_name_map lenovo_p620_rear_map[] = { 374 + { 19, NULL, 2 }, /* FU, Volume */ 374 375 { 19, NULL, 12 }, /* FU, Input Gain Pad */ 375 376 {} 376 377 };
+1
sound/usb/mixer_quirks.c
··· 185 185 { USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */ 186 186 { USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ 187 187 { USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ 188 + { USB_ID(0x041e, 0x3263), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ 188 189 { USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */ 189 190 }; 190 191
+1 -1
sound/usb/mixer_us16x08.c
··· 329 329 elem->cached |= 1; 330 330 elem->cache_val[0] = val; 331 331 } else { 332 - usb_audio_dbg(chip, "Failed to set buss param, err:%d\n", err); 332 + usb_audio_dbg(chip, "Failed to set bus parameter, err:%d\n", err); 333 333 } 334 334 335 335 return err > 0 ? 1 : 0;
+6
sound/usb/pcm.c
··· 1420 1420 // continue; 1421 1421 } 1422 1422 bytes = urb->iso_frame_desc[i].actual_length; 1423 + if (subs->stream_offset_adj > 0) { 1424 + unsigned int adj = min(subs->stream_offset_adj, bytes); 1425 + cp += adj; 1426 + bytes -= adj; 1427 + subs->stream_offset_adj -= adj; 1428 + } 1423 1429 frames = bytes / stride; 1424 1430 if (!subs->txfr_quirk) 1425 1431 bytes = frames * stride;
+63 -1
sound/usb/quirks-table.h
··· 3558 3558 } 3559 3559 } 3560 3560 }, 3561 + { 3562 + /* 3563 + * PIONEER DJ DDJ-RB 3564 + * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3565 + * The feedback for the output is the dummy input. 3566 + */ 3567 + USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3568 + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3569 + .ifnum = QUIRK_ANY_INTERFACE, 3570 + .type = QUIRK_COMPOSITE, 3571 + .data = (const struct snd_usb_audio_quirk[]) { 3572 + { 3573 + .ifnum = 0, 3574 + .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3575 + .data = &(const struct audioformat) { 3576 + .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3577 + .channels = 4, 3578 + .iface = 0, 3579 + .altsetting = 1, 3580 + .altset_idx = 1, 3581 + .endpoint = 0x01, 3582 + .ep_attr = USB_ENDPOINT_XFER_ISOC| 3583 + USB_ENDPOINT_SYNC_ASYNC, 3584 + .rates = SNDRV_PCM_RATE_44100, 3585 + .rate_min = 44100, 3586 + .rate_max = 44100, 3587 + .nr_rates = 1, 3588 + .rate_table = (unsigned int[]) { 44100 } 3589 + } 3590 + }, 3591 + { 3592 + .ifnum = 0, 3593 + .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3594 + .data = &(const struct audioformat) { 3595 + .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3596 + .channels = 2, 3597 + .iface = 0, 3598 + .altsetting = 1, 3599 + .altset_idx = 1, 3600 + .endpoint = 0x82, 3601 + .ep_attr = USB_ENDPOINT_XFER_ISOC| 3602 + USB_ENDPOINT_SYNC_ASYNC| 3603 + USB_ENDPOINT_USAGE_IMPLICIT_FB, 3604 + .rates = SNDRV_PCM_RATE_44100, 3605 + .rate_min = 44100, 3606 + .rate_max = 44100, 3607 + .nr_rates = 1, 3608 + .rate_table = (unsigned int[]) { 44100 } 3609 + } 3610 + }, 3611 + { 3612 + .ifnum = -1 3613 + } 3614 + } 3615 + } 3616 + }, 3561 3617 3562 3618 #define ALC1220_VB_DESKTOP(vend, prod) { \ 3563 3619 USB_DEVICE(vend, prod), \ ··· 3718 3662 * with. 3719 3663 */ 3720 3664 { 3721 - USB_DEVICE(0x534d, 0x2109), 3665 + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | 3666 + USB_DEVICE_ID_MATCH_INT_CLASS | 3667 + USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3668 + .idVendor = 0x534d, 3669 + .idProduct = 0x2109, 3670 + .bInterfaceClass = USB_CLASS_AUDIO, 3671 + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, 3722 3672 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3723 3673 .vendor_name = "MacroSilicon", 3724 3674 .product_name = "MS2109",
+3
sound/usb/quirks.c
··· 1495 1495 case USB_ID(0x2b73, 0x000a): /* Pioneer DJ DJM-900NXS2 */ 1496 1496 pioneer_djm_set_format_quirk(subs); 1497 1497 break; 1498 + case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */ 1499 + subs->stream_offset_adj = 2; 1500 + break; 1498 1501 } 1499 1502 } 1500 1503
+1
sound/usb/stream.c
··· 94 94 subs->tx_length_quirk = as->chip->tx_length_quirk; 95 95 subs->speed = snd_usb_get_speed(subs->dev); 96 96 subs->pkt_offset_adj = 0; 97 + subs->stream_offset_adj = 0; 97 98 98 99 snd_usb_set_pcm_ops(as->pcm, stream); 99 100