2019-05-30 08:57:59 +09:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
2017-03-22 21:30:11 +09:00
|
|
|
/*
|
|
|
|
* motu.c - a part of driver for MOTU FireWire series
|
|
|
|
*
|
|
|
|
* Copyright (c) 2015-2017 Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "motu.h"
|
|
|
|
|
|
|
|
#define OUI_MOTU 0x0001f2
|
|
|
|
|
|
|
|
MODULE_DESCRIPTION("MOTU FireWire driver");
|
|
|
|
MODULE_AUTHOR("Takashi Sakamoto <o-takashi@sakamocchi.jp>");
|
|
|
|
MODULE_LICENSE("GPL v2");
|
|
|
|
|
ALSA: firewire-motu: add an abstraction layer for three types of protocols
In an aspect of used protocols to communicate, models of MOTU FireWire
units are categorized to three generations.
This commit adds an abstraction layer of the protocols for features
related to packet streaming functionality. This layer includes 5
operations.
When configuring packet streaming functionality with sampling rate and
sampling transmission frequency, .get_clock_rate and .set_clock_rate are
called with proper arguments. MOTU FireWire series supports up to 192.0kHz.
When checking current source of sampling clock (not clock for packetization
layer), .get_clock_source is used. Enumeration is added to represent the
sources supported by this series. This operation can be used to expose
available sampling rate to user space applications when the unit is
configured to use any input signal as source of clock instead of crystal
clock.
In the protocols, the path between packet processing layer and digital
signal processing layer can be controlled. This looks a functionality to
'mute' the unit. For this feature, .switch_fetching_mode is added. This
can be used to suppress noises every time packet streaming starts/stops.
In a point of the size of data blocks at a certain sampling transmission
frequency, the most units accept several modes. This is due to usage of
optical interfaces. The size differs depending on which modes are
configured to the interfaces; None, S/PDIF and ADAT. Additionally, format
of packet is different depending on protocols. To cache current size of
data blocks and its format, .cache_packet_formats is added. This is used
by PCM functionality, packet streaming functionality and data block
processing layer.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-03-22 21:30:14 +09:00
|
|
|
const unsigned int snd_motu_clock_rates[SND_MOTU_CLOCK_RATE_COUNT] = {
|
|
|
|
/* mode 0 */
|
|
|
|
[0] = 44100,
|
|
|
|
[1] = 48000,
|
|
|
|
/* mode 1 */
|
|
|
|
[2] = 88200,
|
|
|
|
[3] = 96000,
|
|
|
|
/* mode 2 */
|
|
|
|
[4] = 176400,
|
|
|
|
[5] = 192000,
|
|
|
|
};
|
|
|
|
|
2017-03-22 21:30:11 +09:00
|
|
|
static void name_card(struct snd_motu *motu)
|
|
|
|
{
|
|
|
|
struct fw_device *fw_dev = fw_parent_device(motu->unit);
|
|
|
|
struct fw_csr_iterator it;
|
|
|
|
int key, val;
|
|
|
|
u32 version = 0;
|
|
|
|
|
|
|
|
fw_csr_iterator_init(&it, motu->unit->directory);
|
|
|
|
while (fw_csr_iterator_next(&it, &key, &val)) {
|
|
|
|
switch (key) {
|
2019-03-17 15:49:29 +09:00
|
|
|
case CSR_MODEL:
|
2017-03-22 21:30:11 +09:00
|
|
|
version = val;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
strcpy(motu->card->driver, "FW-MOTU");
|
2017-03-22 21:30:13 +09:00
|
|
|
strcpy(motu->card->shortname, motu->spec->name);
|
|
|
|
strcpy(motu->card->mixername, motu->spec->name);
|
2017-03-22 21:30:11 +09:00
|
|
|
snprintf(motu->card->longname, sizeof(motu->card->longname),
|
2019-03-17 15:49:29 +09:00
|
|
|
"MOTU %s (version:%06x), GUID %08x%08x at %s, S%d",
|
2017-03-22 21:30:13 +09:00
|
|
|
motu->spec->name, version,
|
2017-03-22 21:30:11 +09:00
|
|
|
fw_dev->config_rom[3], fw_dev->config_rom[4],
|
|
|
|
dev_name(&motu->unit->device), 100 << fw_dev->max_speed);
|
|
|
|
}
|
|
|
|
|
2018-10-10 15:35:02 +09:00
|
|
|
static void motu_card_free(struct snd_card *card)
|
2017-03-22 21:30:11 +09:00
|
|
|
{
|
2018-10-10 15:35:02 +09:00
|
|
|
struct snd_motu *motu = card->private_data;
|
2017-03-22 21:30:19 +09:00
|
|
|
|
2018-10-10 15:35:02 +09:00
|
|
|
snd_motu_transaction_unregister(motu);
|
2017-03-22 21:30:20 +09:00
|
|
|
snd_motu_stream_destroy_duplex(motu);
|
2021-06-07 17:12:48 +09:00
|
|
|
|
|
|
|
mutex_destroy(&motu->mutex);
|
|
|
|
fw_unit_put(motu->unit);
|
2017-03-22 21:30:11 +09:00
|
|
|
}
|
|
|
|
|
2021-06-07 17:12:48 +09:00
|
|
|
static int motu_probe(struct fw_unit *unit, const struct ieee1394_device_id *entry)
|
2017-03-22 21:30:12 +09:00
|
|
|
{
|
2021-06-07 17:12:48 +09:00
|
|
|
struct snd_card *card;
|
|
|
|
struct snd_motu *motu;
|
2017-03-22 21:30:12 +09:00
|
|
|
int err;
|
2017-03-22 21:30:11 +09:00
|
|
|
|
2021-06-07 17:12:48 +09:00
|
|
|
err = snd_card_new(&unit->device, -1, NULL, THIS_MODULE, sizeof(*motu), &card);
|
2017-03-22 21:30:12 +09:00
|
|
|
if (err < 0)
|
2021-06-07 17:12:48 +09:00
|
|
|
return err;
|
|
|
|
card->private_free = motu_card_free;
|
|
|
|
|
|
|
|
motu = card->private_data;
|
|
|
|
motu->unit = fw_unit_get(unit);
|
|
|
|
dev_set_drvdata(&unit->device, motu);
|
|
|
|
motu->card = card;
|
|
|
|
|
|
|
|
motu->spec = (const struct snd_motu_spec *)entry->driver_data;
|
|
|
|
mutex_init(&motu->mutex);
|
|
|
|
spin_lock_init(&motu->lock);
|
|
|
|
init_waitqueue_head(&motu->hwdep_wait);
|
2017-03-22 21:30:11 +09:00
|
|
|
|
|
|
|
name_card(motu);
|
|
|
|
|
2017-03-22 21:30:19 +09:00
|
|
|
err = snd_motu_transaction_register(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
|
|
|
|
2017-03-22 21:30:20 +09:00
|
|
|
err = snd_motu_stream_init_duplex(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
|
|
|
|
2017-03-22 21:30:21 +09:00
|
|
|
snd_motu_proc_init(motu);
|
|
|
|
|
2017-03-22 21:30:22 +09:00
|
|
|
err = snd_motu_create_pcm_devices(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
|
|
|
|
2017-08-20 21:25:03 +09:00
|
|
|
if ((motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_2ND_Q) ||
|
|
|
|
(motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_3RD_Q) ||
|
|
|
|
(motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_2ND_Q) ||
|
|
|
|
(motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_3RD_Q)) {
|
2017-03-22 21:30:23 +09:00
|
|
|
err = snd_motu_create_midi_devices(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
|
|
|
}
|
|
|
|
|
2017-03-22 21:30:24 +09:00
|
|
|
err = snd_motu_create_hwdep_device(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
|
|
|
|
2021-10-15 17:08:16 +09:00
|
|
|
if (motu->spec->flags & SND_MOTU_SPEC_REGISTER_DSP) {
|
|
|
|
err = snd_motu_register_dsp_message_parser_new(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
2021-10-15 17:08:17 +09:00
|
|
|
} else if (motu->spec->flags & SND_MOTU_SPEC_COMMAND_DSP) {
|
|
|
|
err = snd_motu_command_dsp_message_parser_new(motu);
|
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
2021-10-15 17:08:16 +09:00
|
|
|
}
|
|
|
|
|
2021-06-07 17:12:48 +09:00
|
|
|
err = snd_card_register(card);
|
2017-03-22 21:30:11 +09:00
|
|
|
if (err < 0)
|
|
|
|
goto error;
|
|
|
|
|
|
|
|
return 0;
|
2021-06-07 17:12:48 +09:00
|
|
|
error:
|
|
|
|
snd_card_free(card);
|
|
|
|
return err;
|
2017-03-22 21:30:11 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
static void motu_remove(struct fw_unit *unit)
|
|
|
|
{
|
|
|
|
struct snd_motu *motu = dev_get_drvdata(&unit->device);
|
|
|
|
|
2021-06-07 17:12:48 +09:00
|
|
|
// Block till all of ALSA character devices are released.
|
|
|
|
snd_card_free(motu->card);
|
2017-03-22 21:30:11 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
static void motu_bus_update(struct fw_unit *unit)
|
|
|
|
{
|
2017-03-22 21:30:12 +09:00
|
|
|
struct snd_motu *motu = dev_get_drvdata(&unit->device);
|
|
|
|
|
2017-03-22 21:30:19 +09:00
|
|
|
/* The handler address register becomes initialized. */
|
|
|
|
snd_motu_transaction_reregister(motu);
|
2017-03-22 21:30:11 +09:00
|
|
|
}
|
|
|
|
|
2017-03-22 21:30:13 +09:00
|
|
|
#define SND_MOTU_DEV_ENTRY(model, data) \
|
2017-03-22 21:30:11 +09:00
|
|
|
{ \
|
|
|
|
.match_flags = IEEE1394_MATCH_VENDOR_ID | \
|
2019-03-17 15:49:29 +09:00
|
|
|
IEEE1394_MATCH_SPECIFIER_ID | \
|
|
|
|
IEEE1394_MATCH_VERSION, \
|
2017-03-22 21:30:11 +09:00
|
|
|
.vendor_id = OUI_MOTU, \
|
|
|
|
.specifier_id = OUI_MOTU, \
|
2019-03-17 15:49:29 +09:00
|
|
|
.version = model, \
|
2017-03-22 21:30:13 +09:00
|
|
|
.driver_data = (kernel_ulong_t)data, \
|
2017-03-22 21:30:11 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
static const struct ieee1394_device_id motu_id_table[] = {
|
ALSA: firewire-motu: add support for MOTU 828
MOTU 828 is a first model in MOTU FireWire series, produced in 2001. This
model consists of three chips:
* Texas Instruments TSB41AB1 (Physical layer for IEEE 1394 bus)
* Philips Semiconductors 1394L21BE (Link layer for IEEE 1394 bus and
packet processing layer)
* QuickLogic QuickRAM QL4016 (Data block processing layer and digital
signal processing)
This commit adds a support for this model, with its unique protocol as
version 1. The features of this protocol are:
* no MIDI support.
* Rx packets have no data chunks for control and status messages.
* Tx packets have 2 data chunks for control and status messages in the
end of each data block. The chunks consist of data block counter
(4 byte) and message (2 byte).
* All of settings are represented in bit flag in one quadlet address
(0x'ffff'f000'0b00).
* When optical interface is configured as S/PDIF, signals of the interface
is multiplexed for packets, instead of signals of coaxial interface.
* The internal multiplexer is not configured by software.
I note that the device has a quirk to mute output voluntarily during
receiving batch of packets in the beginning of packet streaming. The
operation to unmute should be done by software enough after the device
shifts the state, however it's not deterministic. Furthermore, just
after switching rate of sampling clock, the device keeps the state longer.
This patch manages to sleep 100 msec before unmute operation, but it may
fail to release the mute in the case that the rate is changed. As a
workaround, users can restart packet streaming at the same rate, or write
to specific register from userspace.
$ python3 crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 04105c54 bus_info_length 4, crc_length 16, crc 23636
404 31333934 bus_name "1394"
408 20001000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 0, max_rec 1 (4)
40c 0001f200 company_id 0001f2 |
410 00005015 device_id 0000005015 | EUI-64 0001f20000005015
root directory
-----------------------------------------------------------------
414 0004c65c directory_length 4, crc 50780
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 8d000006 --> eui-64 leaf at 438
424 d1000001 --> unit directory at 428
unit directory at 428
-----------------------------------------------------------------
428 00035052 directory_length 3, crc 20562
42c 120001f2 specifier id
430 13000001 version
434 17101800 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 0002eeb6 leaf_length 2, crc 61110
43c 0001f200 company_id 0001f2 |
440 00005015 device_id 0000005015 | EUI-64 0001f20000005015
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210616082847.124688-2-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-16 17:28:46 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000001, &snd_motu_spec_828),
|
ALSA: firewire-motu: add support for MOTU 896
MOTU 896 is a second model in MOTU FireWire series, produced in 2001. This
model consists of three chips:
* Texas Instruments TSB41AB2 (Physical layer for IEEE 1394 bus)
* Philips Semiconductors PDI 1394L21BE (Link layer for IEEE 1394 bus and
packet processing layer)
* QuickLogic QuickRAM QL4016 (Data block processing layer and digital
signal processing)
This commit adds a support for the model, with its unique protocol as
version 1. The features of this protocol are:
* no MIDI support.
* Rx packets have no data chunks for control and status messages.
* Tx packets have 2 bytes for control and status messages in the end of
each data block.
* The most of settings are represented in bit flag in one quadlet address
(0x'ffff'f000'0b14).
* It's selectable to use signal on optical interface, however the device
has no register specific to it. The state has effect just to whether
to exclude differed data chunks.
* The internal multiplexer is not configured by software.
Just after powering on, the device has a quirk to fail handling
transaction. I recommend users to connect the device enough after powering
on.
$ python3 crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 04102814 bus_info_length 4, crc_length 16, crc 10260
404 31333934 bus_name "1394"
408 20001000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 0, max_rec 1 (4)
40c 0001f200 company_id 0001f2 |
410 0000d645 device_id 000000d645 | EUI-64 0001f2000000d645
root directory
-----------------------------------------------------------------
414 0004c65c directory_length 4, crc 50780
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 8d000006 --> eui-64 leaf at 438
424 d1000001 --> unit directory at 428
unit directory at 428
-----------------------------------------------------------------
428 0003ab34 directory_length 3, crc 43828
42c 120001f2 specifier id
430 13000002 version
434 17102801 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 0002057d leaf_length 2, crc 1405
43c 0001f200 company_id 0001f2 |
440 0000d645 device_id 000000d645 | EUI-64 0001f2000000d645
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210616082847.124688-3-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-16 17:28:47 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000002, &snd_motu_spec_896),
|
2019-10-30 17:06:43 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000003, &snd_motu_spec_828mk2),
|
ALSA: firewire-motu: add support for MOTU 896HD
Mark of the Unicorn (MOTU) shipped 896HD 2003 as one of models in second
generation of its FireWire series, and already discontinued it. The model
consists of below ICs:
* Texas Instruments TSB41AB2
* Phillips Semiconductors PDI1394L40
* Altera cyclone EP1C3
* Texas Instruments TMS320VC5402
It supports sampling transmission frequency up to 192.0 kHz. The packet
format differs depending on both of sampling transfer frequency and enabling
ADAT channels. The model doesn't support MIDI message transmission.
This commit adds support for it.
$ python3 crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 04101b66 bus_info_length 4, crc_length 16, crc 7014
404 31333934 bus_name "1394"
408 20001000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 0, max_rec 1 (4)
40c 0001f200 company_id 0001f2 |
410 0001dbce device_id 000001dbce | EUI-64 0001f2000001dbce
root directory
-----------------------------------------------------------------
414 0004c65c directory_length 4, crc 50780
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 8d000006 --> eui-64 leaf at 438
424 d1000001 --> unit directory at 428
unit directory at 428
-----------------------------------------------------------------
428 0003dcc1 directory_length 3, crc 56513
42c 120001f2 specifier id
430 13000005 version
434 17102800 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 000264f2 leaf_length 2, crc 25842
43c 0001f200 company_id 0001f2 |
440 0001dbce device_id 000001dbce | EUI-64 0001f2000001dbce
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210823085741.33864-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-08-23 17:57:41 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000005, &snd_motu_spec_896hd),
|
2020-05-19 20:16:28 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000009, &snd_motu_spec_traveler),
|
|
|
|
SND_MOTU_DEV_ENTRY(0x00000d, &snd_motu_spec_ultralite),
|
|
|
|
SND_MOTU_DEV_ENTRY(0x00000f, &snd_motu_spec_8pre),
|
2021-06-18 13:07:13 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000015, &snd_motu_spec_828mk3_fw), // FireWire only.
|
ALSA: firewire-motu: add support for MOTU UltraLite-mk3 (FireWire only model)
UltraLite-mk3 was shipped 2008 by MOTU. This model has two lineups;
FireWire-only and FireWire/USB2.0 Hybrid model. Additionally, the latter
has two variants in respect of the type of IEEE 1394 connector; alpha
and beta connector.
This commit adds support for the FireWire-only model, which is already
discontinued.
$ python3 crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 0410353a bus_info_length 4, crc_length 16, crc 13626
404 31333934 bus_name "1394"
408 20ff7000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 255, max_rec 7 (256)
40c 0001f200 company_id 0001f2 |
410 000902c7 device_id 00000902c7 | EUI-64 0001f200000902c7
root directory
-----------------------------------------------------------------
414 0004ef04 directory_length 4, crc 61188
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 d1000002 --> unit directory at 428
424 8d000005 --> eui-64 leaf at 438
unit directory at 428
-----------------------------------------------------------------
428 00035556 directory_length 3, crc 21846
42c 120001f2 specifier id
430 13000019 version
434 17100800 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 0002f3c5 leaf_length 2, crc 62405
43c 0001f200 company_id 0001f2 |
440 000902c7 device_id 00000902c7 | EUI-64 0001f200000902c7
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200523071733.170129-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2020-05-23 16:17:33 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000019, &snd_motu_spec_ultralite_mk3), // FireWire only.
|
ALSA: firewire-motu: add support for MOTU Traveler mk3
Mark of the Unicorn (MOTU) shipped Traveler mk3 as one of models in third
generation of its FireWire series, and discontinued it already. The model
consists of below ICs:
* Texas Instruments TSB41AB2
* Phillips Semiconductors PDI1394L40
* Altera cyclone EP1C3
* Texas Instruments TMS320VC5402
It supports sampling transfer frequency up to 192.0 kHz. The packet
format differs depending on both of current sampling transfer frequency
and whether to enable ADAT channels in rx/tx packets. The model supports
transmission of PCM frames as well as MIDI messages.
The model supports command mechanism to configure internal DSP. Hardware
meter information is available in the first 2 chunks of each data block
of tx packet.
This commit adds support for it.
$ cd linux-firewire-tools/src
$ python crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 0410af0a bus_info_length 4, crc_length 16, crc 44810
404 31333934 bus_name "1394"
408 20ff7000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 255, max_rec 7 (256)
40c 0001f200 company_id 0001f2 |
410 00090911 device_id 0000090911 | EUI-64 0001f20000090911
root directory
-----------------------------------------------------------------
414 0004ef04 directory_length 4, crc 61188
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 d1000002 --> unit directory at 428
424 8d000005 --> eui-64 leaf at 438
unit directory at 428
-----------------------------------------------------------------
428 00031733 directory_length 3, crc 5939
42c 120001f2 specifier id
430 1300001b version
434 17102800 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 00028484 leaf_length 2, crc 33924
43c 0001f200 company_id 0001f2 |
440 00090911 device_id 0000090911 | EUI-64 0001f20000090911
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20211104110627.94469-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-11-04 20:06:27 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x00001b, &snd_motu_spec_traveler_mk3),
|
ALSA: firewire-motu: add support for hybrid model of MOTU Ultralite mk3
This commit adds support for the hybrid model of MOTU Ultralite mk3 with
alpha connector, which is already discontinued. The hardware specification
of the model is the same as the one of FireWire-only model.
$ cd linux-firewire-utils
$ python3 src/crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 04101573 bus_info_length 4, crc_length 16, crc 5491
404 31333934 bus_name "1394"
408 20ff7000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 255, max_rec 7 (256)
40c 0001f200 company_id 0001f2 |
410 000a059c device_id 00000a059c | EUI-64 0001f200000a059c
root directory
-----------------------------------------------------------------
414 0004ef04 directory_length 4, crc 61188
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 d1000002 --> unit directory at 428
424 8d000005 --> eui-64 leaf at 438
unit directory at 428
-----------------------------------------------------------------
428 0003f00b directory_length 3, crc 61451
42c 120001f2 specifier id
430 13000030 version
434 17103800 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 0002d89c leaf_length 2, crc 55452
43c 0001f200 company_id 0001f2 |
440 000a059c device_id 00000a059c | EUI-64 0001f200000a059c
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210606043409.40019-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-06 13:34:09 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000030, &snd_motu_spec_ultralite_mk3), // Hybrid.
|
2021-06-18 13:07:13 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000035, &snd_motu_spec_828mk3_hybrid), // Hybrid.
|
2020-05-19 20:16:29 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000033, &snd_motu_spec_audio_express),
|
ALSA: firewire-motu: add support for MOTU Track 16
Mark of the Unicorn designed Track 16 2011 as one of models in third
generation of its FireWire series. The model is already discontinued.
It consists of below ICs:
* Texas Instruments TSB41AB1
* Microchip (SMSC) USB3300
* Xilinx Spartan-3A FPGA, XC3S700A
* Texas Instruments TMS320C6722
* Microchip (Atmel) AT91SAM SAM7S512
It supports sampling transfer frequency up to 192.0 kHz. The packet
format differs depending on both of current sampling transfer frequency
and the type of signal in optical interfaces. The model supports
transmission of PCM frames as well as MIDI messages.
The model supports command mechanism to configure internal DSP. Hardware
meter information is available in the first 2 chunks of each data block
of tx packet.
This commit adds support for it.
$ cd linux-firewire-tools/src
$ python crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400 04107d95 bus_info_length 4, crc_length 16, crc 32149
404 31333934 bus_name "1394"
408 20ff7000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 255, max_rec 7 (256)
40c 0001f200 company_id 0001f2 |
410 000a83c4 device_id 00000a83c4 | EUI-64 0001f200000a83c4
root directory
-----------------------------------------------------------------
414 0004ef04 directory_length 4, crc 61188
418 030001f2 vendor
41c 0c0083c0 node capabilities per IEEE 1394
420 d1000002 --> unit directory at 428
424 8d000005 --> eui-64 leaf at 438
unit directory at 428
-----------------------------------------------------------------
428 00035b04 directory_length 3, crc 23300
42c 120001f2 specifier id
430 13000039 version
434 17102800 model
eui-64 leaf at 438
-----------------------------------------------------------------
438 0002b25f leaf_length 2, crc 45663
43c 0001f200 company_id 0001f2 |
440 000a83c4 device_id 00000a83c4 | EUI-64 0001f200000a83c4
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20211107110644.23511-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-11-07 20:06:44 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000039, &snd_motu_spec_track16),
|
2020-05-19 20:16:29 +09:00
|
|
|
SND_MOTU_DEV_ENTRY(0x000045, &snd_motu_spec_4pre),
|
2017-03-22 21:30:11 +09:00
|
|
|
{ }
|
|
|
|
};
|
|
|
|
MODULE_DEVICE_TABLE(ieee1394, motu_id_table);
|
|
|
|
|
|
|
|
static struct fw_driver motu_driver = {
|
|
|
|
.driver = {
|
|
|
|
.owner = THIS_MODULE,
|
|
|
|
.name = KBUILD_MODNAME,
|
|
|
|
.bus = &fw_bus_type,
|
|
|
|
},
|
|
|
|
.probe = motu_probe,
|
|
|
|
.update = motu_bus_update,
|
|
|
|
.remove = motu_remove,
|
|
|
|
.id_table = motu_id_table,
|
|
|
|
};
|
|
|
|
|
|
|
|
static int __init alsa_motu_init(void)
|
|
|
|
{
|
|
|
|
return driver_register(&motu_driver.driver);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __exit alsa_motu_exit(void)
|
|
|
|
{
|
|
|
|
driver_unregister(&motu_driver.driver);
|
|
|
|
}
|
|
|
|
|
|
|
|
module_init(alsa_motu_init);
|
|
|
|
module_exit(alsa_motu_exit);
|