1. 26 May, 2014 40 commits
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add support for M-Audio special Firewire series · 3149ac48
      Takashi Sakamoto authored
      
      
      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 <darrena092@gmail.com> (ProjectMix I/O)
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      3149ac48
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add support for M-Audio usual Firewire series · 9076c22d
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9076c22d
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add support for Focusrite Saffire/SaffirePro series · 25784ec2
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      25784ec2
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add support for Yamaha GO series · 8ac98a35
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      8ac98a35
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add support for Terratec PHASE, EWS series and Aureon · 326b9cac
      Takashi Sakamoto authored
      
      
      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 <maxi@daemonizer.de> (PHASE 24 FW)
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      326b9cac
    • Takashi Sakamoto's avatar
      ALSA: bebob: Prepare for device specific operations · 1fc9522a
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      1fc9522a
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add hwdep interface · 618eabea
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      618eabea
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add PCM interface · fbbebd2c
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      fbbebd2c
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add MIDI interface · 248b7802
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      248b7802
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add proc interface for debugging purpose · ad9697ba
      Takashi Sakamoto authored
      
      
      This commit adds proc interface to get these information for debugging:
       - firmware information
       - stream formation
       - current clock source and sampling rate
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      ad9697ba
    • Takashi Sakamoto's avatar
      ALSA: bebob/firewire-lib: Add a quirk for discontinuity at bus reset · b6bc8123
      Takashi Sakamoto authored
      
      
      Normal BeBoB firmware has a quirk. When receiving bus reset, it transmits
      packets with discontinuous value in dbc field.
      
      This causes two situation, one is to abort streaming by firewire-lib as a
      result of detecting the discontinuity. Another is to call driver's .update()
      because of bus reset. These two is generated independently. (The former
      depends on isochronous stream and the latter depends on IEEE1394 bus driver.)
      
      When BeBoB driver works with XRUN-recoverable applications, this situation
      looks like stream_start_duplex() call followed by stream_update_duplex() call
      because applications will call snd_pcm_prepare() immediately at XRUN.
      
      To update connections and streams at first, this commit use completion. When
      queueing error occurs, stream_start_duplex() is forced to wait maximum
      1000msec. During this, when .update() is called, the completion is waken and
      stream_start_duplex() is processed without breaking connections.
      
      At bus reset, stream_start_duplex() shouldn't break/establish connections and
      stream_update_duplex() should update connections because a caller of
      fw_iso_resources_allocate() is responsible for calling
      fw_iso_resources_update() on bus reset.
      
      This commit also adds a flag, which has an effect to skip checking continuity
      for first packet. This flag is useful for BeBoB quirk to start handling packets
      during streaming.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      b6bc8123
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add commands and connections/streams management · eb7b3a05
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      eb7b3a05
    • Takashi Sakamoto's avatar
      ALSA: bebob: Add skelton for BeBoB based devices · fd6f4b0d
      Takashi Sakamoto authored
      
      
      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: default avatarDavid Henningsson <david.henningsson@canonical.com>
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      fd6f4b0d
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add command/response functionality into hwdep interface · 555e8a8f
      Takashi Sakamoto authored
      
      
      This commit adds two functionality for hwdep interface, adds two parameters for
      this driver, add a node for proc interface.
      
      To receive responses from devices, this driver already allocate own callback
      into initial memory space in host controller. This means no one can allocate
      its own callback to the address. So this driver must give a way for user
      applications to receive responses.
      
      This commit adds a functionality to receive responses via hwdep interface. The
      application can receive responses to read from this interface. To achieve this,
      this commit adds a buffer to queue responses. The default size of this buffer is
      1024 bytes. This size can be changed to give preferrable size to
      'resp_buf_size' parameter for this driver. The application should notice rest
      of space in this buffer because this driver don't push responses when this
      buffer has no space.
      
      Additionaly, this commit adds a functionality to transmit commands via hwdep
      interface. The application can transmit commands to write into this interface.
      I note that the application can transmit one command at once, but can receive
      as many responses as possible untill the user-buffer is full.
      
      When using these interfaces, the application must keep maximum number of
      sequence number in command within the number in firewire.h because this driver
      uses this number to distinguish the response is against the command by the
      application or this driver.
      
      Usually responses against commands which the application transmits are pushed
      into this buffer. But to enable 'resp_buf_debug' parameter for this driver, all
      responses are pushed into the buffer. When using this mode, I reccomend to
      expand the size of buffer.
      
      Finally this commit adds a new node into proc interface to output status of the
      buffer.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      555e8a8f
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add hwdep interface · 594ddced
      Takashi Sakamoto authored
      
      
      This interface is designed for mixer/control application. To use 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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      594ddced
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add PCM interface · aa02bb6e
      Takashi Sakamoto authored
      
      
      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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      aa02bb6e
    • Takashi Sakamoto's avatar
      ALSA: fireworks/firewire-lib: Add a quirk of data blocks for MIDI in out-stream · 53111cdc
      Takashi Sakamoto authored
      
      
      Fireworks has a quirk to ignore MIDI messages in data blocks more than 8.
      This commit adds a flag for this quirk and codes to skip 8 or more data
      blocks to transfer MIDI messages.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      53111cdc
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add MIDI interface · a63d3ff1
      Takashi Sakamoto authored
      
      
      This commit adds a functionality to capture/playback MIDI messages.
      
      When no AMDTP streams are running, this driver starts AMDTP stream for MIDI
      stream at current sampling rate.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a63d3ff1
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add proc interface for debugging purpose · 6a22683e
      Takashi Sakamoto authored
      
      
      This commit adds proc interface to output infomation for debugging.
       - firmware information
       - sampling rate and clock source
       - physical metering (linear value)
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      6a22683e
    • Takashi Sakamoto's avatar
      ALSA: fireworks/firewire-lib: Add a quirk to reset data block counter at bus reset · b84b1a27
      Takashi Sakamoto authored
      
      
      Fireworks has a quirk to reset data block counter at bus reset.
      
      This commit adds a flag of CIP_SKIP_DBC_ZERO_CHECK. This flag has an effect
      to skip checking dbc continuity when dbc is zero.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      b84b1a27
    • Takashi Sakamoto's avatar
      ALSA: fireworks/firewire-lib: Add a quirk for fixed interval of reported dbc · d9cd0065
      Takashi Sakamoto authored
      
      
      Fireworks firmware version 5.5 reports fix interval for dbc in each packet.
      
      For example, AudioFire4:
      CIP0     CIP1     Payload
      00070000 900484FF 72
      00070008 9004A8FF 72
      00070008 90FFFFFF 02
      00070010 9004D0FF 72
      00070018 9004C4FF 72
      00070020 9004E8FF 72
      00070020 90FFFFFF 02
      00070028 900410FE 72
      
      The interval of each dbc should be 16 except for empty packet but it's still 8.
      
      This commit adds a flag for this quirk and codes to refer to a fixed value.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      d9cd0065
    • Takashi Sakamoto's avatar
      ALSA: fireworks/firewire-lib: Add a quirk for wrong dbs in tx packets · 69702239
      Takashi Sakamoto authored
      
      
      One of Fireworks firmware, named  as 'AudioFire9', seems to transmit
      packets with wrong value of dbs. It's always 0x11 but actual size of
      data block is different.
      
      This commit adds a flag for this quirk and some codes to calculate
      correct size.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      69702239
    • Takashi Sakamoto's avatar
      ALSA: fireworks/firewire-lib: Add a quirk for the meaning of dbc · c8bdf49b
      Takashi Sakamoto authored
      
      
      Fireworks has a quirk for the value of dbc field in transmitted packets.
      For Fireworks, dbc means the end of events in current packet. This is out
      of specification.
      
      For example, AudioFire4:
      CIP0        CIP1    Payload
      01070092 90FFFFFF 02
      0107009A 9001E17B 3A <-
      010700A2 9001F6E5 3A
      010700A2 90FFFFFF 02
      010700AA 9001104F 3A <-
      010700B2 900125B9 3A
      010700BA 90013B23 3A
      010700BA 90FFFFFF 02
      010700C2 9001548E 3A <-
      010700CA 900169F8 3A
      010700CA 90FFFFFF 02
      010700D2 90018362 3A <-
      010700DA 900198CC 3A
      
      According to IEC 61883-1/6, a packet following to empty packet has the same
      value for its dbc. But for Fireworks, it's incremented and empty packet has
      the same value as previous packet in dbc field.
      
      This commit adds a flag for Fireworks and some codes to checking dbc continuity.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c8bdf49b
    • Takashi Sakamoto's avatar
      ALSA: fireworks/firewire-lib: Add a quirk for empty packet with TAG0 · 7ab56645
      Takashi Sakamoto authored
      
      
      Fireworks has a quirk to transmit empty packets with TAG0. This commit
      adds handling this quirk for full duplex stream synchronization.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7ab56645
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add connection and stream management · 315fd41f
      Takashi Sakamoto authored
      
      
      Fireworks manages connections by CMP and can transmit/receive AMDTP streams
      with a few quirks. This commit adds functionality to start/stop the streams.
      
      Major Fireworks products don't support 'SYT-Match' clock source mode, except
      for AudioFire12/8(till 2009 July) with firmware version 1.0. Already in
      previous commit, this driver don't support such old firmwares. So this commit
      adds support for non 'SYT-Match' clock source modes.
      
      I note that this driver has a short gap for MIDI streams when starting PCM
      stream. When AMDTP streams are running only for MIDI data and PCM data is
      going to be joined at different sampling rate, then AMDTP streams are
      stopped once and started again after changing sampling rate.
      
      Unfortunately, Fireworks is not fully compliant to IEC 61883-1/6. Some commits
      following to this commit add these quirks.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      315fd41f
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add transaction and some commands · bde8a8f2
      Takashi Sakamoto authored
      
      
      Fireworks uses own command and response. This commit adds functionality to
      transact and adds some commands required for sound card instance and kernel
      streaming.
      
      There are two ways to deliver substance of this transaction:
      1.AV/C vendor dependent command for command/response
      2.Async transaction to specific addresses for command/response
      
      By way 1, I confirm AudioFire12 cannot correctly response to some commands with
      firmware version 5.0 or later. This is also confirmed by FFADO. So this driver
      implement way 2.
      
      The address for response gives an issue. When this driver allocate own callback
      function into the address, then no one can allocate its own callback function.
      This situation is not good for applications in user-land. This issue is solved
      in later commit.
      
      I note there is a command to change the address for response if the device
      supports. But this driver uses default value. So users should not execute this
      command as long as hoping this driver works correctly.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      bde8a8f2
    • Takashi Sakamoto's avatar
      ALSA: fireworks: Add skelton for Fireworks based devices · b5b04336
      Takashi Sakamoto authored
      
      
      This commit adds a new driver for devices based on Fireworks. This driver
      just creates/removes card instance according to callbacks.
      
      Fireworks is a board module which Echo Audio produced. This module
      consists of three chipsets:
       - Communication chipset for IEEE1394 PHY/Link and IEC 61883-1/6
       - DSP or/and FPGA for signal processing
       - Flash Memory to store firmwares
      
      Current supported devices:
       - Mackie Onyx 400F/1200F
       - Echo AudioFire12/8(until 2009 July)
       - Echo AudioFire2/4/Pre8/8(since 2009 July)
       - Echo Fireworks 8/HDMI
       - Gibson Robot Interface pack/GoldTop
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      b5b04336
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add some AV/C general commands · 1017abed
      Takashi Sakamoto authored
      
      
      This commit adds three commands, which may be used by some firewire device
      drivers. These commands are defined in 'AV/C Digital Interface Command Set
      General Specification Version 4.2 (2004006, 1394TA)'.
      
      1. PLUG INFO command (clause 10.1)
      2. INPUT PLUG SIGNAL FORMAT command (clause 10.10)
      3. OUTPUT PLUG SIGNAL FORMAT command (clause 10.11)
      
      By the command 1, the drivers can get the number of plugs for AV/C unit or
      subunit.
      By the command 2 and 3, the drivers can get/set sampling frequency.
      
      The 'firewire-speakers' already uses INPUT PLUG SIGNAL FORMAT command to set
      sampling rate. So this commit also affects the driver.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      1017abed
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add support for deferred transaction · 00a7bb81
      Takashi Sakamoto authored
      
      
      Some devices based on BeBoB use this type of AV/C transaction.
      
      'Deferred Transaction' is defined in 'AV/C Digital Interface Command Set
      General Specification' and is used by targets to make a response deferred
      during processing it.
      
      If a target may not be able to complete a command within 100msec since
      receiving the command, then the target shall return INTERIM response,
      to which final response will follow later. CONTROL/NOTIFY commands are
      allowed for deferred transaction.
      
      In the specification, devices allow to send INTERIM response just one time.
      But this commit allows to handle several INTERIM response with two reasons.
      One reason is to simplify codes, and another reason is to prepare for
      devices which is out of specification.
      
      There is an issue. In the specification, the interval between INTERIM
      response and final response is 'Unspecified interval'. The specification
      depends on each subunit specification for this interval.
      
      But we promise to finish this function for caller. In this reason, I use
      FCP_TIMEOUT_MS for this interval. Currently it's 125msec. When we find
      devices which needs more time for this interval, then let us add some codes
      to apply more interval for 'Unspecified interval'.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      00a7bb81
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add a new function to check others' connection · b04479fb
      Takashi Sakamoto authored
      
      
      Plug Control Registers have two fields related to the number of established
      connections, one is 'Broadcast connection counter' and another is
      'Point-to-point connection counter'. The driver can know there are established
      connections or not to check these fields.
      
      This commit is for considering about JACK/FFADO streaming. Currently, when
      JACK/FFADO starts its streaming to the device, cmp_connection_establish() is
      failed expectedly. This seems to be enough but there are some devices which
      needs to change sampling frequency before trying to establish connections.
      For such devices, this functionality is needed.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      b04479fb
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add handling output connection by CMP · 44aff698
      Takashi Sakamoto authored
      
      
      This patch adds some macros, codes with condition of direction and new functions
      to handle output connection. Once cmp_connection_init() is executed with its
      direction, CMP input and output connection can be handled by the same way.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      44aff698
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add 'direction' member to 'cmp_connection' structure · c68a1c65
      Takashi Sakamoto authored
      
      
      This patch adds 'direction' member to 'cmp_connection' structure to indicate
      the direction of connection. This patch also adds 'direction' argument to
      cmp_connection_init() function to determine the direction.
      
      The cmp_connection_init() function is exported and used in snd-firewire-speakers
      so this patch also affect it.
      
      This patch just add them. Actual implementation will be done by followed
      patches.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c68a1c65
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Rename macros, variables and functions for CMP · a7fa0d04
      Takashi Sakamoto authored
      
      
      Referring to IEC 61883-1, oMPR and iMPR, oPCR and iPCR have some fields with
      the same role in the same position. This patch renames some macros, variables
      and function arguments with "i" in its prefix to reuse them between oMPR and
      iMPR, oPCR and iPCR.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a7fa0d04
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Restrict calling flush_context_completion() when context exists · c8de6dbb
      Takashi Sakamoto authored
      
      
      Currently, drivers can bring XRUN state for PCM substreams when error to
      queue packets or detecting discontinuity of packet. The application may try to
      recover this state by calling snd_pcm_prepare().
      
      Depending on each driver, .prepare() includes restart streaming. Then there
      is a state that PCM substreams are running but isochronous contexts are
      stopped. In this case, when .pointer() is called, it refers to error pointer.
      
      This commit is for a prevention of this bug.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c8de6dbb
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib/dice/speakers: Add common PCM constraints for AMDTP streams · 7b2d99fa
      Takashi Sakamoto authored
      
      
      This commit adds common PCM constraints according to current firewire-lib
      implementation.
      
      1.Maximum width for each sample is limited by 24.
      AM824 in IEC 61883-6 can deliver 24bit data.
      
      2. Minimum time for period is 5msec.
      Apply the old value. For shorter latency, further works are needed.
      
      3. In blocking mode, frames per period/buffer is aligned to 32.
      Each packet can include some frames depending on its sampling rate. In
      blocking mode, the number equals to SYT_INTERVAL. Currently firewire-lib
      can schedule snd_pcm_period_elapsed() for each packet. So, for accurate
      PCM interrupt, the number of frames per period/buffer should be aligned
      to SYT_INTERVAL.
      Currently firewire-lib is lack of better rules to achieve this. So LCM of
      each value of SYT_INTERVALs (=32) is applied. This can be improved for
      further work.
      
      [Fixed the compile error due to the missing "&" by tiwai]
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7b2d99fa
    • Takashi Sakamoto's avatar
      ALSA: dice/firewire-lib: Keep dualwire mode but obsolete CIP_HI_DUALWIRE · 10550bea
      Takashi Sakamoto authored
      
      
      In previous commit, AMDTP functionality in firewire-lib supports mapping
      for PCM data channels. With this mapping, firewire-lib can obsolete
      a flag, CIP_HI_DUALWIRE, but Dice driver still keeps dual wire mode.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      10550bea
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add support for channel mapping · 77d2a8a4
      Takashi Sakamoto authored
      
      
      Some devices arrange the position of PCM/MIDI data channel in AMDTP packet.
      This commit allows drivers to set channel mapping.
      
      To be simple, the mapping table is an array with fixed length. Then the number
      of channels for PCM is restricted by 64 channels.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      77d2a8a4
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add support for duplex streams synchronization in blocking mode · 7b3b0d85
      Takashi Sakamoto authored
      
      
      Generally, the devices can synchronize to handle 'presentation timestamp'
      in CIP packets. This commit adds functionality to pick up this timestamp from
      in-packets transmitted by the device, then use it for out packets.
      
      In current implementation, this module generated the timestamp by itself. This
      is 'SYT Match' mode. Then drivers with this module acts as synchronization
      master. This commit allows this module to act as synchronization slave.
      
      This commit restricts this mechanism is only available in blocking mode because
      handling the timestamp in non-blocking mode is more complicated than in
      blocking mode.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7b3b0d85
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Give syt value as parameter to handle_out_packet() · ccccad86
      Takashi Sakamoto authored
      
      
      For duplex streams with synchronization, drivers should pick up
      'presentation timestamp' from in-packets and use the timestamp for
      out-packets. This commit is preparation for this.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      ccccad86
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: Add support for MIDI capture/playback · 83d8d72d
      Takashi Sakamoto authored
      
      
      For capturing/playbacking MIDI messages, this commit adds one MIDI conformant
      data channel. This data channel has multiplexed 8 MIDI data streams. So this
      data channel can transfer messages from/to 8 MIDI ports.
      
      And this commit allows to set PCM format even if AMDTP streams already start.
      I suppose the case that PCM substreams are going to be joined into AMDTP
      streams when AMDTP streams are already started for MIDI substreams. Each
      driver must count how many PCM/MIDI substreams use AMDTP streams to stop
      AMDTP streams.
      
      There are differences between specifications about MIDI conformant data.
      
      About the multiplexing, IEC 61883-6:2002, itself, has no information. It
      describes labels and bytes for MIDI messages and refers to MMA/AMEI RP-027
      for 'successfull implementation'. MMA/AMEI RP-027 describes 8 MPX-MIDI data
      streams for one MIDI conformant data channel. IEC 61883-6:2005 adds
      'sequence multiplexing' and apply this way and describe incompatibility
      between 2002 and 2005.
      
      So this commit applies IEC 61883-6:2005. When we find some devices compliant
      to IEC 61883-6:2002, then this difference should be handles as device quirk
      in additional work.
      
      About the number of bytes in an MIDI conformant data, IEC 61883-6:2002 describe
      0,1,2,3 bytes. MMA/AMEI RP-027 describes 'MIDI1.0-1x-SPEED', 'MIDI1.0-2x-SPEED',
      'MIDI1.0-3x-SPEED' modes and the maximum bytes for each mode corresponds to 1,
      2, 3 bytes. The 'MIDI1.0-2x/3x-SPEED' modes are accompanied with 'negotiation
      procedure' and 'encapsulation details' but there is no specifications for them.
      
      So this commit implements 'MIDI1.0-1x-SPEED' mode for playback, but allows
      to pick up 1-3 bytes for capturing.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      83d8d72d