Commit 7d88cc8e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
  ...
parents 87895a64 310fa3ec
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -5188,7 +5188,6 @@ F: Documentation/devicetree/bindings/media/i2c/chrontel,ch7322.yaml
F:	drivers/media/cec/i2c/ch7322.c
CIRRUS LOGIC AUDIO CODEC DRIVERS
M:	James Schulman <james.schulman@cirrus.com>
M:	David Rhodes <david.rhodes@cirrus.com>
M:	Richard Fitzgerald <rf@opensource.cirrus.com>
L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
+1 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ struct snd_pcm_ops {
#define SNDRV_PCM_RATE_768000		(1U<<16)	/* 768000Hz */

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

#define SNDRV_PCM_RATE_8000_44100	(SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_11025|\
					 SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_22050|\
+5 −4
Original line number Diff line number Diff line
@@ -537,6 +537,11 @@ void snd_card_disconnect(struct snd_card *card)
		synchronize_irq(card->sync_irq);

	snd_info_card_disconnect(card);
#ifdef CONFIG_SND_DEBUG
	debugfs_remove(card->debugfs_root);
	card->debugfs_root = NULL;
#endif

	if (card->registered) {
		device_del(&card->card_dev);
		card->registered = false;
@@ -586,10 +591,6 @@ static int snd_card_do_free(struct snd_card *card)
		dev_warn(card->dev, "unable to free card info\n");
		/* Not fatal error */
	}
#ifdef CONFIG_SND_DEBUG
	debugfs_remove(card->debugfs_root);
	card->debugfs_root = NULL;
#endif
	if (card->release_completion)
		complete(card->release_completion);
	if (!card->managed)
+14 −7
Original line number Diff line number Diff line
@@ -37,11 +37,15 @@ static const int jack_switch_types[SND_JACK_SWITCH_TYPES] = {
};
#endif /* CONFIG_SND_JACK_INPUT_DEV */

static void snd_jack_remove_debugfs(struct snd_jack *jack);

static int snd_jack_dev_disconnect(struct snd_device *device)
{
#ifdef CONFIG_SND_JACK_INPUT_DEV
	struct snd_jack *jack = device->device_data;

	snd_jack_remove_debugfs(jack);

#ifdef CONFIG_SND_JACK_INPUT_DEV
	guard(mutex)(&jack->input_dev_lock);
	if (!jack->input_dev)
		return 0;
@@ -381,11 +385,15 @@ static int snd_jack_debugfs_add_inject_node(struct snd_jack *jack,
	return 0;
}

static void snd_jack_debugfs_clear_inject_node(struct snd_jack_kctl *jack_kctl)
static void snd_jack_remove_debugfs(struct snd_jack *jack)
{
	struct snd_jack_kctl *jack_kctl;

	list_for_each_entry(jack_kctl, &jack->kctl_list, list) {
		debugfs_remove(jack_kctl->jack_debugfs_root);
		jack_kctl->jack_debugfs_root = NULL;
	}
}
#else /* CONFIG_SND_JACK_INJECTION_DEBUG */
static int snd_jack_debugfs_add_inject_node(struct snd_jack *jack,
					    struct snd_jack_kctl *jack_kctl)
@@ -393,7 +401,7 @@ static int snd_jack_debugfs_add_inject_node(struct snd_jack *jack,
	return 0;
}

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

	jack_kctl = kctl->private_data;
	if (jack_kctl) {
		snd_jack_debugfs_clear_inject_node(jack_kctl);
		list_del(&jack_kctl->list);
		kfree(jack_kctl);
	}
@@ -497,8 +504,8 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
		.dev_free = snd_jack_dev_free,
#ifdef CONFIG_SND_JACK_INPUT_DEV
		.dev_register = snd_jack_dev_register,
		.dev_disconnect = snd_jack_dev_disconnect,
#endif /* CONFIG_SND_JACK_INPUT_DEV */
		.dev_disconnect = snd_jack_dev_disconnect,
	};

	if (initial_kctl) {
+44 −4
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ static void ump_system_to_one_param_ev(const union snd_ump_midi1_msg *val,
static void ump_system_to_songpos_ev(const union snd_ump_midi1_msg *val,
				     struct snd_seq_event *ev)
{
	ev->data.control.value = (val->system.parm1 << 7) | val->system.parm2;
	ev->data.control.value = (val->system.parm2 << 7) | val->system.parm1;
}

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

	ev_cvt = *event;
	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,
		midi2->paf.data = upscale_7_to_32bit(midi1->paf.data);
		break;
	case UMP_MSG_STATUS_CC:
		cc = &dest_port->midi2_bank[midi1->note.channel];
		switch (midi1->cc.index) {
		case UMP_CC_BANK_SELECT:
			cc->bank_set = 1;
			cc->cc_bank_msb = midi1->cc.data;
			return 0; // skip
		case UMP_CC_BANK_SELECT_LSB:
			cc->bank_set = 1;
			cc->cc_bank_lsb = midi1->cc.data;
			return 0; // skip
		}
		midi2->cc.index = midi1->cc.index;
		midi2->cc.data = upscale_7_to_32bit(midi1->cc.data);
		break;
	case UMP_MSG_STATUS_PROGRAM:
		midi2->pg.program = midi1->pg.program;
		cc = &dest_port->midi2_bank[midi1->note.channel];
		if (cc->bank_set) {
			midi2->pg.bank_valid = 1;
			midi2->pg.bank_msb = cc->cc_bank_msb;
			midi2->pg.bank_lsb = cc->cc_bank_lsb;
			cc->bank_set = 0;
		}
		break;
	case UMP_MSG_STATUS_CHANNEL_PRESSURE:
		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,
	struct snd_seq_ump_event ev_cvt;
	union snd_ump_midi1_msg *midi1 = (union snd_ump_midi1_msg *)ev_cvt.ump;
	const union snd_ump_midi2_msg *midi2 = (const union snd_ump_midi2_msg *)event->ump;
	int err;
	u16 v;

	ev_cvt = *event;
@@ -443,6 +463,24 @@ static int cvt_ump_midi2_to_midi1(struct snd_seq_client *dest,
		midi1->cc.data = downscale_32_to_7bit(midi2->cc.data);
		break;
	case UMP_MSG_STATUS_PROGRAM:
		if (midi2->pg.bank_valid) {
			midi1->cc.status = UMP_MSG_STATUS_CC;
			midi1->cc.index = UMP_CC_BANK_SELECT;
			midi1->cc.data = midi2->pg.bank_msb;
			err = __snd_seq_deliver_single_event(dest, dest_port,
							     (struct snd_seq_event *)&ev_cvt,
							     atomic, hop);
			if (err < 0)
				return err;
			midi1->cc.index = UMP_CC_BANK_SELECT_LSB;
			midi1->cc.data = midi2->pg.bank_lsb;
			err = __snd_seq_deliver_single_event(dest, dest_port,
							     (struct snd_seq_event *)&ev_cvt,
							     atomic, hop);
			if (err < 0)
				return err;
			midi1->note.status = midi2->note.status;
		}
		midi1->pg.program = midi2->pg.program;
		break;
	case UMP_MSG_STATUS_CHANNEL_PRESSURE:
@@ -691,6 +729,7 @@ static int system_ev_to_ump_midi1(const struct snd_seq_event *event,
				  union snd_ump_midi1_msg *data,
				  unsigned char status)
{
	data->system.type = UMP_MSG_TYPE_SYSTEM; // override
	data->system.status = status;
	return 1;
}
@@ -701,6 +740,7 @@ static int system_1p_ev_to_ump_midi1(const struct snd_seq_event *event,
				     union snd_ump_midi1_msg *data,
				     unsigned char status)
{
	data->system.type = UMP_MSG_TYPE_SYSTEM; // override
	data->system.status = status;
	data->system.parm1 = event->data.control.value & 0x7f;
	return 1;
@@ -712,9 +752,10 @@ static int system_2p_ev_to_ump_midi1(const struct snd_seq_event *event,
				     union snd_ump_midi1_msg *data,
				     unsigned char status)
{
	data->system.type = UMP_MSG_TYPE_SYSTEM; // override
	data->system.status = status;
	data->system.parm1 = (event->data.control.value >> 7) & 0x7f;
	data->system.parm2 = event->data.control.value & 0x7f;
	data->system.parm1 = event->data.control.value & 0x7f;
	data->system.parm2 = (event->data.control.value >> 7) & 0x7f;
	return 1;
}

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