Commit | Line | Data |
---|---|---|
28b208f6 TS |
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, 8}, /* Tx0 = Analog + S/PDIF. */ | |
19 | {16, 8, 0}, /* Tx1 = ADAT1 + ADAT2. */ | |
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, ®, | |
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 { | |
627661ce | 40 | memcpy(dice->tx_pcm_chs, alesis_io26_tx_pcm_chs, |
28b208f6 TS |
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 | } |