[alsa-devel] [PATCH] ALSA: dice: fix wrong offsets for Dice interface

Takashi Sakamoto o-takashi at sakamocchi.jp
Mon Mar 9 14:11:48 CET 2015


On Mar 1 2015 18:50, Takashi Iwai wrote:
> At Sun,  1 Mar 2015 18:12:16 +0900,
> Takashi Sakamoto wrote:
>>
>> For received packet stream, the offset of 'RX_SEQ_START' locates after
>> the offset of 'RX_NUMBER_MIDI', although current macro and proc output
>> includes wrong offsets.
>>
>> Fortunately, this bug doesn't affect streaming functionality because
>> these macro is not used.
>>
>> This commit fixes these wrong macro and outputs.
>>
>> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
> 
> Applied, thanks.
> 
> 
> Takashi

I realized this commit is completely wrong. These addresses were true
but I did mis-operations to confirm it. Would you please revert this commit?

Against my previous comment, 'RX_NUMBER_AUDIO' is used in
dice_read_mode_params(). This wrong patch causes mis-detection of
audio/midi data channels (usually RX_SEQ_START is zero, therefore the
number of audio data channel is detect zero, wrongly), thus Dice driver
becomes to work badly, sorry...


Regards

Takashi Sakamoto

>> ---
>>  sound/firewire/dice/dice-interface.h | 18 +++++++++---------
>>  sound/firewire/dice/dice-proc.c      |  4 ++--
>>  2 files changed, 11 insertions(+), 11 deletions(-)
>>
>> diff --git a/sound/firewire/dice/dice-interface.h b/sound/firewire/dice/dice-interface.h
>> index 27b044f..de7602b 100644
>> --- a/sound/firewire/dice/dice-interface.h
>> +++ b/sound/firewire/dice/dice-interface.h
>> @@ -299,23 +299,23 @@
>>  #define RX_ISOCHRONOUS			0x008
>>  
>>  /*
>> - * Index of first quadlet to be interpreted; read/write.  If > 0, that many
>> - * quadlets at the beginning of each data block will be ignored, and all the
>> - * audio and MIDI quadlets will follow.
>> - */
>> -#define RX_SEQ_START			0x00c
>> -
>> -/*
>>   * The number of audio channels; read-only.  There will be one quadlet per
>>   * channel.
>>   */
>> -#define RX_NUMBER_AUDIO			0x010
>> +#define RX_NUMBER_AUDIO			0x00c
>>  
>>  /*
>>   * The number of MIDI ports, 0-8; read-only.  If > 0, there will be one
>>   * additional quadlet in each data block, following the audio quadlets.
>>   */
>> -#define RX_NUMBER_MIDI			0x014
>> +#define RX_NUMBER_MIDI			0x010
>> +
>> +/*
>> + * Index of first quadlet to be interpreted; read/write.  If > 0, that many
>> + * quadlets at the beginning of each data block will be ignored, and all the
>> + * audio and MIDI quadlets will follow.
>> + */
>> +#define RX_SEQ_START			0x014
>>  
>>  /*
>>   * Names of all audio channels; read-only.  Quadlets are byte-swapped.  Names
>> diff --git a/sound/firewire/dice/dice-proc.c b/sound/firewire/dice/dice-proc.c
>> index f5c1d1b..ecfe20f 100644
>> --- a/sound/firewire/dice/dice-proc.c
>> +++ b/sound/firewire/dice/dice-proc.c
>> @@ -99,9 +99,9 @@ static void dice_proc_read(struct snd_info_entry *entry,
>>  		} tx;
>>  		struct {
>>  			u32 iso;
>> -			u32 seq_start;
>>  			u32 number_audio;
>>  			u32 number_midi;
>> +			u32 seq_start;
>>  			char names[RX_NAMES_SIZE];
>>  			u32 ac3_caps;
>>  			u32 ac3_enable;
>> @@ -204,10 +204,10 @@ static void dice_proc_read(struct snd_info_entry *entry,
>>  			break;
>>  		snd_iprintf(buffer, "rx %u:\n", stream);
>>  		snd_iprintf(buffer, "  iso channel: %d\n", (int)buf.rx.iso);
>> -		snd_iprintf(buffer, "  sequence start: %u\n", buf.rx.seq_start);
>>  		snd_iprintf(buffer, "  audio channels: %u\n",
>>  			    buf.rx.number_audio);
>>  		snd_iprintf(buffer, "  midi ports: %u\n", buf.rx.number_midi);
>> +		snd_iprintf(buffer, "  sequence start: %u\n", buf.rx.seq_start);
>>  		if (quadlets >= 68) {
>>  			dice_proc_fixup_string(buf.rx.names, RX_NAMES_SIZE);
>>  			snd_iprintf(buffer, "  names: %s\n", buf.rx.names);
>> -- 
>> 2.1.0


More information about the Alsa-devel mailing list