Commit a9f47fcb authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: dice: loosen stream format check for MIDI conformant data channel

ALSA dice driver expects devices to multiplex MIDI messages into first
port of isochronous communication. Actually devices perform for it.
However, check of stream format is invalid for second port of isochronous
communication. As a result, when the device supports two ports for
isochronous communication and the stream format is hard-coded, ALSA
dice driver fails to start packet streaming.

This commit loosens stream format check for MIDI conformant data channel.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200113084630.14305-3-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 41dbc792
...@@ -224,7 +224,6 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate, ...@@ -224,7 +224,6 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate,
struct amdtp_stream *stream; struct amdtp_stream *stream;
struct fw_iso_resources *resources; struct fw_iso_resources *resources;
unsigned int pcm_cache; unsigned int pcm_cache;
unsigned int midi_cache;
unsigned int pcm_chs; unsigned int pcm_chs;
unsigned int midi_ports; unsigned int midi_ports;
...@@ -233,7 +232,6 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate, ...@@ -233,7 +232,6 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate,
resources = &dice->tx_resources[i]; resources = &dice->tx_resources[i];
pcm_cache = dice->tx_pcm_chs[i][mode]; pcm_cache = dice->tx_pcm_chs[i][mode];
midi_cache = dice->tx_midi_ports[i];
err = snd_dice_transaction_read_tx(dice, err = snd_dice_transaction_read_tx(dice,
params->size * i + TX_NUMBER_AUDIO, params->size * i + TX_NUMBER_AUDIO,
reg, sizeof(reg)); reg, sizeof(reg));
...@@ -242,7 +240,6 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate, ...@@ -242,7 +240,6 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate,
resources = &dice->rx_resources[i]; resources = &dice->rx_resources[i];
pcm_cache = dice->rx_pcm_chs[i][mode]; pcm_cache = dice->rx_pcm_chs[i][mode];
midi_cache = dice->rx_midi_ports[i];
err = snd_dice_transaction_read_rx(dice, err = snd_dice_transaction_read_rx(dice,
params->size * i + RX_NUMBER_AUDIO, params->size * i + RX_NUMBER_AUDIO,
reg, sizeof(reg)); reg, sizeof(reg));
...@@ -253,10 +250,10 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate, ...@@ -253,10 +250,10 @@ static int keep_dual_resources(struct snd_dice *dice, unsigned int rate,
midi_ports = be32_to_cpu(reg[1]); midi_ports = be32_to_cpu(reg[1]);
// These are important for developer of this driver. // These are important for developer of this driver.
if (pcm_chs != pcm_cache || midi_ports != midi_cache) { if (pcm_chs != pcm_cache) {
dev_info(&dice->unit->device, dev_info(&dice->unit->device,
"cache mismatch: pcm: %u:%u, midi: %u:%u\n", "cache mismatch: pcm: %u:%u, midi: %u\n",
pcm_chs, pcm_cache, midi_ports, midi_cache); pcm_chs, pcm_cache, midi_ports);
return -EPROTO; return -EPROTO;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment