1 // SPDX-License-Identifier: GPL-2.0
3 * dice-alesis.c - a part of driver for DICE based devices
5 * Copyright (c) 2018 Takashi Sakamoto
10 static const unsigned int
11 alesis_io14_tx_pcm_chs
[MAX_STREAMS
][SND_DICE_RATE_MODE_COUNT
] = {
12 {6, 6, 4}, /* Tx0 = Analog + S/PDIF. */
13 {8, 4, 0}, /* Tx1 = ADAT1. */
16 static const unsigned int
17 alesis_io26_tx_pcm_chs
[MAX_STREAMS
][SND_DICE_RATE_MODE_COUNT
] = {
18 {10, 10, 4}, /* Tx0 = Analog + S/PDIF. */
19 {16, 8, 0}, /* Tx1 = ADAT1 + ADAT2. */
22 int snd_dice_detect_alesis_formats(struct snd_dice
*dice
)
29 err
= snd_dice_transaction_read_tx(dice
, TX_NUMBER_AUDIO
, ®
,
33 data
= be32_to_cpu(reg
);
35 if (data
== 4 || data
== 6) {
36 memcpy(dice
->tx_pcm_chs
, alesis_io14_tx_pcm_chs
,
37 MAX_STREAMS
* SND_DICE_RATE_MODE_COUNT
*
38 sizeof(unsigned int));
40 memcpy(dice
->tx_pcm_chs
, alesis_io26_tx_pcm_chs
,
41 MAX_STREAMS
* SND_DICE_RATE_MODE_COUNT
*
42 sizeof(unsigned int));
45 for (i
= 0; i
< SND_DICE_RATE_MODE_COUNT
; ++i
)
46 dice
->rx_pcm_chs
[0][i
] = 8;
48 dice
->tx_midi_ports
[0] = 1;
49 dice
->rx_midi_ports
[0] = 1;
54 int snd_dice_detect_alesis_mastercontrol_formats(struct snd_dice
*dice
)
58 dice
->tx_pcm_chs
[0][SND_DICE_RATE_MODE_LOW
] = 16;
59 dice
->tx_pcm_chs
[1][SND_DICE_RATE_MODE_LOW
] = 12;
60 dice
->tx_pcm_chs
[0][SND_DICE_RATE_MODE_MIDDLE
] = 12;
61 dice
->tx_pcm_chs
[1][SND_DICE_RATE_MODE_MIDDLE
] = 4;
62 dice
->tx_pcm_chs
[0][SND_DICE_RATE_MODE_HIGH
] = 8;
63 dice
->tx_pcm_chs
[1][SND_DICE_RATE_MODE_HIGH
] = 0;
65 for (i
= 0; i
< SND_DICE_RATE_MODE_COUNT
; ++i
) {
66 dice
->rx_pcm_chs
[0][i
] = 6;
67 dice
->rx_pcm_chs
[1][i
] = 0;
70 for (i
= 0; i
< MAX_STREAMS
; ++i
) {
71 dice
->tx_midi_ports
[i
] = 2;
72 dice
->rx_midi_ports
[i
] = 2;