0001
0002
0003
0004
0005
0006
0007
0008 #include "dice.h"
0009
0010 static const unsigned int
0011 alesis_io14_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
0012 {6, 6, 4},
0013 {8, 4, 0},
0014 };
0015
0016 static const unsigned int
0017 alesis_io26_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
0018 {10, 10, 4},
0019 {16, 4, 0},
0020 };
0021
0022 int snd_dice_detect_alesis_formats(struct snd_dice *dice)
0023 {
0024 __be32 reg;
0025 u32 data;
0026 int i;
0027 int err;
0028
0029 err = snd_dice_transaction_read_tx(dice, TX_NUMBER_AUDIO, ®,
0030 sizeof(reg));
0031 if (err < 0)
0032 return err;
0033 data = be32_to_cpu(reg);
0034
0035 if (data == 4 || data == 6) {
0036 memcpy(dice->tx_pcm_chs, alesis_io14_tx_pcm_chs,
0037 MAX_STREAMS * SND_DICE_RATE_MODE_COUNT *
0038 sizeof(unsigned int));
0039 } else {
0040 memcpy(dice->tx_pcm_chs, alesis_io26_tx_pcm_chs,
0041 MAX_STREAMS * SND_DICE_RATE_MODE_COUNT *
0042 sizeof(unsigned int));
0043 }
0044
0045 for (i = 0; i < SND_DICE_RATE_MODE_COUNT; ++i)
0046 dice->rx_pcm_chs[0][i] = 8;
0047
0048 dice->tx_midi_ports[0] = 1;
0049 dice->rx_midi_ports[0] = 1;
0050
0051 return 0;
0052 }
0053
0054 int snd_dice_detect_alesis_mastercontrol_formats(struct snd_dice *dice)
0055 {
0056 int i;
0057
0058 dice->tx_pcm_chs[0][SND_DICE_RATE_MODE_LOW] = 16;
0059 dice->tx_pcm_chs[1][SND_DICE_RATE_MODE_LOW] = 12;
0060 dice->tx_pcm_chs[0][SND_DICE_RATE_MODE_MIDDLE] = 12;
0061 dice->tx_pcm_chs[1][SND_DICE_RATE_MODE_MIDDLE] = 4;
0062 dice->tx_pcm_chs[0][SND_DICE_RATE_MODE_HIGH] = 8;
0063 dice->tx_pcm_chs[1][SND_DICE_RATE_MODE_HIGH] = 0;
0064
0065 for (i = 0; i < SND_DICE_RATE_MODE_COUNT; ++i) {
0066 dice->rx_pcm_chs[0][i] = 6;
0067 dice->rx_pcm_chs[1][i] = 0;
0068 }
0069
0070 for (i = 0; i < MAX_STREAMS; ++i) {
0071 dice->tx_midi_ports[i] = 2;
0072 dice->rx_midi_ports[i] = 2;
0073 }
0074
0075 return 0;
0076 }