|
@@ -103,16 +103,27 @@ static void set_midi_substream_names(struct snd_dice *dice,
|
|
|
|
|
|
int snd_dice_create_midi(struct snd_dice *dice)
|
|
int snd_dice_create_midi(struct snd_dice *dice)
|
|
{
|
|
{
|
|
|
|
+ __be32 reg;
|
|
struct snd_rawmidi *rmidi;
|
|
struct snd_rawmidi *rmidi;
|
|
struct snd_rawmidi_str *str;
|
|
struct snd_rawmidi_str *str;
|
|
- unsigned int i, midi_in_ports, midi_out_ports;
|
|
|
|
|
|
+ unsigned int midi_in_ports, midi_out_ports;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
- midi_in_ports = midi_out_ports = 0;
|
|
|
|
- for (i = 0; i < 3; i++) {
|
|
|
|
- midi_in_ports = max(dice->tx_midi_ports[i], midi_in_ports);
|
|
|
|
- midi_out_ports = max(dice->rx_midi_ports[i], midi_out_ports);
|
|
|
|
- }
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Use the number of MIDI conformant data channel at current sampling
|
|
|
|
+ * transfer frequency.
|
|
|
|
+ */
|
|
|
|
+ err = snd_dice_transaction_read_tx(dice, TX_NUMBER_MIDI,
|
|
|
|
+ ®, sizeof(reg));
|
|
|
|
+ if (err < 0)
|
|
|
|
+ return err;
|
|
|
|
+ midi_in_ports = be32_to_cpu(reg);
|
|
|
|
+
|
|
|
|
+ err = snd_dice_transaction_read_rx(dice, RX_NUMBER_MIDI,
|
|
|
|
+ ®, sizeof(reg));
|
|
|
|
+ if (err < 0)
|
|
|
|
+ return err;
|
|
|
|
+ midi_out_ports = be32_to_cpu(reg);
|
|
|
|
|
|
if (midi_in_ports + midi_out_ports == 0)
|
|
if (midi_in_ports + midi_out_ports == 0)
|
|
return 0;
|
|
return 0;
|