diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2013-10-15 20:26:05 +0200 |
---|---|---|
committer | Clemens Ladisch <clemens@ladisch.de> | 2013-10-20 22:07:57 +0200 |
commit | b20be8de1b3972ccf9af72850b045214faa8d830 (patch) | |
tree | 4420dfd34eb1feb12caf9b8c5ed032174a6dc148 /sound/firewire | |
parent | ALSA: dice: fix detection of Weiss devices (diff) | |
download | linux-b20be8de1b3972ccf9af72850b045214faa8d830.tar.xz linux-b20be8de1b3972ccf9af72850b045214faa8d830.zip |
ALSA: dice: restrict the driver to playback-only devices
At the moment, this driver supports only playback, while FFADO supports
(only) full-duplex devices. So, prevent conflicts by not claiming
devices that would be better handled by FFADO.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'sound/firewire')
-rw-r--r-- | sound/firewire/Kconfig | 10 | ||||
-rw-r--r-- | sound/firewire/dice.c | 9 |
2 files changed, 15 insertions, 4 deletions
diff --git a/sound/firewire/Kconfig b/sound/firewire/Kconfig index 915330989412..b3e274fe4a77 100644 --- a/sound/firewire/Kconfig +++ b/sound/firewire/Kconfig @@ -12,14 +12,16 @@ config SND_FIREWIRE_LIB depends on SND_PCM config SND_DICE - tristate "DICE devices (EXPERIMENTAL)" + tristate "DICE-based DACs (EXPERIMENTAL)" select SND_HWDEP select SND_PCM select SND_FIREWIRE_LIB help - Say Y here to include support for many FireWire audio interfaces - based on the DICE chip family (DICE-II/Jr/Mini) from TC Applied - Technologies. + Say Y here to include support for many DACs based on the DICE + chip family (DICE-II/Jr/Mini) from TC Applied Technologies. + + At the moment, this driver supports playback only. If you + want to use devices that support capturing, use FFADO instead. To compile this driver as a module, choose M here: the module will be called snd-dice. diff --git a/sound/firewire/dice.c b/sound/firewire/dice.c index 49d630ba2d9f..6feee6614193 100644 --- a/sound/firewire/dice.c +++ b/sound/firewire/dice.c @@ -1128,6 +1128,7 @@ static int dice_interface_check(struct fw_unit *unit) int key, value, vendor = -1, model = -1, err; unsigned int category, i; __be32 pointers[ARRAY_SIZE(min_values)]; + __be32 tx_data[4]; __be32 version; /* @@ -1171,6 +1172,14 @@ static int dice_interface_check(struct fw_unit *unit) return -ENODEV; } + /* We support playback only. Let capture devices be handled by FFADO. */ + err = snd_fw_transaction(unit, TCODE_READ_BLOCK_REQUEST, + DICE_PRIVATE_SPACE + + be32_to_cpu(pointers[2]) * 4, + tx_data, sizeof(tx_data), 0); + if (err < 0 || (tx_data[0] && tx_data[3])) + return -ENODEV; + /* * Check that the implemented DICE driver specification major version * number matches. |