cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dice-alesis.c (1846B)


      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
     10static const unsigned int
     11alesis_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 int
     17alesis_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}