提交 b20be8de 编写于 作者: C Clemens Ladisch

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: NClemens Ladisch <clemens@ladisch.de>
上级 a471fcde
...@@ -12,14 +12,16 @@ config SND_FIREWIRE_LIB ...@@ -12,14 +12,16 @@ config SND_FIREWIRE_LIB
depends on SND_PCM depends on SND_PCM
config SND_DICE config SND_DICE
tristate "DICE devices (EXPERIMENTAL)" tristate "DICE-based DACs (EXPERIMENTAL)"
select SND_HWDEP select SND_HWDEP
select SND_PCM select SND_PCM
select SND_FIREWIRE_LIB select SND_FIREWIRE_LIB
help help
Say Y here to include support for many FireWire audio interfaces Say Y here to include support for many DACs based on the DICE
based on the DICE chip family (DICE-II/Jr/Mini) from TC Applied chip family (DICE-II/Jr/Mini) from TC Applied Technologies.
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 To compile this driver as a module, choose M here: the module
will be called snd-dice. will be called snd-dice.
......
...@@ -1128,6 +1128,7 @@ static int dice_interface_check(struct fw_unit *unit) ...@@ -1128,6 +1128,7 @@ static int dice_interface_check(struct fw_unit *unit)
int key, value, vendor = -1, model = -1, err; int key, value, vendor = -1, model = -1, err;
unsigned int category, i; unsigned int category, i;
__be32 pointers[ARRAY_SIZE(min_values)]; __be32 pointers[ARRAY_SIZE(min_values)];
__be32 tx_data[4];
__be32 version; __be32 version;
/* /*
...@@ -1171,6 +1172,14 @@ static int dice_interface_check(struct fw_unit *unit) ...@@ -1171,6 +1172,14 @@ static int dice_interface_check(struct fw_unit *unit)
return -ENODEV; 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 * Check that the implemented DICE driver specification major version
* number matches. * number matches.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册