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