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

Takashi Iwai tiwai at suse.de
Wed Nov 26 09:43:33 CET 2014


At Tue, 25 Nov 2014 22:52:24 +0100,
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?


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