Commit 90089677 authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: fireface: add model-dependent parameter for address range to receive async transaction

In Fireface series, drivers can register destination address for
asynchronous transaction which transfers MIDI messages from device.

In former models, all of the transactions arrive at the registered
address without any offset. In latter models, each of the transaction
arrives at the registered address with sequential offset within 0x00
to 0x7f. This seems to be for discontinuity detection.

This commit adds model-dependent member for the address range.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 6c644e4e
...@@ -156,7 +156,7 @@ static int allocate_own_address(struct snd_ff *ff, int i) ...@@ -156,7 +156,7 @@ static int allocate_own_address(struct snd_ff *ff, int i)
struct fw_address_region midi_msg_region; struct fw_address_region midi_msg_region;
int err; int err;
ff->async_handler.length = SND_FF_MAXIMIM_MIDI_QUADS * 4; ff->async_handler.length = ff->spec->midi_addr_range;
ff->async_handler.address_callback = handle_midi_msg; ff->async_handler.address_callback = handle_midi_msg;
ff->async_handler.callback_data = ff; ff->async_handler.callback_data = ff;
......
...@@ -159,6 +159,7 @@ static const struct snd_ff_spec spec_ff800 = { ...@@ -159,6 +159,7 @@ static const struct snd_ff_spec spec_ff800 = {
.midi_out_ports = 1, .midi_out_ports = 1,
.protocol = &snd_ff_protocol_ff800, .protocol = &snd_ff_protocol_ff800,
.midi_high_addr = 0x000200000320ull, .midi_high_addr = 0x000200000320ull,
.midi_addr_range = 12,
}; };
static const struct snd_ff_spec spec_ff400 = { static const struct snd_ff_spec spec_ff400 = {
...@@ -169,6 +170,7 @@ static const struct snd_ff_spec spec_ff400 = { ...@@ -169,6 +170,7 @@ static const struct snd_ff_spec spec_ff400 = {
.midi_out_ports = 2, .midi_out_ports = 2,
.protocol = &snd_ff_protocol_ff400, .protocol = &snd_ff_protocol_ff400,
.midi_high_addr = 0x0000801003f4ull, .midi_high_addr = 0x0000801003f4ull,
.midi_addr_range = SND_FF_MAXIMIM_MIDI_QUADS * 4,
}; };
static const struct snd_ff_spec spec_ucx = { static const struct snd_ff_spec spec_ucx = {
......
...@@ -54,6 +54,7 @@ struct snd_ff_spec { ...@@ -54,6 +54,7 @@ struct snd_ff_spec {
const struct snd_ff_protocol *protocol; const struct snd_ff_protocol *protocol;
u64 midi_high_addr; u64 midi_high_addr;
u8 midi_addr_range;
}; };
struct snd_ff { struct snd_ff {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment