brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · 27c13b9 Raw
77 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * dice-alesis.c - a part of driver for DICE based devices4 *5 * Copyright (c) 2018 Takashi Sakamoto6 */7 8#include "dice.h"9 10static const unsigned int11alesis_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 16static const unsigned int17alesis_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 22int 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 54int 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