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

ALSA: oxfw: calculating MIDI ports in stream discover

Current OXFW driver calculates the number of MIDI ports just before adding
ALSA MIDI ports. It's convenient for some devices with quirks to move
these codes before handling quirks.

This commit implements this idea.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 56b1c72a
......@@ -142,29 +142,11 @@ static void set_midi_substream_names(struct snd_oxfw *oxfw,
int snd_oxfw_create_midi(struct snd_oxfw *oxfw)
{
struct snd_oxfw_stream_formation formation;
struct snd_rawmidi *rmidi;
struct snd_rawmidi_str *str;
u8 *format;
int i, err;
/* If its stream has MIDI conformant data channel, add one MIDI port */
for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) {
format = oxfw->tx_stream_formats[i];
if (format != NULL) {
err = snd_oxfw_stream_parse_format(format, &formation);
if (err >= 0 && formation.midi > 0)
oxfw->midi_input_ports = 1;
}
format = oxfw->rx_stream_formats[i];
if (format != NULL) {
err = snd_oxfw_stream_parse_format(format, &formation);
if (err >= 0 && formation.midi > 0)
oxfw->midi_output_ports = 1;
}
}
if ((oxfw->midi_input_ports == 0) && (oxfw->midi_output_ports == 0))
int err;
if (oxfw->midi_input_ports == 0 && oxfw->midi_output_ports == 0)
return 0;
/* create midi ports */
......
......@@ -629,6 +629,9 @@ static int fill_stream_formats(struct snd_oxfw *oxfw,
int snd_oxfw_stream_discover(struct snd_oxfw *oxfw)
{
u8 plugs[AVC_PLUG_INFO_BUF_BYTES];
struct snd_oxfw_stream_formation formation;
u8 *format;
unsigned int i;
int err;
/* the number of plugs for isoc in/out, ext in/out */
......@@ -648,12 +651,42 @@ int snd_oxfw_stream_discover(struct snd_oxfw *oxfw)
err = fill_stream_formats(oxfw, AVC_GENERAL_PLUG_DIR_OUT, 0);
if (err < 0)
goto end;
for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) {
format = oxfw->tx_stream_formats[i];
if (format == NULL)
continue;
err = snd_oxfw_stream_parse_format(format, &formation);
if (err < 0)
continue;
/* Add one MIDI port. */
if (formation.midi > 0)
oxfw->midi_input_ports = 1;
}
oxfw->has_output = true;
}
/* use iPCR[0] if exists */
if (plugs[0] > 0)
if (plugs[0] > 0) {
err = fill_stream_formats(oxfw, AVC_GENERAL_PLUG_DIR_IN, 0);
if (err < 0)
goto end;
for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) {
format = oxfw->rx_stream_formats[i];
if (format == NULL)
continue;
err = snd_oxfw_stream_parse_format(format, &formation);
if (err < 0)
continue;
/* Add one MIDI port. */
if (formation.midi > 0)
oxfw->midi_output_ports = 1;
}
}
end:
return err;
}
......
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