[alsa-devel] [PATCH] ALSA: bebob: compare whole string for model name so that readers are not confused

Takashi Iwai tiwai at suse.de
Fri Nov 18 09:24:35 CET 2016


On Thu, 17 Nov 2016 22:11:24 +0100,
Takashi Sakamoto wrote:
> 
> A modalias of 'ieee1394:ven00000D6Cmo00010060sp' hits units for M-Audio
> FireWire Audiophile only. However the unit has two states relevant to
> loaded firmware. Initial firmware returns 'FW Audiophile Bootloader',
> while functional firmware returns 'FW Audiophile'.
> 
> ALSA bebob driver compares the units' model name to strings of 24 characters
> by the first 15 characters. This is shorter way to differentiate these two
> states but confusing to readers.
> 
> This commit improves the code for this point. Kernel stack is consumed more in
> call of check_audiophile_booted() by a bit.
> 
> With initial firmware:
> $ ./linux-firewire-utils/src/crpp < /sys/bus/firewire/devices/fw1/config_rom
>                ROM header and bus information block
>                -----------------------------------------------------------------
> 400  04276da6  bus_info_length 4, crc_length 39, crc 28070
> 404  31333934  bus_name "1394"
> 408  006481f2  irmc 0, cmc 0, isc 0, bmc 0, pmc 0, cyc_clk_acc 100,
>                max_rec 8 (512), max_rom 1, gen 15, spd 2 (S400)
> 40c  000d6c03  company_id 000d6c     |
> 410  102b7e2e  device_id 03102b7e2e  | EUI-64 000d6c03102b7e2e
> 
>                root directory
>                -----------------------------------------------------------------
> 414  00067414  directory_length 6, crc 29716
> 418  0c0083c0  node capabilities per IEEE 1394
> 41c  03000d6c  vendor
> 420  81000009  --> descriptor leaf at 444
> 424  17010060  model
> 428  8100000c  --> descriptor leaf at 458
> 42c  d1000001  --> unit directory at 430
> 
>                unit directory at 430
>                -----------------------------------------------------------------
> 430  00049da1  directory_length 4, crc 40353 (should be 48611)
> 434  1200a02d  specifier id: 1394 TA
> 438  13014001  version: Vender Unique and AV/C
> 43c  17010060  model
> 440  8100000f  --> descriptor leaf at 47c
> 
>                descriptor leaf at 444
>                -----------------------------------------------------------------
> 444  0004073e  leaf_length 4, crc 1854
> 448  00000000  textual descriptor
> 44c  00000000  minimal ASCII
> 450  4d2d4155  "M-AU"
> 454  44494f00  "DIO"
> 
>                descriptor leaf at 458
>                -----------------------------------------------------------------
> 458  00086f21  leaf_length 8, crc 28449
> 45c  00000000  textual descriptor
> 460  00000000  minimal ASCII
> 464  46572041  "FW A"
> 468  7564696f  "udio"
> 46c  7068696c  "phil"
> 470  6520426f  "e Bo"
> 474  6f746c6f  "otlo"
> 478  61646572  "ader"
> 
>                descriptor leaf at 47c
>                -----------------------------------------------------------------
> 47c  00086f21  leaf_length 8, crc 28449
> 480  00000000  textual descriptor
> 484  00000000  minimal ASCII
> 488  46572041  "FW A"
> 48c  7564696f  "udio"
> 490  7068696c  "phil"
> 494  6520426f  "e Bo"
> 498  6f746c6f  "otlo"
> 49c  61646572  "ader"
> 
> With functional firmware:
> $ ./linux-firewire-utils/src/crpp < /sys/bus/firewire/devices/fw1/config_rom
>                ROM header and bus information block
>                -----------------------------------------------------------------
> 400  042de16f  bus_info_length 4, crc_length 45, crc 57711
> 404  31333934  bus_name "1394"
> 408  f0648122  irmc 1, cmc 1, isc 1, bmc 1, pmc 0, cyc_clk_acc 100,
>                max_rec 8 (512), max_rom 1, gen 2, spd 2 (S400)
> 40c  000d6c03  company_id 000d6c     |
> 410  002b7e2e  device_id 03002b7e2e  | EUI-64 000d6c03002b7e2e
> 
>                root directory
>                -----------------------------------------------------------------
> 414  0009dac4  directory_length 9, crc 56004
> 418  0400000d  hardware version
> 41c  0c0083c0  node capabilities per IEEE 1394
> 420  03000d6c  vendor
> 424  81000012  --> descriptor leaf at 46c
> 428  17010060  model
> 42c  81000015  --> descriptor leaf at 480
> 430  13ffffff  version
> 434  d1000002  --> unit directory at 43c
> 438  d4000006  --> dependent info directory at 450
> 
>                unit directory at 43c
>                -----------------------------------------------------------------
> 43c  00041eb9  directory_length 4, crc 7865
> 440  1200a02d  specifier id: 1394 TA
> 444  13014001  version: Vender Unique and AV/C
> 448  17010060  model
> 44c  81000014  --> descriptor leaf at 49c
> 
>                dependent info directory at 450
>                -----------------------------------------------------------------
> 450  000637c7  directory_length 6, crc 14279
> 454  120007f5  specifier id
> 458  13000001  version
> 45c  3affffc7  (immediate value)
> 460  3b100000  (immediate value)
> 464  3cffffc7  (immediate value)
> 468  3d600000  (immediate value)
> 
>                descriptor leaf at 46c
>                -----------------------------------------------------------------
> 46c  0004b8e4  leaf_length 4, crc 47332
> 470  00000000  textual descriptor
> 474  00000000  minimal ASCII
> 478  4d2d4175  "M-Au"
> 47c  64696f00  "dio"
> 
>                descriptor leaf at 480
>                -----------------------------------------------------------------
> 480  0006194b  leaf_length 6, crc 6475
> 484  00000000  textual descriptor
> 488  00000000  minimal ASCII
> 48c  46572041  "FW A"
> 490  7564696f  "udio"
> 494  7068696c  "phil"
> 498  65000000  "e"
> 
>                descriptor leaf at 49c
>                -----------------------------------------------------------------
> 49c  0006194b  leaf_length 6, crc 6475
> 4a0  00000000  textual descriptor
> 4a4  00000000  minimal ASCII
> 4a8  46572041  "FW A"
> 4ac  7564696f  "udio"
> 4b0  7068696c  "phil"
> 4b4  65000000  "e"
> 
> Reported-by: Nicolas Iooss <nicolas.iooss_linux at m4x.org>
> Reported-by: Joe Perches <joe at perches.com>
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>

Applied, thanks.


Takashi


> ---
>  sound/firewire/bebob/bebob.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c
> index 3469ac14..730ea91 100644
> --- a/sound/firewire/bebob/bebob.c
> +++ b/sound/firewire/bebob/bebob.c
> @@ -172,12 +172,12 @@ get_saffire_spec(struct fw_unit *unit)
>  static bool
>  check_audiophile_booted(struct fw_unit *unit)
>  {
> -	char name[24] = {0};
> +	char name[28] = {0};
>  
>  	if (fw_csr_string(unit->directory, CSR_MODEL, name, sizeof(name)) < 0)
>  		return false;
>  
> -	return strncmp(name, "FW Audiophile Bootloader", 15) != 0;
> +	return strncmp(name, "FW Audiophile Bootloader", 24) != 0;
>  }
>  
>  static void
> -- 
> 2.9.3
> 


More information about the Alsa-devel mailing list