• Takashi Sakamoto's avatar
    ALSA: bebob: compare whole string for model name so that readers are not confused · 2e57069c
    Takashi Sakamoto authored
    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: default avatarNicolas Iooss <nicolas.iooss_linux@m4x.org>
    Reported-by: default avatarJoe Perches <joe@perches.com>
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    2e57069c
bebob.c 16.2 KB