Skip to content

Commit 7d88cc8

Browse files
committed
Merge tag 'sound-6.10-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "Lots of small fixes: - A race fix for debugfs handling in ALSA core - A series of corrections for MIDI2 core format conversions - ASoC Intel fixes for 16 bit DMIC config - Updates for missing module parameters in ASoC code - HD-audio quirk, Cirrus codec fix, etc minor fixes" * tag 'sound-6.10-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (26 commits) ALSA: seq: ump: Fix swapped song position pointer data ASoC: SOF: ipc4-topology: Adjust the params based on DAI formats ASoC: SOF: ipc4-topology: Improve readability of sof_ipc4_prepare_dai_copier() ASoC: SOF: ipc4-topology/pcm: Rename sof_ipc4_copier_is_single_format() ASoC: SOF: ipc4-topology: Print out the channel count in sof_ipc4_dbg_audio_format ASoC: SOF: ipc4-topology: Add support for NHLT with 16-bit only DMIC blob ALSA: seq: Fix yet another spot for system message conversion ALSA: ump: Set default protocol when not given explicitly ALSA: ump: Don't accept an invalid UMP protocol number ASoC: SOF: ipc4-topology: Fix input format query of process modules without base extension ASoC: Intel: sof-sdw: fix missing SPI_MASTER dependency ALSA: pcm: fix typo in comment ALSA: ump: Don't clear bank selection after sending a program change ALSA: seq: Fix incorrect UMP type for system messages ALSA/hda: intel-dsp-config: reduce log verbosity ALSA: seq: Don't clear bank selection at event -> UMP MIDI2 conversion ALSA: seq: Fix missing bank setup between MIDI1/MIDI2 UMP conversion ASoC: SOF: add missing MODULE_DESCRIPTION() ASoC: SOF: reorder MODULE_ definitions ASoC: SOF: AMD: group all module related information ...
2 parents 87895a6 + 310fa3e commit 7d88cc8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+257
-117
lines changed

MAINTAINERS

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5188,7 +5188,6 @@ F: Documentation/devicetree/bindings/media/i2c/chrontel,ch7322.yaml
51885188
F: drivers/media/cec/i2c/ch7322.c
51895189

51905190
CIRRUS LOGIC AUDIO CODEC DRIVERS
5191-
M: James Schulman <[email protected]>
51925191
M: David Rhodes <[email protected]>
51935192
M: Richard Fitzgerald <[email protected]>
51945193
L: [email protected] (moderated for non-subscribers)

include/sound/pcm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ struct snd_pcm_ops {
124124
#define SNDRV_PCM_RATE_768000 (1U<<16) /* 768000Hz */
125125

126126
#define SNDRV_PCM_RATE_CONTINUOUS (1U<<30) /* continuous range */
127-
#define SNDRV_PCM_RATE_KNOT (1U<<31) /* supports more non-continuos rates */
127+
#define SNDRV_PCM_RATE_KNOT (1U<<31) /* supports more non-continuous rates */
128128

129129
#define SNDRV_PCM_RATE_8000_44100 (SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_11025|\
130130
SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_22050|\

sound/core/init.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,11 @@ void snd_card_disconnect(struct snd_card *card)
537537
synchronize_irq(card->sync_irq);
538538

539539
snd_info_card_disconnect(card);
540+
#ifdef CONFIG_SND_DEBUG
541+
debugfs_remove(card->debugfs_root);
542+
card->debugfs_root = NULL;
543+
#endif
544+
540545
if (card->registered) {
541546
device_del(&card->card_dev);
542547
card->registered = false;
@@ -586,10 +591,6 @@ static int snd_card_do_free(struct snd_card *card)
586591
dev_warn(card->dev, "unable to free card info\n");
587592
/* Not fatal error */
588593
}
589-
#ifdef CONFIG_SND_DEBUG
590-
debugfs_remove(card->debugfs_root);
591-
card->debugfs_root = NULL;
592-
#endif
593594
if (card->release_completion)
594595
complete(card->release_completion);
595596
if (!card->managed)

sound/core/jack.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ static const int jack_switch_types[SND_JACK_SWITCH_TYPES] = {
3737
};
3838
#endif /* CONFIG_SND_JACK_INPUT_DEV */
3939

40+
static void snd_jack_remove_debugfs(struct snd_jack *jack);
41+
4042
static int snd_jack_dev_disconnect(struct snd_device *device)
4143
{
42-
#ifdef CONFIG_SND_JACK_INPUT_DEV
4344
struct snd_jack *jack = device->device_data;
4445

46+
snd_jack_remove_debugfs(jack);
47+
48+
#ifdef CONFIG_SND_JACK_INPUT_DEV
4549
guard(mutex)(&jack->input_dev_lock);
4650
if (!jack->input_dev)
4751
return 0;
@@ -381,10 +385,14 @@ static int snd_jack_debugfs_add_inject_node(struct snd_jack *jack,
381385
return 0;
382386
}
383387

384-
static void snd_jack_debugfs_clear_inject_node(struct snd_jack_kctl *jack_kctl)
388+
static void snd_jack_remove_debugfs(struct snd_jack *jack)
385389
{
386-
debugfs_remove(jack_kctl->jack_debugfs_root);
387-
jack_kctl->jack_debugfs_root = NULL;
390+
struct snd_jack_kctl *jack_kctl;
391+
392+
list_for_each_entry(jack_kctl, &jack->kctl_list, list) {
393+
debugfs_remove(jack_kctl->jack_debugfs_root);
394+
jack_kctl->jack_debugfs_root = NULL;
395+
}
388396
}
389397
#else /* CONFIG_SND_JACK_INJECTION_DEBUG */
390398
static int snd_jack_debugfs_add_inject_node(struct snd_jack *jack,
@@ -393,7 +401,7 @@ static int snd_jack_debugfs_add_inject_node(struct snd_jack *jack,
393401
return 0;
394402
}
395403

396-
static void snd_jack_debugfs_clear_inject_node(struct snd_jack_kctl *jack_kctl)
404+
static void snd_jack_remove_debugfs(struct snd_jack *jack)
397405
{
398406
}
399407
#endif /* CONFIG_SND_JACK_INJECTION_DEBUG */
@@ -404,7 +412,6 @@ static void snd_jack_kctl_private_free(struct snd_kcontrol *kctl)
404412

405413
jack_kctl = kctl->private_data;
406414
if (jack_kctl) {
407-
snd_jack_debugfs_clear_inject_node(jack_kctl);
408415
list_del(&jack_kctl->list);
409416
kfree(jack_kctl);
410417
}
@@ -497,8 +504,8 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
497504
.dev_free = snd_jack_dev_free,
498505
#ifdef CONFIG_SND_JACK_INPUT_DEV
499506
.dev_register = snd_jack_dev_register,
500-
.dev_disconnect = snd_jack_dev_disconnect,
501507
#endif /* CONFIG_SND_JACK_INPUT_DEV */
508+
.dev_disconnect = snd_jack_dev_disconnect,
502509
};
503510

504511
if (initial_kctl) {

sound/core/seq/seq_ump_convert.c

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ static void ump_system_to_one_param_ev(const union snd_ump_midi1_msg *val,
157157
static void ump_system_to_songpos_ev(const union snd_ump_midi1_msg *val,
158158
struct snd_seq_event *ev)
159159
{
160-
ev->data.control.value = (val->system.parm1 << 7) | val->system.parm2;
160+
ev->data.control.value = (val->system.parm2 << 7) | val->system.parm1;
161161
}
162162

163163
/* Encoders for 0xf0 - 0xff */
@@ -368,6 +368,7 @@ static int cvt_ump_midi1_to_midi2(struct snd_seq_client *dest,
368368
struct snd_seq_ump_event ev_cvt;
369369
const union snd_ump_midi1_msg *midi1 = (const union snd_ump_midi1_msg *)event->ump;
370370
union snd_ump_midi2_msg *midi2 = (union snd_ump_midi2_msg *)ev_cvt.ump;
371+
struct snd_seq_ump_midi2_bank *cc;
371372

372373
ev_cvt = *event;
373374
memset(&ev_cvt.ump, 0, sizeof(ev_cvt.ump));
@@ -387,11 +388,29 @@ static int cvt_ump_midi1_to_midi2(struct snd_seq_client *dest,
387388
midi2->paf.data = upscale_7_to_32bit(midi1->paf.data);
388389
break;
389390
case UMP_MSG_STATUS_CC:
391+
cc = &dest_port->midi2_bank[midi1->note.channel];
392+
switch (midi1->cc.index) {
393+
case UMP_CC_BANK_SELECT:
394+
cc->bank_set = 1;
395+
cc->cc_bank_msb = midi1->cc.data;
396+
return 0; // skip
397+
case UMP_CC_BANK_SELECT_LSB:
398+
cc->bank_set = 1;
399+
cc->cc_bank_lsb = midi1->cc.data;
400+
return 0; // skip
401+
}
390402
midi2->cc.index = midi1->cc.index;
391403
midi2->cc.data = upscale_7_to_32bit(midi1->cc.data);
392404
break;
393405
case UMP_MSG_STATUS_PROGRAM:
394406
midi2->pg.program = midi1->pg.program;
407+
cc = &dest_port->midi2_bank[midi1->note.channel];
408+
if (cc->bank_set) {
409+
midi2->pg.bank_valid = 1;
410+
midi2->pg.bank_msb = cc->cc_bank_msb;
411+
midi2->pg.bank_lsb = cc->cc_bank_lsb;
412+
cc->bank_set = 0;
413+
}
395414
break;
396415
case UMP_MSG_STATUS_CHANNEL_PRESSURE:
397416
midi2->caf.data = upscale_7_to_32bit(midi1->caf.data);
@@ -419,6 +438,7 @@ static int cvt_ump_midi2_to_midi1(struct snd_seq_client *dest,
419438
struct snd_seq_ump_event ev_cvt;
420439
union snd_ump_midi1_msg *midi1 = (union snd_ump_midi1_msg *)ev_cvt.ump;
421440
const union snd_ump_midi2_msg *midi2 = (const union snd_ump_midi2_msg *)event->ump;
441+
int err;
422442
u16 v;
423443

424444
ev_cvt = *event;
@@ -443,6 +463,24 @@ static int cvt_ump_midi2_to_midi1(struct snd_seq_client *dest,
443463
midi1->cc.data = downscale_32_to_7bit(midi2->cc.data);
444464
break;
445465
case UMP_MSG_STATUS_PROGRAM:
466+
if (midi2->pg.bank_valid) {
467+
midi1->cc.status = UMP_MSG_STATUS_CC;
468+
midi1->cc.index = UMP_CC_BANK_SELECT;
469+
midi1->cc.data = midi2->pg.bank_msb;
470+
err = __snd_seq_deliver_single_event(dest, dest_port,
471+
(struct snd_seq_event *)&ev_cvt,
472+
atomic, hop);
473+
if (err < 0)
474+
return err;
475+
midi1->cc.index = UMP_CC_BANK_SELECT_LSB;
476+
midi1->cc.data = midi2->pg.bank_lsb;
477+
err = __snd_seq_deliver_single_event(dest, dest_port,
478+
(struct snd_seq_event *)&ev_cvt,
479+
atomic, hop);
480+
if (err < 0)
481+
return err;
482+
midi1->note.status = midi2->note.status;
483+
}
446484
midi1->pg.program = midi2->pg.program;
447485
break;
448486
case UMP_MSG_STATUS_CHANNEL_PRESSURE:
@@ -691,6 +729,7 @@ static int system_ev_to_ump_midi1(const struct snd_seq_event *event,
691729
union snd_ump_midi1_msg *data,
692730
unsigned char status)
693731
{
732+
data->system.type = UMP_MSG_TYPE_SYSTEM; // override
694733
data->system.status = status;
695734
return 1;
696735
}
@@ -701,6 +740,7 @@ static int system_1p_ev_to_ump_midi1(const struct snd_seq_event *event,
701740
union snd_ump_midi1_msg *data,
702741
unsigned char status)
703742
{
743+
data->system.type = UMP_MSG_TYPE_SYSTEM; // override
704744
data->system.status = status;
705745
data->system.parm1 = event->data.control.value & 0x7f;
706746
return 1;
@@ -712,9 +752,10 @@ static int system_2p_ev_to_ump_midi1(const struct snd_seq_event *event,
712752
union snd_ump_midi1_msg *data,
713753
unsigned char status)
714754
{
755+
data->system.type = UMP_MSG_TYPE_SYSTEM; // override
715756
data->system.status = status;
716-
data->system.parm1 = (event->data.control.value >> 7) & 0x7f;
717-
data->system.parm2 = event->data.control.value & 0x7f;
757+
data->system.parm1 = event->data.control.value & 0x7f;
758+
data->system.parm2 = (event->data.control.value >> 7) & 0x7f;
718759
return 1;
719760
}
720761

@@ -854,7 +895,6 @@ static int pgm_ev_to_ump_midi2(const struct snd_seq_event *event,
854895
data->pg.bank_msb = cc->cc_bank_msb;
855896
data->pg.bank_lsb = cc->cc_bank_lsb;
856897
cc->bank_set = 0;
857-
cc->cc_bank_msb = cc->cc_bank_lsb = 0;
858898
}
859899
return 1;
860900
}

sound/core/ump.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,10 +685,17 @@ static void seq_notify_protocol(struct snd_ump_endpoint *ump)
685685
*/
686686
int snd_ump_switch_protocol(struct snd_ump_endpoint *ump, unsigned int protocol)
687687
{
688+
unsigned int type;
689+
688690
protocol &= ump->info.protocol_caps;
689691
if (protocol == ump->info.protocol)
690692
return 0;
691693

694+
type = protocol & SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK;
695+
if (type != SNDRV_UMP_EP_INFO_PROTO_MIDI1 &&
696+
type != SNDRV_UMP_EP_INFO_PROTO_MIDI2)
697+
return 0;
698+
692699
ump->info.protocol = protocol;
693700
ump_dbg(ump, "New protocol = %x (caps = %x)\n",
694701
protocol, ump->info.protocol_caps);
@@ -960,6 +967,14 @@ int snd_ump_parse_endpoint(struct snd_ump_endpoint *ump)
960967
if (err < 0)
961968
ump_dbg(ump, "Unable to get UMP EP stream config\n");
962969

970+
/* If no protocol is set by some reason, assume the valid one */
971+
if (!(ump->info.protocol & SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK)) {
972+
if (ump->info.protocol_caps & SNDRV_UMP_EP_INFO_PROTO_MIDI2)
973+
ump->info.protocol |= SNDRV_UMP_EP_INFO_PROTO_MIDI2;
974+
else if (ump->info.protocol_caps & SNDRV_UMP_EP_INFO_PROTO_MIDI1)
975+
ump->info.protocol |= SNDRV_UMP_EP_INFO_PROTO_MIDI1;
976+
}
977+
963978
/* Query and create blocks from Function Blocks */
964979
for (blk = 0; blk < ump->info.num_blocks; blk++) {
965980
err = create_block_from_fb_info(ump, blk);

sound/core/ump_convert.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,6 @@ static int cvt_legacy_cmd_to_ump(struct ump_cvt_to_ump *cvt,
404404
midi2->pg.bank_msb = cc->cc_bank_msb;
405405
midi2->pg.bank_lsb = cc->cc_bank_lsb;
406406
cc->bank_set = 0;
407-
cc->cc_bank_msb = cc->cc_bank_lsb = 0;
408407
}
409408
break;
410409
case UMP_MSG_STATUS_CHANNEL_PRESSURE:

sound/hda/intel-dsp-config.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci)
668668
return SND_INTEL_DSP_DRIVER_LEGACY;
669669
}
670670

671-
dev_info(&pci->dev, "DSP detected with PCI class/subclass/prog-if info 0x%06x\n", pci->class);
671+
dev_dbg(&pci->dev, "DSP detected with PCI class/subclass/prog-if info 0x%06x\n", pci->class);
672672

673673
/* find the configuration for the specific device */
674674
cfg = snd_intel_dsp_find_config(pci, config_table, ARRAY_SIZE(config_table));
@@ -678,12 +678,12 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci)
678678
if (cfg->flags & FLAG_SOF) {
679679
if (cfg->flags & FLAG_SOF_ONLY_IF_SOUNDWIRE &&
680680
snd_intel_dsp_check_soundwire(pci) > 0) {
681-
dev_info(&pci->dev, "SoundWire enabled on CannonLake+ platform, using SOF driver\n");
681+
dev_info_once(&pci->dev, "SoundWire enabled on CannonLake+ platform, using SOF driver\n");
682682
return SND_INTEL_DSP_DRIVER_SOF;
683683
}
684684
if (cfg->flags & FLAG_SOF_ONLY_IF_DMIC &&
685685
snd_intel_dsp_check_dmic(pci)) {
686-
dev_info(&pci->dev, "Digital mics found on Skylake+ platform, using SOF driver\n");
686+
dev_info_once(&pci->dev, "Digital mics found on Skylake+ platform, using SOF driver\n");
687687
return SND_INTEL_DSP_DRIVER_SOF;
688688
}
689689
if (!(cfg->flags & FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE))
@@ -694,7 +694,7 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci)
694694
if (cfg->flags & FLAG_SST) {
695695
if (cfg->flags & FLAG_SST_ONLY_IF_DMIC) {
696696
if (snd_intel_dsp_check_dmic(pci)) {
697-
dev_info(&pci->dev, "Digital mics found on Skylake+ platform, using SST driver\n");
697+
dev_info_once(&pci->dev, "Digital mics found on Skylake+ platform, using SST driver\n");
698698
return SND_INTEL_DSP_DRIVER_SST;
699699
}
700700
} else {

sound/pci/hda/patch_realtek.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10310,7 +10310,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1031010310
SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
1031110311
SND_PCI_QUIRK(0x1043, 0x3a20, "ASUS G614JZR", ALC245_FIXUP_CS35L41_SPI_2),
1031210312
SND_PCI_QUIRK(0x1043, 0x3a30, "ASUS G814JVR/JIR", ALC245_FIXUP_CS35L41_SPI_2),
10313-
SND_PCI_QUIRK(0x1043, 0x3a40, "ASUS G814JZR", ALC245_FIXUP_CS35L41_SPI_2),
10313+
SND_PCI_QUIRK(0x1043, 0x3a40, "ASUS G814JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
1031410314
SND_PCI_QUIRK(0x1043, 0x3a50, "ASUS G834JYR/JZR", ALC245_FIXUP_CS35L41_SPI_2),
1031510315
SND_PCI_QUIRK(0x1043, 0x3a60, "ASUS G634JYR/JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
1031610316
SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),

sound/soc/codecs/cs42l43.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,9 @@ static int cs42l43_startup(struct snd_pcm_substream *substream, struct snd_soc_d
310310
struct snd_soc_component *component = dai->component;
311311
struct cs42l43_codec *priv = snd_soc_component_get_drvdata(component);
312312
struct cs42l43 *cs42l43 = priv->core;
313-
int provider = !!regmap_test_bits(cs42l43->regmap, CS42L43_ASP_CLK_CONFIG2,
314-
CS42L43_ASP_MASTER_MODE_MASK);
313+
int provider = !dai->id || !!regmap_test_bits(cs42l43->regmap,
314+
CS42L43_ASP_CLK_CONFIG2,
315+
CS42L43_ASP_MASTER_MODE_MASK);
315316

316317
if (provider)
317318
priv->constraint.mask = CS42L43_PROVIDER_RATE_MASK;

0 commit comments

Comments
 (0)