Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/firewire/dice/dice-alesis.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* dice-alesis.c - a part of driver for DICE based devices
4
*
5
* Copyright (c) 2018 Takashi Sakamoto
6
*/
7
8
#include "dice.h"
9
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. */
14
};
15
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, 4, 0}, /* Tx1 = ADAT1 + ADAT2 (available at low rate). */
20
};
21
22
int snd_dice_detect_alesis_formats(struct snd_dice *dice)
23
{
24
__be32 reg;
25
u32 data;
26
int i;
27
int err;
28
29
err = snd_dice_transaction_read_tx(dice, TX_NUMBER_AUDIO, &reg,
30
sizeof(reg));
31
if (err < 0)
32
return err;
33
data = be32_to_cpu(reg);
34
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));
39
} else {
40
memcpy(dice->tx_pcm_chs, alesis_io26_tx_pcm_chs,
41
MAX_STREAMS * SND_DICE_RATE_MODE_COUNT *
42
sizeof(unsigned int));
43
}
44
45
for (i = 0; i < SND_DICE_RATE_MODE_COUNT; ++i)
46
dice->rx_pcm_chs[0][i] = 8;
47
48
dice->tx_midi_ports[0] = 1;
49
dice->rx_midi_ports[0] = 1;
50
51
return 0;
52
}
53
54
int snd_dice_detect_alesis_mastercontrol_formats(struct snd_dice *dice)
55
{
56
int i;
57
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;
64
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;
68
}
69
70
for (i = 0; i < MAX_STREAMS; ++i) {
71
dice->tx_midi_ports[i] = 2;
72
dice->rx_midi_ports[i] = 2;
73
}
74
75
return 0;
76
}
77
78