sound fixes for 5.9-rc1
All device-specific small fixes and quirks mostly for usual suspects, USB-audio and HD-audio. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAl82Nt4OHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+nQBAAiHsNLAEHRWPehlm47y4RMyXbZnze+7Qjd8P3 rx48uZrq6ga9kfVnZZiuF3w0QVBCxSPum1VzkgPGitpn9obnVdRMVm19Cn3wwD18 +sCVozUQ66VDayQxI+HP8tvIUOjz2ID9pYh4Nim2bpUDJbdes3IjFsHwQEyBwzsY EuYzSS0WLwst/GBrvZW1PtBTKbR/0jaL3AAgtAU4qCaXvxbizU7frp/AW2Y0ZDFi +50liFCXF3v+iOG9N6t6zVfWYy/74FhUQT77AfI5XgzOiL2vkIIVt652KN3S+shL fHxdCyam6NL1aFdv0vg/r09huLgdcTqY99eFrKWmfJfSJ+hZKVdWwZPIJ6dOmtRL AvnA05AUEYAHsAlbBrJ63Lcw1ky+ybzUnA+9vL/i7J1vJY67eeuRicSDXXUcOu55 frO06Z77ybAEVilztNawyuTxrYIdH0NXWQABcL6cZQovXpi5gXxmlqtLTiZodUmx RSblPdRbhuX0XxAd3PU++du/5tUfuQK5QWUmWN9Nr6ehcHi4kDLTA9PsTAQ+siN/ RCMHZ/laYuVF0UksDI0ycLjgIOCIx5I0Zr0hcEcgD48E7eUg58Gjfdx3omWI4n2M amJeBKoHIo2CYufUQeFemDY2GPxFPFGeNNUOc/hzu4Lo2j+9Ku7qNY328fj9CaAI jMxt2zU= =5zbC -----END PGP SIGNATURE----- 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"
This commit is contained in:
commit
87bd8c2b93
|
@ -1950,8 +1950,7 @@ static int snd_echo_create(struct snd_card *card,
|
||||||
snd_echo_free(chip);
|
snd_echo_free(chip);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
chip->dsp_registers = (volatile u32 __iomem *)
|
chip->dsp_registers = ioremap(chip->dsp_registers_phys, sz);
|
||||||
ioremap(chip->dsp_registers_phys, sz);
|
|
||||||
if (!chip->dsp_registers) {
|
if (!chip->dsp_registers) {
|
||||||
dev_err(chip->card->dev, "ioremap failed\n");
|
dev_err(chip->card->dev, "ioremap failed\n");
|
||||||
snd_echo_free(chip);
|
snd_echo_free(chip);
|
||||||
|
@ -2213,7 +2212,6 @@ static int snd_echo_resume(struct device *dev)
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
kfree(commpage_bak);
|
kfree(commpage_bak);
|
||||||
dev_err(dev, "resume init_hw err=%d\n", err);
|
dev_err(dev, "resume init_hw err=%d\n", err);
|
||||||
snd_echo_free(chip);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2240,7 +2238,6 @@ static int snd_echo_resume(struct device *dev)
|
||||||
if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
|
if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
|
||||||
KBUILD_MODNAME, chip)) {
|
KBUILD_MODNAME, chip)) {
|
||||||
dev_err(chip->card->dev, "cannot grab irq\n");
|
dev_err(chip->card->dev, "cannot grab irq\n");
|
||||||
snd_echo_free(chip);
|
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
chip->irq = pci->irq;
|
chip->irq = pci->irq;
|
||||||
|
|
|
@ -419,7 +419,7 @@ struct echoaudio {
|
||||||
short asic_code; /* Current ASIC code */
|
short asic_code; /* Current ASIC code */
|
||||||
u32 comm_page_phys; /* Physical address of the
|
u32 comm_page_phys; /* Physical address of the
|
||||||
* memory seen by DSP */
|
* memory seen by DSP */
|
||||||
volatile u32 __iomem *dsp_registers; /* DSP's register base */
|
u32 __iomem *dsp_registers; /* DSP's register base */
|
||||||
u32 active_mask; /* Chs. active mask or
|
u32 active_mask; /* Chs. active mask or
|
||||||
* punks out */
|
* punks out */
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
|
|
@ -1863,6 +1863,7 @@ static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t cvt_nid)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct snd_pci_quirk force_connect_list[] = {
|
static const struct snd_pci_quirk force_connect_list[] = {
|
||||||
|
SND_PCI_QUIRK(0x103c, 0x870f, "HP", 1),
|
||||||
SND_PCI_QUIRK(0x103c, 0x871a, "HP", 1),
|
SND_PCI_QUIRK(0x103c, 0x871a, "HP", 1),
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
|
@ -4125,7 +4125,7 @@ static int micmute_led_set(struct led_classdev *led_cdev,
|
||||||
struct alc_spec *spec = codec->spec;
|
struct alc_spec *spec = codec->spec;
|
||||||
|
|
||||||
alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
|
alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
|
||||||
spec->micmute_led_polarity, !!brightness);
|
spec->micmute_led_polarity, !brightness);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4160,10 +4160,6 @@ static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
|
||||||
static void alc285_fixup_hp_gpio_led(struct hda_codec *codec,
|
static void alc285_fixup_hp_gpio_led(struct hda_codec *codec,
|
||||||
const struct hda_fixup *fix, int action)
|
const struct hda_fixup *fix, int action)
|
||||||
{
|
{
|
||||||
struct alc_spec *spec = codec->spec;
|
|
||||||
|
|
||||||
spec->micmute_led_polarity = 1;
|
|
||||||
|
|
||||||
alc_fixup_hp_gpio_led(codec, action, 0x04, 0x01);
|
alc_fixup_hp_gpio_led(codec, action, 0x04, 0x01);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6159,6 +6155,7 @@ enum {
|
||||||
ALC269_FIXUP_CZC_L101,
|
ALC269_FIXUP_CZC_L101,
|
||||||
ALC269_FIXUP_LEMOTE_A1802,
|
ALC269_FIXUP_LEMOTE_A1802,
|
||||||
ALC269_FIXUP_LEMOTE_A190X,
|
ALC269_FIXUP_LEMOTE_A190X,
|
||||||
|
ALC256_FIXUP_INTEL_NUC8_RUGGED,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_fixup alc269_fixups[] = {
|
static const struct hda_fixup alc269_fixups[] = {
|
||||||
|
@ -7480,6 +7477,15 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||||
},
|
},
|
||||||
.chain_id = ALC269_FIXUP_DMIC,
|
.chain_id = ALC269_FIXUP_DMIC,
|
||||||
},
|
},
|
||||||
|
[ALC256_FIXUP_INTEL_NUC8_RUGGED] = {
|
||||||
|
.type = HDA_FIXUP_PINS,
|
||||||
|
.v.pins = (const struct hda_pintbl[]) {
|
||||||
|
{ 0x1b, 0x01a1913c }, /* use as headset mic, without its own jack detect */
|
||||||
|
{ }
|
||||||
|
},
|
||||||
|
.chained = true,
|
||||||
|
.chain_id = ALC269_FIXUP_HEADSET_MODE
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
|
@ -7777,6 +7783,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
|
SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
|
SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
|
||||||
SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
|
SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
|
||||||
|
SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Below is a quirk table taken from the old code.
|
/* Below is a quirk table taken from the old code.
|
||||||
|
|
|
@ -137,6 +137,7 @@ struct snd_usb_substream {
|
||||||
unsigned int tx_length_quirk:1; /* add length specifier to transfers */
|
unsigned int tx_length_quirk:1; /* add length specifier to transfers */
|
||||||
unsigned int fmt_type; /* USB audio format type (1-3) */
|
unsigned int fmt_type; /* USB audio format type (1-3) */
|
||||||
unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */
|
unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */
|
||||||
|
unsigned int stream_offset_adj; /* Bytes to drop from beginning of stream (for non-compliant devices) */
|
||||||
|
|
||||||
unsigned int running: 1; /* running status */
|
unsigned int running: 1; /* running status */
|
||||||
|
|
||||||
|
|
|
@ -371,6 +371,7 @@ static const struct usbmix_name_map asus_rog_map[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct usbmix_name_map lenovo_p620_rear_map[] = {
|
static const struct usbmix_name_map lenovo_p620_rear_map[] = {
|
||||||
|
{ 19, NULL, 2 }, /* FU, Volume */
|
||||||
{ 19, NULL, 12 }, /* FU, Input Gain Pad */
|
{ 19, NULL, 12 }, /* FU, Input Gain Pad */
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
|
@ -185,6 +185,7 @@ static const struct rc_config {
|
||||||
{ USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */
|
{ USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */
|
||||||
{ USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
|
{ USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
|
||||||
{ USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
|
{ USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
|
||||||
|
{ USB_ID(0x041e, 0x3263), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
|
||||||
{ USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
|
{ USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -329,7 +329,7 @@ static int snd_us16x08_bus_put(struct snd_kcontrol *kcontrol,
|
||||||
elem->cached |= 1;
|
elem->cached |= 1;
|
||||||
elem->cache_val[0] = val;
|
elem->cache_val[0] = val;
|
||||||
} else {
|
} else {
|
||||||
usb_audio_dbg(chip, "Failed to set buss param, err:%d\n", err);
|
usb_audio_dbg(chip, "Failed to set bus parameter, err:%d\n", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err > 0 ? 1 : 0;
|
return err > 0 ? 1 : 0;
|
||||||
|
|
|
@ -1420,6 +1420,12 @@ static void retire_capture_urb(struct snd_usb_substream *subs,
|
||||||
// continue;
|
// continue;
|
||||||
}
|
}
|
||||||
bytes = urb->iso_frame_desc[i].actual_length;
|
bytes = urb->iso_frame_desc[i].actual_length;
|
||||||
|
if (subs->stream_offset_adj > 0) {
|
||||||
|
unsigned int adj = min(subs->stream_offset_adj, bytes);
|
||||||
|
cp += adj;
|
||||||
|
bytes -= adj;
|
||||||
|
subs->stream_offset_adj -= adj;
|
||||||
|
}
|
||||||
frames = bytes / stride;
|
frames = bytes / stride;
|
||||||
if (!subs->txfr_quirk)
|
if (!subs->txfr_quirk)
|
||||||
bytes = frames * stride;
|
bytes = frames * stride;
|
||||||
|
|
|
@ -3558,6 +3558,62 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* PIONEER DJ DDJ-RB
|
||||||
|
* PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
|
||||||
|
* The feedback for the output is the dummy input.
|
||||||
|
*/
|
||||||
|
USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
|
||||||
|
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||||
|
.ifnum = QUIRK_ANY_INTERFACE,
|
||||||
|
.type = QUIRK_COMPOSITE,
|
||||||
|
.data = (const struct snd_usb_audio_quirk[]) {
|
||||||
|
{
|
||||||
|
.ifnum = 0,
|
||||||
|
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
|
||||||
|
.data = &(const struct audioformat) {
|
||||||
|
.formats = SNDRV_PCM_FMTBIT_S24_3LE,
|
||||||
|
.channels = 4,
|
||||||
|
.iface = 0,
|
||||||
|
.altsetting = 1,
|
||||||
|
.altset_idx = 1,
|
||||||
|
.endpoint = 0x01,
|
||||||
|
.ep_attr = USB_ENDPOINT_XFER_ISOC|
|
||||||
|
USB_ENDPOINT_SYNC_ASYNC,
|
||||||
|
.rates = SNDRV_PCM_RATE_44100,
|
||||||
|
.rate_min = 44100,
|
||||||
|
.rate_max = 44100,
|
||||||
|
.nr_rates = 1,
|
||||||
|
.rate_table = (unsigned int[]) { 44100 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ifnum = 0,
|
||||||
|
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
|
||||||
|
.data = &(const struct audioformat) {
|
||||||
|
.formats = SNDRV_PCM_FMTBIT_S24_3LE,
|
||||||
|
.channels = 2,
|
||||||
|
.iface = 0,
|
||||||
|
.altsetting = 1,
|
||||||
|
.altset_idx = 1,
|
||||||
|
.endpoint = 0x82,
|
||||||
|
.ep_attr = USB_ENDPOINT_XFER_ISOC|
|
||||||
|
USB_ENDPOINT_SYNC_ASYNC|
|
||||||
|
USB_ENDPOINT_USAGE_IMPLICIT_FB,
|
||||||
|
.rates = SNDRV_PCM_RATE_44100,
|
||||||
|
.rate_min = 44100,
|
||||||
|
.rate_max = 44100,
|
||||||
|
.nr_rates = 1,
|
||||||
|
.rate_table = (unsigned int[]) { 44100 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ifnum = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
#define ALC1220_VB_DESKTOP(vend, prod) { \
|
#define ALC1220_VB_DESKTOP(vend, prod) { \
|
||||||
USB_DEVICE(vend, prod), \
|
USB_DEVICE(vend, prod), \
|
||||||
|
@ -3662,7 +3718,13 @@ ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */
|
||||||
* with.
|
* with.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
USB_DEVICE(0x534d, 0x2109),
|
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||||
|
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||||
|
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||||
|
.idVendor = 0x534d,
|
||||||
|
.idProduct = 0x2109,
|
||||||
|
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||||
|
.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
|
||||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||||
.vendor_name = "MacroSilicon",
|
.vendor_name = "MacroSilicon",
|
||||||
.product_name = "MS2109",
|
.product_name = "MS2109",
|
||||||
|
|
|
@ -1495,6 +1495,9 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
|
||||||
case USB_ID(0x2b73, 0x000a): /* Pioneer DJ DJM-900NXS2 */
|
case USB_ID(0x2b73, 0x000a): /* Pioneer DJ DJM-900NXS2 */
|
||||||
pioneer_djm_set_format_quirk(subs);
|
pioneer_djm_set_format_quirk(subs);
|
||||||
break;
|
break;
|
||||||
|
case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */
|
||||||
|
subs->stream_offset_adj = 2;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ static void snd_usb_init_substream(struct snd_usb_stream *as,
|
||||||
subs->tx_length_quirk = as->chip->tx_length_quirk;
|
subs->tx_length_quirk = as->chip->tx_length_quirk;
|
||||||
subs->speed = snd_usb_get_speed(subs->dev);
|
subs->speed = snd_usb_get_speed(subs->dev);
|
||||||
subs->pkt_offset_adj = 0;
|
subs->pkt_offset_adj = 0;
|
||||||
|
subs->stream_offset_adj = 0;
|
||||||
|
|
||||||
snd_usb_set_pcm_ops(as->pcm, stream);
|
snd_usb_set_pcm_ops(as->pcm, stream);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue