24 Aug, 2016

1 commit


31 Mar, 2016

1 commit

  • Some bebob based units tends to fail asynchronous communication when
    IEEE 1394 bus is under bus-reset state. When registering sound card
    instance at unit probe callback, userspace applications can be involved
    to the state.

    This commit postpones the registration till the bus is calm.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

28 Mar, 2016

1 commit


20 Feb, 2016

2 commits

  • DM1000/DM1100/DM1500 chipsets transfer packets with discontinue value in
    'dbc' field of CIP header. For ALSA bebob driver, this makes its bus-reset
    handler meaningless, because the discontinuity is detected quite earlier
    than executing the handler.

    This commit gives up updating streams at the bus reset handler.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • At bus-reset, DM1000/DM1100/DM1500 chipsets transfer packets with
    discontinuous value in 'dbc' field of CIP header. In this case, packet
    streaming layer in firewire-lib module stops streaming and set XRUN to PCM
    substream.

    In ALSA, PCM applications are notified the XRUN status by the return value
    of ALSA PCM interface. They can recover this state by executing
    snd_pcm_prepare(), then PCM drivers' prepare handler is called, and start
    new PCM substream. For ALSA BeBoB driver, the handler establishes new
    connections and start new AMDTP streaming.

    Unfortunately, neither the PCM applications nor the driver know the reason
    of XRUN. The driver gets to know the reason when update handler is called
    by IEEE 1394 bus driver. As long as I tested, the order of below events are
    not fixed:
    * Detecting packet discontinuity in tasklet context of OHCI 1394 driver
    * Calling prepare handler in process context of ALSA PCM application
    * Calling update handler in kthread context of IEEE 1394 bus driver

    The unpredictable order is disadvantage for the driver to be compliant to
    CMP. In IEC 61883-1, new CMP establish operations should be done 1 sec
    (isoc_resource_delay) after bus-reset. Within 1 sec, CMP restore
    operations are allowed. For this reason, in former commit ('b6bc812327aa:
    ALSA: bebob/firewire-lib: Add a quirk for discontinuity at bus reset'),
    the process context is forced to wait for executing update handler. The
    process context wait for bus-reset up to 1 sec. This commit solves the
    issue, while causes more disadvantages. For PCM applications, calling
    snd_pcm_prepare() for recovering XRUN state takes more time and the driver
    got a bit complicated code, while the recovery is not always successful.

    As long as I tested, DM1000/DM1100/DM1500 and BeBoB firmware can allow
    drivers to establish new connections just after bus reset. Furthermore,
    any FCP transactions are handled correctly. Therefore, the driver don't
    need to wait for bus reset handler for starting new streaming.

    This commit removes the codes to reduce maintenance cost.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

12 Oct, 2015

1 commit

  • The structures of type snd_bebob_clock_spec, snd_bebob_rate_spec,
    snd_bebob_meter_spec, and snd_bebob_spec are never modified after they are
    initialized. Make them all const.

    Done with the help of Coccinelle.

    Signed-off-by: Julia Lawall
    Tested-by: Takashi Sakamoto
    Reviewed-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Julia Lawall
     

04 Oct, 2015

1 commit

  • Current ALSA BeBoB drivers has an entry for this model, while the value of
    vendor ID seems to be wrong according to an user's report.

    The vendor had released no updated firmware, thus we can judge that this
    model had not changed the content of its config ROM. It's reasonable to fix
    the ID according to the report.

    $ ./linux-firewire-utils/src/crpp < /sys/bus/firewire/devices/fw1/config_rom

    ROM header and bus information block
    -----------------------------------------------------------------
    400 0425720f bus_info_length 4, crc_length 37, crc 29199
    404 31333934 bus_name "1394"
    408 f0646122 irmc 1, cmc 1, isc 1, bmc 1, pmc 0, cyc_clk_acc 100,
    max_rec 6 (128), max_rom 1, gen 2, spd 2 (S400)
    40c 00000ff2 company_id 00000f |
    410 00004697 device_id f200004697 | EUI-64 00000ff200004697

    root directory
    -----------------------------------------------------------------
    414 000859be directory_length 8, crc 22974
    418 04000082 hardware version
    41c 0c0083c0 node capabilities per IEEE 1394
    420 03000ff2 vendor
    424 8100000a --> descriptor leaf at 44c
    428 17010065 model
    42c 8100000d --> descriptor leaf at 460
    430 13000910 version
    434 d1000001 --> unit directory at 438

    unit directory at 438
    -----------------------------------------------------------------
    438 0004ccec directory_length 4, crc 52460
    43c 1200a02d specifier id: 1394 TA
    440 13010001 version: AV/C
    444 17010065 model
    448 8100000d --> descriptor leaf at 47c

    descriptor leaf at 44c
    -----------------------------------------------------------------
    44c 0004152a leaf_length 4, crc 5418
    450 00000000 textual descriptor
    454 00000000 minimal ASCII
    458 4d61636b "Mack"
    45c 69650000 "ie"

    descriptor leaf at 460
    -----------------------------------------------------------------
    460 000612b5 leaf_length 6, crc 4789
    464 00000000 textual descriptor
    468 00000000 minimal ASCII
    46c 4f6e7978 "Onyx"
    470 20466972 " Fir"
    474 65776972 "ewir"
    478 65000000 "e"

    descriptor leaf at 47c
    -----------------------------------------------------------------
    47c 000612b5 leaf_length 6, crc 4789
    480 00000000 textual descriptor
    484 00000000 minimal ASCII
    488 4f6e7978 "Onyx"
    48c 20466972 " Fir"
    490 65776972 "ewir"
    494 65000000 "e"

    $ cat /proc/asound/card3/firewire/firmware
    Manufacturer: bridgeCo
    Protocol Ver: 1
    Build Ver: 0
    GUID: 0x00000FF200004697
    Model ID: 0x82
    Model Rev: 1
    Firmware Date: 20040430
    Firmware Time: 131527
    Firmware ID: 0x10065
    Firmware Ver: 2320
    Base Addr: 0x20080000
    Max Size: 1572864
    Loader Date: 20040430
    Loader Time: 112036

    Reported-by: Andrzej Gansiniec
    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

15 Jun, 2015

2 commits

  • They're based on DM1500 (ArchWave produced), and BeBoB version 3 is
    installed.

    $ cat /proc/asound/FCA610/firewire/firmware
    Manufacturer: bridgeCo
    Protocol Ver: 3
    Build Ver: 0
    GUID: 0x001564000002AD73
    Model ID: 0x03
    Model Rev: 0
    Firmware Date: 20121102
    Firmware Time: 153431
    Firmware ID: 0x610
    Firmware Ver: 8348
    Base Addr: 0x400C0080
    Max Size: 1422624
    Loader Date: 20121015
    Loader Time: 104710

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • BeBoB installed devices have BeBoB register area. This area stores
    basic information about its firmware. A register has its protocol
    version.

    This commit adds 'version' member and store the device's protocol
    version to handle v3 quirks in following commits.

    Tested-by: Kim Tore Jensen
    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

24 May, 2015

1 commit

  • This device is based on DM1000E, and BeBoB version 1 firmware is
    installed.

    $ cat /proc/asound/cards
    0 [Pro ]: BeBoB - Mbox 2 Pro
    DIGIDESIGN Mbox 2 Pro (id:1, rev:1),
    GUID 00a07e0100a90000 at fw1.0, S400

    $ cat /proc/asound/Pro/firewire/firmware
    Manufacturer: bridgeCo
    Protocol Ver: 1
    Build Ver: 0
    GUID: 0x00A07E0100A90000
    Model ID: 0x01
    Model Rev: 1
    Firmware Date: 20071031
    Firmware Time: 034402
    Firmware ID: 0xA9
    Firmware Ver: 16777215
    Base Addr: 0x20080000
    Max Size: 1572864
    Loader Date: 20051207
    Loader Time: 205554

    With this patch, ALSA BeBoB driver can start packet streaming to/from
    this model, while as a default, internal multiplexer of this model is
    not initialized and generates no sound even if the driver transfers
    any packets with PCM samples. To hear any sounds from this model,
    userspace applications should be developed to set parameters to the
    internal multiplexer. You can see raw information in FFADO website:
    http://subversion.ffado.org/wiki/AvcModels/DigiDesignMboxPro2

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

23 Feb, 2015

2 commits

  • A part of these drivers, especially BeBoB driver, are programmed to wait
    some events. Thus the drivers should not destroy any data in .remove()
    context.

    This commit moves some destructors from 'struct fw_driver.remove()' to
    'struct snd_card.private_free()' to shutdown safely.

    Signed-off-by: Takashi Sakamoto
    Cc: # 3.19+
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • Fireworks and Dice drivers try to touch instances of FireWire unit after
    sound card object is released, while references to the unit is decremented
    in .remove(). When unplugging during streaming, sound card object is
    released after .remove(), thus Fireworks and Dice drivers causes GPF or
    Null-pointer-dereferencing to application processes because an instance of
    FireWire unit was already released.

    This commit adds reference-counting for FireWire unit in drivers to allow
    them to touch an instance of FireWire unit after .remove(). In most case,
    any operations after .remove() may be failed safely.

    Signed-off-by: Takashi Sakamoto
    Cc: # 3.19+
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

27 May, 2014

3 commits


26 May, 2014

14 commits

  • In post commit, a quirk of this firmware about transactions is reported.
    This commit apply a workaround for this quirk.

    They often fail transactions due to gap_count mismatch. This state is changed
    by generating bus reset.

    The fw_schedule_bus_reset() is an exported symbol in firewire-core. But there
    are no header for public. This commit moves its prototype from
    drivers/firewire/core.h to include/linux/firewire.h.

    This mismatch still affects bus management before generating this bus reset.
    It still takes a time to call driver's probe() because transactions are still
    often failed.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • Just powering on, these devices below wait to download firmware.
    - Firewire Audiophile
    - Firewire 410
    - Firewire 1814
    - ProjectMix I/O

    But firmware version 5058 or later, flash memory in the device stores the
    firmware. So this driver can enable these devices by sending a certain cue to
    load the firmware.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit allows this driver to support some models which M-Audio produces
    with DM1000 but its firmware is special. They are:
    - Firewire 1814
    - ProjectMix I/O

    They have heavily customized firmware. The usual operations can't be applied to
    them. For this reason, this commit adds a model specific member to 'struct
    snd_bebob' and some model specific functions. Some parameters are write-only so
    this commit also adds control interface for applications to set them.

    M-Audio special firmware quirks:
    - Just after powering on, they wait to download firmware. This state is
    changed when receiving cue. Then bus reset is generated and the device is
    recognized as a different model with the uploaded firmware.
    - They don't respond against BridgeCo AV/C extension commands. So drivers
    can't get their stream formations and so on.
    - They do not start to transmit packets only by establishing connection but
    also by receiving SIGNAL FORMAT command.
    - After booting up, they often fail to send response against driver's request
    due to mismatch of gap_count.

    This module don't support to upload firmware.

    Tested-by: Darren Anderson (ProjectMix I/O)
    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit allows this driver to support some models which M-Audio produces
    with DM1000/DM1000E with usual firmware. They are:
    - Firewire 410
    - Firewire AudioPhile
    - Firewire Solo
    - Ozonic
    - NRV10
    - FirewireLightBridge

    According to a person who worked in BridgeCo, some models are produced with
    'Pre-BeBoB'. This means that these products were released before BeBoB was
    officially produced, and later BeBoB specification was formed. So these models
    have some quirks.

    M-Audio usual firmware quirks:
    - Just after powering on, 'Firewire 410' waits to download firmware. This
    state is changed when receiving cue. Then bus reset is generated and the
    device is recognized as a different model with the uploaded firmware.
    - 'Firewire Audiophile' also waits to download firmware but its
    vendor id/model id is the same as the one after loading firmware.
    - The information of channel mapping for MIDI conformant data channel is
    invalid against BridgeCo specification.

    This commit adds some codes for these quirks but don't support to upload
    firmware.

    This commit also adds specific operations to get metering information. The
    metering information also includes status of clock synchronization if the model
    supports to switch source of clock.

    The specification of FirewireLightBridge is unknown. So in this time, normal
    operations are applied for this model.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit allows this driver to support all of models which Focusrite
    produces with DM1000/BeBoB. They are:
    - Saffire
    - Saffire LE
    - SaffirePro 10 I/O
    - SaffirePro 26 I/O

    This commit adds Focusrite specific operations:
    1. Get source of clock
    2. Get/Set sampling frequency
    3. Get metering information

    The driver uses these functionalities to read/write specific address by async
    transaction.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit allows this driver to support all of models which Yamaha produced
    with DM1000/BeBoB. They are:
    - GO44
    - GO46

    This commit adds Yamaha specific operations. To get source of clock, AV/C Audio
    Subunit command is used.

    I note that their appearances are similar to some models of TerraTec; 'Go44' is
    similar to 'PHASE 24 FW' and 'GO46' is similar to 'PHASE X24 FW'. But their
    combination of Audio/Music subunits is a bit different.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit allows this driver to support all of models which Terratec produced
    with DM1000/BeBoB. They are:
    - PHASE 24 FW
    - PHASE X24 FW
    - PHASE 88 Rack FW
    - EWS MIC2
    - EWS MIC4
    - Aureon 7.1 Firewire

    For Phase series, this commit adds a Terratec specific operation. To get source
    of clock. AV/C Audio Subunit command is used.

    For EWS series and Aureon, this module uses normal operations.

    Tested-by: Maximilian Engelhardt (PHASE 24 FW)
    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit is for some devices which have its own operations or quirks.

    Many functionality should be implemented in user land. Then this commit adds
    functionality related to stream such as sampling frequency or clock source. For
    help to debug, this commit adds the functionality to get metering information
    if it's available.

    To help these functionalities, this commit adds some AV/C commands defined in
    'AV/C Audio Subunit Specification (1394TA).

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This interface is designed for mixer/control application. By using hwdep
    interface, the application can get information about firewire node, can
    lock/unlock kernel streaming and can get notification at starting/stopping
    kernel streaming.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit adds a functionality to capture/playback PCM samples.

    When AMDTP stream is already running for PCM or the source of clock is not
    internal, available sampling rate is limited at current one.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit adds a functionality to capture/playback MIDI messages.

    When no AMDTP streams are running, this module starts AMDTP stream at current
    sampling rate for MIDI substream.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit adds proc interface to get these information for debugging:
    - firmware information
    - stream formation
    - current clock source and sampling rate

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit adds management functionality for connections and streams.
    BeBoB uses CMP to manage connections and uses AMDTP for streams.

    This commit also adds some BridgeCo's AV/C extension commands. There are some
    BridgeCo's AV/C extension commands but this commit just uses below commands
    to get device's capability and status:

    1.Extended Plug Info commands
    - Plug Channel Position Specific Data
    - Plug Type Specific Data
    - Cluster(Section) Info Specific Data
    - Plug Input Specific Data
    2.Extended Stream Format Information commands
    - Extended Stream Format Information Command - List Request

    For Extended Plug Info commands for Cluster Info Specific Data, I pick up
    'section' instead of 'cluster' from document to prevent from misunderstanding
    because 'cluster' is also used in IEC 61883-6.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     
  • This commit adds a new driver for BeBoB based devices with no specific
    operations. Currently this driver just create/remove card instance according
    to callbacks.

    BeBoB is 'BridgeCo enhanced Breakout Box'. This is installed to firewire
    devices with DM1000/DM1100/DM1500 chipset. It gives common way for host
    system to handle BeBoB based devices.

    Current supported devices:
    - Edirol FA-66/FA-101
    - PreSonus FIREBOX/FIREPOD/FP10/Inspire1394
    - BridgeCo RDAudio1/Audio5
    - Mackie Onyx 1220/1620/1640 (Firewire I/O Card)
    - Mackie d.2 (Firewire Option)
    - Stanton FinalScratch 2 (ScratchAmp)
    - Tascam IF-FW DM
    - Behringer XENIX UFX 1204/1604
    - Behringer Digital Mixer X32 series (X-UF Card)
    - Apogee Rosetta 200/Rosetta 400 (X-FireWire card)
    - Apogee DA-16X/AD-16X/DD-16X (X-FireWire card)
    - Apogee Ensemble
    - ESI Quotafire610
    - AcousticReality eARMasterOne
    - CME MatrixKFW
    - Phonix Helix Board 12 MkII/18 MkII/24 MkII
    - Phonic Helix Board 12 Universal/18 Universal/24 Universal
    - Lynx Aurora 8/16 (LT-FW)
    - ICON FireXon
    - PrismSound Orpheus/ADA-8XR

    Devices possible to be supported if identifying IDs:
    - Apogee Mini-Me Firewire/Mini-DAC Firewire
    - Behringer F-Control Audio 610/1616
    - Cakewalk Sonar Power Studio 66
    - CME UF400e
    - ESI Quotafire XL
    - Infrasonic DewX/Windy6
    - Mackie Digital X Bus x.200/400
    - Phonic Helix Board 12/18/24
    - Phonic FireFly 202/302
    - Rolf Spuler Firewire Guitar

    Tested-by: David Henningsson
    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto