Skip to content

Commit 2b90dcd

Browse files
committed
Merge tag 'sound-6.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "A collection of small fixes that have been gathered in the week. - Fix the missing XRUN handling in USB-audio low latency mode - Fix regression by the previous USB-audio hadening change - Clean up old SH sound driver to use the standard helpers - A few further fixes for MIDI 2.0 UMP handling - Various HD-audio and USB-audio quirks - Fix jack handling at PM on ASoC Intel AVS - Misc small fixes for ASoC SOF and Mediatek" * tag 'sound-6.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda/realtek: Fix spelling mistake "Firelfy" -> "Firefly" ASoC: mediatek: mt8188-mt6359: Remove hardcoded dmic codec ALSA: hda/realtek: fix micmute LEDs don't work on HP Laptops ALSA: usb-audio: Add extra PID for RME Digiface USB ALSA: usb-audio: Fix a DMA to stack memory bug ASoC: SOF: ipc3-topology: fix resource leaks in sof_ipc3_widget_setup_comp_dai() ALSA: hda/realtek: Add support for Samsung Galaxy Book3 360 (NP730QFG) ASoC: Intel: avs: da7219: Remove suspend_pre() and resume_post() ALSA: hda/tas2781: Fix error code tas2781_read_acpi() ALSA: hda/realtek: Enable mute and micmute LED on HP ProBook 430 G8 ALSA: usb-audio: add mixer mapping for Corsair HS80 ALSA: ump: Shut up truncated string warning ALSA: sh: Use standard helper for buffer accesses ALSA: usb-audio: Notify xrun for low-latency mode ALSA: hda/conexant: fix Z60MR100 startup pop issue ALSA: ump: Update legacy substream names upon FB info update ALSA: ump: Indicate the inactive group in legacy substream names ALSA: ump: Don't open legacy substream for an inactive group ALSA: seq: ump: Fix seq port updates per FB info notify
2 parents d9e15b2 + c34e9ab commit 2b90dcd

14 files changed

+291
-221
lines changed

sound/core/seq/seq_ump_client.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,12 @@ static void update_port_infos(struct seq_ump_client *client)
257257
continue;
258258

259259
old->addr.client = client->seq_client;
260-
old->addr.port = i;
260+
old->addr.port = ump_group_to_seq_port(i);
261261
err = snd_seq_kernel_client_ctl(client->seq_client,
262262
SNDRV_SEQ_IOCTL_GET_PORT_INFO,
263263
old);
264264
if (err < 0)
265-
return;
265+
continue;
266266
fill_port_info(new, client, &client->ump->groups[i]);
267267
if (old->capability == new->capability &&
268268
!strcmp(old->name, new->name))
@@ -271,7 +271,7 @@ static void update_port_infos(struct seq_ump_client *client)
271271
SNDRV_SEQ_IOCTL_SET_PORT_INFO,
272272
new);
273273
if (err < 0)
274-
return;
274+
continue;
275275
/* notify to system port */
276276
snd_seq_system_client_ev_port_change(client->seq_client, i);
277277
}

sound/core/ump.c

+20-6
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ static int process_legacy_output(struct snd_ump_endpoint *ump,
3737
u32 *buffer, int count);
3838
static void process_legacy_input(struct snd_ump_endpoint *ump, const u32 *src,
3939
int words);
40+
static void update_legacy_names(struct snd_ump_endpoint *ump);
4041
#else
4142
static inline int process_legacy_output(struct snd_ump_endpoint *ump,
4243
u32 *buffer, int count)
@@ -47,6 +48,9 @@ static inline void process_legacy_input(struct snd_ump_endpoint *ump,
4748
const u32 *src, int words)
4849
{
4950
}
51+
static inline void update_legacy_names(struct snd_ump_endpoint *ump)
52+
{
53+
}
5054
#endif
5155

5256
static const struct snd_rawmidi_global_ops snd_ump_rawmidi_ops = {
@@ -861,6 +865,7 @@ static int ump_handle_fb_info_msg(struct snd_ump_endpoint *ump,
861865
fill_fb_info(ump, &fb->info, buf);
862866
if (ump->parsed) {
863867
snd_ump_update_group_attrs(ump);
868+
update_legacy_names(ump);
864869
seq_notify_fb_change(ump, fb);
865870
}
866871
}
@@ -893,6 +898,7 @@ static int ump_handle_fb_name_msg(struct snd_ump_endpoint *ump,
893898
/* notify the FB name update to sequencer, too */
894899
if (ret > 0 && ump->parsed) {
895900
snd_ump_update_group_attrs(ump);
901+
update_legacy_names(ump);
896902
seq_notify_fb_change(ump, fb);
897903
}
898904
return ret;
@@ -1087,6 +1093,8 @@ static int snd_ump_legacy_open(struct snd_rawmidi_substream *substream)
10871093
guard(mutex)(&ump->open_mutex);
10881094
if (ump->legacy_substreams[dir][group])
10891095
return -EBUSY;
1096+
if (!ump->groups[group].active)
1097+
return -ENODEV;
10901098
if (dir == SNDRV_RAWMIDI_STREAM_OUTPUT) {
10911099
if (!ump->legacy_out_opens) {
10921100
err = snd_rawmidi_kernel_open(&ump->core, 0,
@@ -1254,11 +1262,20 @@ static void fill_substream_names(struct snd_ump_endpoint *ump,
12541262
name = ump->groups[idx].name;
12551263
if (!*name)
12561264
name = ump->info.name;
1257-
snprintf(s->name, sizeof(s->name), "Group %d (%.16s)",
1258-
idx + 1, name);
1265+
scnprintf(s->name, sizeof(s->name), "Group %d (%.16s)%s",
1266+
idx + 1, name,
1267+
ump->groups[idx].active ? "" : " [Inactive]");
12591268
}
12601269
}
12611270

1271+
static void update_legacy_names(struct snd_ump_endpoint *ump)
1272+
{
1273+
struct snd_rawmidi *rmidi = ump->legacy_rmidi;
1274+
1275+
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_INPUT);
1276+
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT);
1277+
}
1278+
12621279
int snd_ump_attach_legacy_rawmidi(struct snd_ump_endpoint *ump,
12631280
char *id, int device)
12641281
{
@@ -1295,10 +1312,7 @@ int snd_ump_attach_legacy_rawmidi(struct snd_ump_endpoint *ump,
12951312
rmidi->ops = &snd_ump_legacy_ops;
12961313
rmidi->private_data = ump;
12971314
ump->legacy_rmidi = rmidi;
1298-
if (input)
1299-
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_INPUT);
1300-
if (output)
1301-
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT);
1315+
update_legacy_names(ump);
13021316

13031317
ump_dbg(ump, "Created a legacy rawmidi #%d (%s)\n", device, id);
13041318
return 0;

sound/pci/hda/patch_conexant.c

+28
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ enum {
307307
CXT_FIXUP_HP_MIC_NO_PRESENCE,
308308
CXT_PINCFG_SWS_JS201D,
309309
CXT_PINCFG_TOP_SPEAKER,
310+
CXT_FIXUP_HP_A_U,
310311
};
311312

312313
/* for hda_fixup_thinkpad_acpi() */
@@ -774,6 +775,18 @@ static void cxt_setup_mute_led(struct hda_codec *codec,
774775
}
775776
}
776777

778+
static void cxt_setup_gpio_unmute(struct hda_codec *codec,
779+
unsigned int gpio_mute_mask)
780+
{
781+
if (gpio_mute_mask) {
782+
// set gpio data to 0.
783+
snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0);
784+
snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_MASK, gpio_mute_mask);
785+
snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DIRECTION, gpio_mute_mask);
786+
snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_STICKY_MASK, 0);
787+
}
788+
}
789+
777790
static void cxt_fixup_mute_led_gpio(struct hda_codec *codec,
778791
const struct hda_fixup *fix, int action)
779792
{
@@ -788,6 +801,15 @@ static void cxt_fixup_hp_zbook_mute_led(struct hda_codec *codec,
788801
cxt_setup_mute_led(codec, 0x10, 0x20);
789802
}
790803

804+
static void cxt_fixup_hp_a_u(struct hda_codec *codec,
805+
const struct hda_fixup *fix, int action)
806+
{
807+
// Init vers in BIOS mute the spk/hp by set gpio high to avoid pop noise,
808+
// so need to unmute once by clearing the gpio data when runs into the system.
809+
if (action == HDA_FIXUP_ACT_INIT)
810+
cxt_setup_gpio_unmute(codec, 0x2);
811+
}
812+
791813
/* ThinkPad X200 & co with cxt5051 */
792814
static const struct hda_pintbl cxt_pincfg_lenovo_x200[] = {
793815
{ 0x16, 0x042140ff }, /* HP (seq# overridden) */
@@ -998,6 +1020,10 @@ static const struct hda_fixup cxt_fixups[] = {
9981020
{ }
9991021
},
10001022
},
1023+
[CXT_FIXUP_HP_A_U] = {
1024+
.type = HDA_FIXUP_FUNC,
1025+
.v.func = cxt_fixup_hp_a_u,
1026+
},
10011027
};
10021028

10031029
static const struct hda_quirk cxt5045_fixups[] = {
@@ -1072,6 +1098,7 @@ static const struct hda_quirk cxt5066_fixups[] = {
10721098
SND_PCI_QUIRK(0x103c, 0x8457, "HP Z2 G4 mini", CXT_FIXUP_HP_MIC_NO_PRESENCE),
10731099
SND_PCI_QUIRK(0x103c, 0x8458, "HP Z2 G4 mini premium", CXT_FIXUP_HP_MIC_NO_PRESENCE),
10741100
SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
1101+
SND_PCI_QUIRK(0x14f1, 0x0252, "MBX-Z60MR100", CXT_FIXUP_HP_A_U),
10751102
SND_PCI_QUIRK(0x14f1, 0x0265, "SWS JS201D", CXT_PINCFG_SWS_JS201D),
10761103
SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT_FIXUP_OLPC_XO),
10771104
SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),
@@ -1117,6 +1144,7 @@ static const struct hda_model_fixup cxt5066_fixup_models[] = {
11171144
{ .id = CXT_PINCFG_LENOVO_NOTEBOOK, .name = "lenovo-20149" },
11181145
{ .id = CXT_PINCFG_SWS_JS201D, .name = "sws-js201d" },
11191146
{ .id = CXT_PINCFG_TOP_SPEAKER, .name = "sirius-top-speaker" },
1147+
{ .id = CXT_FIXUP_HP_A_U, .name = "HP-U-support" },
11201148
{}
11211149
};
11221150

sound/pci/hda/patch_realtek.c

+8
Original file line numberDiff line numberDiff line change
@@ -10340,6 +10340,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
1034010340
SND_PCI_QUIRK(0x103c, 0x87b7, "HP Laptop 14-fq0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
1034110341
SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
1034210342
SND_PCI_QUIRK(0x103c, 0x87d3, "HP Laptop 15-gw0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
10343+
SND_PCI_QUIRK(0x103c, 0x87df, "HP ProBook 430 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
1034310344
SND_PCI_QUIRK(0x103c, 0x87e5, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
1034410345
SND_PCI_QUIRK(0x103c, 0x87e7, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
1034510346
SND_PCI_QUIRK(0x103c, 0x87f1, "HP ProBook 630 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
@@ -10521,7 +10522,13 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
1052110522
SND_PCI_QUIRK(0x103c, 0x8cdf, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
1052210523
SND_PCI_QUIRK(0x103c, 0x8ce0, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
1052310524
SND_PCI_QUIRK(0x103c, 0x8cf5, "HP ZBook Studio 16", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
10525+
SND_PCI_QUIRK(0x103c, 0x8d01, "HP ZBook Power 14 G12", ALC285_FIXUP_HP_GPIO_LED),
1052410526
SND_PCI_QUIRK(0x103c, 0x8d84, "HP EliteBook X G1i", ALC285_FIXUP_HP_GPIO_LED),
10527+
SND_PCI_QUIRK(0x103c, 0x8d91, "HP ZBook Firefly 14 G12", ALC285_FIXUP_HP_GPIO_LED),
10528+
SND_PCI_QUIRK(0x103c, 0x8d92, "HP ZBook Firefly 16 G12", ALC285_FIXUP_HP_GPIO_LED),
10529+
SND_PCI_QUIRK(0x103c, 0x8e18, "HP ZBook Firefly 14 G12A", ALC285_FIXUP_HP_GPIO_LED),
10530+
SND_PCI_QUIRK(0x103c, 0x8e19, "HP ZBook Firefly 14 G12A", ALC285_FIXUP_HP_GPIO_LED),
10531+
SND_PCI_QUIRK(0x103c, 0x8e1a, "HP ZBook Firefly 14 G12A", ALC285_FIXUP_HP_GPIO_LED),
1052510532
SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
1052610533
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
1052710534
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
@@ -10676,6 +10683,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
1067610683
SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_AMP),
1067710684
SND_PCI_QUIRK(0x144d, 0xc832, "Samsung Galaxy Book Flex Alpha (NP730QCJ)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
1067810685
SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP),
10686+
SND_PCI_QUIRK(0x144d, 0xca06, "Samsung Galaxy Book3 360 (NP730QFG)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
1067910687
SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP),
1068010688
SND_PCI_QUIRK(0x144d, 0xc870, "Samsung Galaxy Book2 Pro (NP950XED)", ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS),
1068110689
SND_PCI_QUIRK(0x144d, 0xc872, "Samsung Galaxy Book2 Pro (NP950XEE)", ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS),

sound/pci/hda/tas2781_hda_i2c.c

+1
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ static int tas2781_read_acpi(struct tasdevice_priv *p, const char *hid)
143143
sub = acpi_get_subsystem_id(ACPI_HANDLE(physdev));
144144
if (IS_ERR(sub)) {
145145
dev_err(p->dev, "Failed to get SUBSYS ID.\n");
146+
ret = PTR_ERR(sub);
146147
goto err;
147148
}
148149
/* Speaker id was needed for ASUS projects. */

sound/sh/sh_dac_audio.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ static int snd_sh_dac_pcm_copy(struct snd_pcm_substream *substream,
163163
/* channel is not used (interleaved data) */
164164
struct snd_sh_dac *chip = snd_pcm_substream_chip(substream);
165165

166-
if (copy_from_iter_toio(chip->data_buffer + pos, src, count))
166+
if (copy_from_iter(chip->data_buffer + pos, src, count) != count)
167167
return -EFAULT;
168168
chip->buffer_end = chip->data_buffer + pos + count;
169169

@@ -182,7 +182,7 @@ static int snd_sh_dac_pcm_silence(struct snd_pcm_substream *substream,
182182
/* channel is not used (interleaved data) */
183183
struct snd_sh_dac *chip = snd_pcm_substream_chip(substream);
184184

185-
memset_io(chip->data_buffer + pos, 0, count);
185+
memset(chip->data_buffer + pos, 0, count);
186186
chip->buffer_end = chip->data_buffer + pos + count;
187187

188188
if (chip->empty) {
@@ -211,7 +211,6 @@ static const struct snd_pcm_ops snd_sh_dac_pcm_ops = {
211211
.pointer = snd_sh_dac_pcm_pointer,
212212
.copy = snd_sh_dac_pcm_copy,
213213
.fill_silence = snd_sh_dac_pcm_silence,
214-
.mmap = snd_pcm_lib_mmap_iomem,
215214
};
216215

217216
static int snd_sh_dac_pcm(struct snd_sh_dac *chip, int device)

sound/soc/intel/avs/boards/da7219.c

-17
Original file line numberDiff line numberDiff line change
@@ -209,21 +209,6 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
209209
return 0;
210210
}
211211

212-
static int avs_card_suspend_pre(struct snd_soc_card *card)
213-
{
214-
struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, DA7219_DAI_NAME);
215-
216-
return snd_soc_component_set_jack(codec_dai->component, NULL, NULL);
217-
}
218-
219-
static int avs_card_resume_post(struct snd_soc_card *card)
220-
{
221-
struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, DA7219_DAI_NAME);
222-
struct snd_soc_jack *jack = snd_soc_card_get_drvdata(card);
223-
224-
return snd_soc_component_set_jack(codec_dai->component, jack, NULL);
225-
}
226-
227212
static int avs_da7219_probe(struct platform_device *pdev)
228213
{
229214
struct snd_soc_dai_link *dai_link;
@@ -255,8 +240,6 @@ static int avs_da7219_probe(struct platform_device *pdev)
255240
card->name = "avs_da7219";
256241
card->dev = dev;
257242
card->owner = THIS_MODULE;
258-
card->suspend_pre = avs_card_suspend_pre;
259-
card->resume_post = avs_card_resume_post;
260243
card->dai_link = dai_link;
261244
card->num_links = 1;
262245
card->controls = card_controls;

sound/soc/mediatek/mt8188/mt8188-mt6359.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,7 @@ SND_SOC_DAILINK_DEFS(pcm1,
188188
SND_SOC_DAILINK_DEFS(ul_src,
189189
DAILINK_COMP_ARRAY(COMP_CPU("UL_SRC")),
190190
DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
191-
"mt6359-snd-codec-aif1"),
192-
COMP_CODEC("dmic-codec",
193-
"dmic-hifi")),
191+
"mt6359-snd-codec-aif1")),
194192
DAILINK_COMP_ARRAY(COMP_EMPTY()));
195193

196194
SND_SOC_DAILINK_DEFS(AFE_SOF_DL2,

sound/soc/sof/ipc3-topology.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -1588,22 +1588,23 @@ static int sof_ipc3_widget_setup_comp_dai(struct snd_sof_widget *swidget)
15881588
ret = sof_update_ipc_object(scomp, comp_dai, SOF_DAI_TOKENS, swidget->tuples,
15891589
swidget->num_tuples, sizeof(*comp_dai), 1);
15901590
if (ret < 0)
1591-
goto free;
1591+
goto free_comp;
15921592

15931593
/* update comp_tokens */
15941594
ret = sof_update_ipc_object(scomp, &comp_dai->config, SOF_COMP_TOKENS,
15951595
swidget->tuples, swidget->num_tuples,
15961596
sizeof(comp_dai->config), 1);
15971597
if (ret < 0)
1598-
goto free;
1598+
goto free_comp;
15991599

16001600
/* Subtract the base to match the FW dai index. */
16011601
if (comp_dai->type == SOF_DAI_INTEL_ALH) {
16021602
if (comp_dai->dai_index < INTEL_ALH_DAI_INDEX_BASE) {
16031603
dev_err(sdev->dev,
16041604
"Invalid ALH dai index %d, only Pin numbers >= %d can be used\n",
16051605
comp_dai->dai_index, INTEL_ALH_DAI_INDEX_BASE);
1606-
return -EINVAL;
1606+
ret = -EINVAL;
1607+
goto free_comp;
16071608
}
16081609
comp_dai->dai_index -= INTEL_ALH_DAI_INDEX_BASE;
16091610
}

sound/usb/endpoint.c

+11-3
Original file line numberDiff line numberDiff line change
@@ -403,10 +403,15 @@ static int prepare_inbound_urb(struct snd_usb_endpoint *ep,
403403
static void notify_xrun(struct snd_usb_endpoint *ep)
404404
{
405405
struct snd_usb_substream *data_subs;
406+
struct snd_pcm_substream *psubs;
406407

407408
data_subs = READ_ONCE(ep->data_subs);
408-
if (data_subs && data_subs->pcm_substream)
409-
snd_pcm_stop_xrun(data_subs->pcm_substream);
409+
if (!data_subs)
410+
return;
411+
psubs = data_subs->pcm_substream;
412+
if (psubs && psubs->runtime &&
413+
psubs->runtime->state == SNDRV_PCM_STATE_RUNNING)
414+
snd_pcm_stop_xrun(psubs);
410415
}
411416

412417
static struct snd_usb_packet_info *
@@ -562,7 +567,10 @@ static void snd_complete_urb(struct urb *urb)
562567
push_back_to_ready_list(ep, ctx);
563568
clear_bit(ctx->index, &ep->active_mask);
564569
snd_usb_queue_pending_output_urbs(ep, false);
565-
atomic_dec(&ep->submitted_urbs); /* decrement at last */
570+
/* decrement at last, and check xrun */
571+
if (atomic_dec_and_test(&ep->submitted_urbs) &&
572+
!snd_usb_endpoint_implicit_feedback_sink(ep))
573+
notify_xrun(ep);
566574
return;
567575
}
568576

sound/usb/mixer_maps.c

+10
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,16 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
621621
.id = USB_ID(0x1b1c, 0x0a42),
622622
.map = corsair_virtuoso_map,
623623
},
624+
{
625+
/* Corsair HS80 RGB Wireless (wired mode) */
626+
.id = USB_ID(0x1b1c, 0x0a6a),
627+
.map = corsair_virtuoso_map,
628+
},
629+
{
630+
/* Corsair HS80 RGB Wireless (wireless mode) */
631+
.id = USB_ID(0x1b1c, 0x0a6b),
632+
.map = corsair_virtuoso_map,
633+
},
624634
{ /* Gigabyte TRX40 Aorus Master (rear panel + front mic) */
625635
.id = USB_ID(0x0414, 0xa001),
626636
.map = aorus_master_alc1220vb_map,

sound/usb/mixer_quirks.c

+1
Original file line numberDiff line numberDiff line change
@@ -4116,6 +4116,7 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
41164116
err = snd_bbfpro_controls_create(mixer);
41174117
break;
41184118
case USB_ID(0x2a39, 0x3f8c): /* RME Digiface USB */
4119+
case USB_ID(0x2a39, 0x3fa0): /* RME Digiface USB (alternate) */
41194120
err = snd_rme_digiface_controls_create(mixer);
41204121
break;
41214122
case USB_ID(0x2b73, 0x0017): /* Pioneer DJ DJM-250MK2 */

0 commit comments

Comments
 (0)