[alsa-devel] [PATCH 1/2] ALSA: firewire-lib: remove rx_blocks_for_midi quirk

Clemens Ladisch clemens at ladisch.de
Wed Nov 26 10:17:19 CET 2014


Takashi Iwai wrote:
> Clemens Ladisch wrote:
>>
>> There are several devices that expect to receive MIDI data only in the
>> first eight data blocks of a packet.  If the driver restricts the data
>> rate to the allowed rate (as mandated by the specification, but not yet
>> implemented by this driver), this happens naturally.  Therefore, there
>> is no reason to ever try to use more data packets with any device.
>>
>> Signed-off-by: Clemens Ladisch <clemens at ladisch.de>
>
> To which branch is the patch applied?

Sorry; this is intended for 3.19.


Regards,
Clemens

>
>
> Takashi
>
>> ---
>>  sound/firewire/amdtp.c                      |   10 +++++++---
>>  sound/firewire/amdtp.h                      |    3 ---
>>  sound/firewire/bebob/bebob_stream.c         |    7 -------
>>  sound/firewire/fireworks/fireworks_stream.c |    5 -----
>>  4 files changed, 7 insertions(+), 18 deletions(-)
>>
>> diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
>> index 3badc70..17548d8 100644
>> --- a/sound/firewire/amdtp.c
>> +++ b/sound/firewire/amdtp.c
>> @@ -21,6 +21,12 @@
>>  #define CYCLES_PER_SECOND	8000
>>  #define TICKS_PER_SECOND	(TICKS_PER_CYCLE * CYCLES_PER_SECOND)
>>
>> +/*
>> + * Several devices look only at the first eight data blocks.
>> + * In any case, this is more than enough for the MIDI data rate.
>> + */
>> +#define MAX_MIDI_RX_BLOCKS	8
>> +
>>  #define TRANSFER_DELAY_TICKS	0x2e00 /* 479.17 µs */
>>
>>  /* isochronous header parameters */
>> @@ -78,8 +84,6 @@ int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
>>  	s->callbacked = false;
>>  	s->sync_slave = NULL;
>>
>> -	s->rx_blocks_for_midi = UINT_MAX;
>> -
>>  	return 0;
>>  }
>>  EXPORT_SYMBOL(amdtp_stream_init);
>> @@ -474,7 +478,7 @@ static void amdtp_fill_midi(struct amdtp_stream *s,
>>  		b = (u8 *)&buffer[s->midi_position];
>>
>>  		port = (s->data_block_counter + f) % 8;
>> -		if ((f >= s->rx_blocks_for_midi) ||
>> +		if ((f >= MAX_MIDI_RX_BLOCKS) ||
>>  		    (s->midi[port] == NULL) ||
>>  		    (snd_rawmidi_transmit(s->midi[port], b + 1, 1) <= 0))
>>  			b[0] = 0x80;
>> diff --git a/sound/firewire/amdtp.h b/sound/firewire/amdtp.h
>> index e6e8926..cd4c4df 100644
>> --- a/sound/firewire/amdtp.h
>> +++ b/sound/firewire/amdtp.h
>> @@ -152,9 +152,6 @@ struct amdtp_stream {
>>  	/* quirk: fixed interval of dbc between previos/current packets. */
>>  	unsigned int tx_dbc_interval;
>>
>> -	/* quirk: the first count of data blocks in an rx packet for MIDI */
>> -	unsigned int rx_blocks_for_midi;
>> -
>>  	bool callbacked;
>>  	wait_queue_head_t callback_wait;
>>  	struct amdtp_stream *sync_slave;
>> diff --git a/sound/firewire/bebob/bebob_stream.c b/sound/firewire/bebob/bebob_stream.c
>> index 1aab0a32..0ebcabf 100644
>> --- a/sound/firewire/bebob/bebob_stream.c
>> +++ b/sound/firewire/bebob/bebob_stream.c
>> @@ -484,13 +484,6 @@ int snd_bebob_stream_init_duplex(struct snd_bebob *bebob)
>>  		amdtp_stream_destroy(&bebob->rx_stream);
>>  		destroy_both_connections(bebob);
>>  	}
>> -	/*
>> -	 * The firmware for these devices ignore MIDI messages in more than
>> -	 * first 8 data blocks of an received AMDTP packet.
>> -	 */
>> -	if (bebob->spec == &maudio_fw410_spec ||
>> -	    bebob->spec == &maudio_special_spec)
>> -		bebob->rx_stream.rx_blocks_for_midi = 8;
>>  end:
>>  	return err;
>>  }
>> diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c
>> index b985fc5..4f440e1 100644
>> --- a/sound/firewire/fireworks/fireworks_stream.c
>> +++ b/sound/firewire/fireworks/fireworks_stream.c
>> @@ -179,11 +179,6 @@ int snd_efw_stream_init_duplex(struct snd_efw *efw)
>>  		destroy_stream(efw, &efw->tx_stream);
>>  		goto end;
>>  	}
>> -	/*
>> -	 * Fireworks ignores MIDI messages in more than first 8 data
>> -	 * blocks of an received AMDTP packet.
>> -	 */
>> -	efw->rx_stream.rx_blocks_for_midi = 8;
>>
>>  	/* set IEC61883 compliant mode (actually not fully compliant...) */
>>  	err = snd_efw_command_set_tx_mode(efw, SND_EFW_TRANSPORT_MODE_IEC61883);
>>



More information about the Alsa-devel mailing list