xref: /linux/sound/firewire/dice/dice-teac.c (revision 84318277d6334c6981ab326d4acc87c6a6ddc9b8)
1*28bcb216STakashi Sakamoto // SPDX-License-Identifier: GPL-2.0
2*28bcb216STakashi Sakamoto // dice-teac.c - a part of driver for DICE based devices
3*28bcb216STakashi Sakamoto //
4*28bcb216STakashi Sakamoto // Copyright (c) 2025 Takashi Sakamoto
5*28bcb216STakashi Sakamoto 
6*28bcb216STakashi Sakamoto #include "dice.h"
7*28bcb216STakashi Sakamoto 
8*28bcb216STakashi Sakamoto int snd_dice_detect_teac_formats(struct snd_dice *dice)
9*28bcb216STakashi Sakamoto {
10*28bcb216STakashi Sakamoto 	__be32 reg;
11*28bcb216STakashi Sakamoto 	u32 data;
12*28bcb216STakashi Sakamoto 	int err;
13*28bcb216STakashi Sakamoto 
14*28bcb216STakashi Sakamoto 	err = snd_dice_transaction_read_tx(dice, TX_NUMBER, &reg, sizeof(reg));
15*28bcb216STakashi Sakamoto 	if (err  < 0)
16*28bcb216STakashi Sakamoto 		return err;
17*28bcb216STakashi Sakamoto 
18*28bcb216STakashi Sakamoto 	dice->tx_pcm_chs[0][SND_DICE_RATE_MODE_LOW] = 16;
19*28bcb216STakashi Sakamoto 	dice->tx_pcm_chs[0][SND_DICE_RATE_MODE_MIDDLE] = 16;
20*28bcb216STakashi Sakamoto 	dice->tx_midi_ports[0] = 1;
21*28bcb216STakashi Sakamoto 
22*28bcb216STakashi Sakamoto 	data = be32_to_cpu(reg);
23*28bcb216STakashi Sakamoto 	if (data > 1) {
24*28bcb216STakashi Sakamoto 		dice->tx_pcm_chs[1][SND_DICE_RATE_MODE_LOW] = 16;
25*28bcb216STakashi Sakamoto 		dice->tx_pcm_chs[1][SND_DICE_RATE_MODE_MIDDLE] = 16;
26*28bcb216STakashi Sakamoto 	}
27*28bcb216STakashi Sakamoto 
28*28bcb216STakashi Sakamoto 	err = snd_dice_transaction_read_rx(dice, RX_NUMBER, &reg, sizeof(reg));
29*28bcb216STakashi Sakamoto 	if (err  < 0)
30*28bcb216STakashi Sakamoto 		return err;
31*28bcb216STakashi Sakamoto 
32*28bcb216STakashi Sakamoto 	dice->rx_pcm_chs[0][SND_DICE_RATE_MODE_LOW] = 16;
33*28bcb216STakashi Sakamoto 	dice->rx_pcm_chs[0][SND_DICE_RATE_MODE_MIDDLE] = 16;
34*28bcb216STakashi Sakamoto 	dice->rx_midi_ports[0] = 1;
35*28bcb216STakashi Sakamoto 
36*28bcb216STakashi Sakamoto 	data = be32_to_cpu(reg);
37*28bcb216STakashi Sakamoto 	if (data > 1) {
38*28bcb216STakashi Sakamoto 		dice->rx_pcm_chs[1][SND_DICE_RATE_MODE_LOW] = 16;
39*28bcb216STakashi Sakamoto 		dice->rx_pcm_chs[1][SND_DICE_RATE_MODE_MIDDLE] = 16;
40*28bcb216STakashi Sakamoto 	}
41*28bcb216STakashi Sakamoto 
42*28bcb216STakashi Sakamoto 	return 0;
43*28bcb216STakashi Sakamoto }
44