Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: dice: add stream format parameters for Mytek devices

--nextPart3916812.EicPReet6m
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="us-ascii"

Mytek manufactures some equipment with DICE-based firewire ports. These
devices contain old versions of DICE firmware which lacks detailed
stream format reporting for all sampling clock modes.

Building upon the recent work by Takashi Sakamoto, hard-coded parameters
are added for the Stereo 192 DSD-DAC. When the device vendor and model
match the coded parameters are copied into the stream format cache.

Signed-off-by: Melvin Vermeeren <mail@mel.vin>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by

Melvin Vermeeren and committed by
Takashi Iwai
7c1543f6 6cd17ea7

+57 -1
+1 -1
sound/firewire/dice/Makefile
··· 1 1 snd-dice-objs := dice-transaction.o dice-stream.o dice-proc.o dice-midi.o \ 2 2 dice-pcm.o dice-hwdep.o dice.o dice-tcelectronic.o \ 3 - dice-alesis.o dice-extension.o 3 + dice-alesis.o dice-extension.o dice-mytek.o 4 4 obj-$(CONFIG_SND_DICE) += snd-dice.o
+46
sound/firewire/dice/dice-mytek.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * dice-mytek.c - a part of driver for DICE based devices 4 + * 5 + * Copyright (c) 2018 Melvin Vermeeren 6 + */ 7 + 8 + #include "dice.h" 9 + 10 + struct dice_mytek_spec { 11 + unsigned int tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT]; 12 + unsigned int rx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT]; 13 + }; 14 + 15 + static const struct dice_mytek_spec stereo_192_dsd_dac = { 16 + /* AES, TOSLINK, SPDIF, ADAT inputs on device */ 17 + .tx_pcm_chs = {{8, 8, 8}, {0, 0, 0} }, 18 + /* PCM 44.1-192, native DSD64/DSD128 to device */ 19 + .rx_pcm_chs = {{4, 4, 4}, {0, 0, 0} } 20 + }; 21 + 22 + /* 23 + * Mytek has a few other firewire-capable devices, though newer models appear 24 + * to lack the port more often than not. As I don't have access to any of them 25 + * they are missing here. An example is the Mytek 8x192 ADDA, which is DICE. 26 + */ 27 + 28 + int snd_dice_detect_mytek_formats(struct snd_dice *dice) 29 + { 30 + int i; 31 + const struct dice_mytek_spec *dev; 32 + 33 + dev = &stereo_192_dsd_dac; 34 + 35 + memcpy(dice->tx_pcm_chs, dev->tx_pcm_chs, 36 + MAX_STREAMS * SND_DICE_RATE_MODE_COUNT * sizeof(unsigned int)); 37 + memcpy(dice->rx_pcm_chs, dev->rx_pcm_chs, 38 + MAX_STREAMS * SND_DICE_RATE_MODE_COUNT * sizeof(unsigned int)); 39 + 40 + for (i = 0; i < MAX_STREAMS; ++i) { 41 + dice->tx_midi_ports[i] = 0; 42 + dice->rx_midi_ports[i] = 0; 43 + } 44 + 45 + return 0; 46 + }
+9
sound/firewire/dice/dice.c
··· 17 17 #define OUI_TCELECTRONIC 0x000166 18 18 #define OUI_ALESIS 0x000595 19 19 #define OUI_MAUDIO 0x000d6c 20 + #define OUI_MYTEK 0x001ee8 20 21 21 22 #define DICE_CATEGORY_ID 0x04 22 23 #define WEISS_CATEGORY_ID 0x00 ··· 365 364 .vendor_id = OUI_ALESIS, 366 365 .model_id = MODEL_ALESIS_IO_BOTH, 367 366 .driver_data = (kernel_ulong_t)snd_dice_detect_alesis_formats, 367 + }, 368 + /* Mytek Stereo 192 DSD-DAC. */ 369 + { 370 + .match_flags = IEEE1394_MATCH_VENDOR_ID | 371 + IEEE1394_MATCH_MODEL_ID, 372 + .vendor_id = OUI_MYTEK, 373 + .model_id = 0x000002, 374 + .driver_data = (kernel_ulong_t)snd_dice_detect_mytek_formats, 368 375 }, 369 376 { 370 377 .match_flags = IEEE1394_MATCH_VERSION,
+1
sound/firewire/dice/dice.h
··· 226 226 int snd_dice_detect_tcelectronic_formats(struct snd_dice *dice); 227 227 int snd_dice_detect_alesis_formats(struct snd_dice *dice); 228 228 int snd_dice_detect_extension_formats(struct snd_dice *dice); 229 + int snd_dice_detect_mytek_formats(struct snd_dice *dice); 229 230 230 231 #endif