1. 05 Apr, 2017 2 commits
    • Takashi Sakamoto's avatar
      ALSA: fireface: postpone sound card registration · 324540c4
      Takashi Sakamoto authored
      Just after appearing on IEEE 1394 bus, this unit generates several bus
      resets. This is due to loading firmware from on-board flash memory and
      initialize hardware. It's better to postpone sound card registration.
      
      This commit schedules workqueue to process actual probe processing
      2 seconds after the last bus-reset. The card instance is kept at unit
      probe callback and released at card free callback. Therefore, when the
      actual probe processing fails, the memory block is wasted. This is due to
      simplify driver implementation.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      324540c4
    • Takashi Sakamoto's avatar
      ALSA: fireface: add skeleton for RME Fireface series · 17c4e5ea
      Takashi Sakamoto authored
      This commit adds a new driver for RME Fireface series. This commit just
      creates/removes card instance according to IEEE 1394 bus event. More
      functions will be added in following commits.
      
      Three types of firmware have released by RME GmbH; for Fireface 400, for
      Fireface 800 and for UCX/802/UFX. It's reasonable that these models use
      different protocol for communication. Currently, I've investigated
      Fireface 400 and nothing others.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      17c4e5ea
  2. 03 Apr, 2017 3 commits
  3. 01 Apr, 2017 1 commit
  4. 31 Mar, 2017 4 commits
  5. 29 Mar, 2017 1 commit
  6. 28 Mar, 2017 18 commits
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add support for MOTU 828mk3 (FireWire/Hybrid) as a model... · 5992e300
      Takashi Sakamoto authored
      ALSA: firewire-motu: add support for MOTU 828mk3 (FireWire/Hybrid) as a model with protocol version 3
      
      MOTU 828mk3 (FireWire/Hybrid) is one of third generation in MOTU FireWire
      series, produced in 2008/2014. This model consists of three chips for
      functionality on IEEE 1394 bus:
      
       * TI TSB41AB2 (Physical layer for IEEE 1394 bus)
       * Xilinx Spartan-3E FPGA Family (Link layer for IEEE 1394 bus, packet
         processing and data block processing layer)
       * TI TMS320C6722 (Digital signal processing)
      
      This commit adds a support for this model, with its unique protocol as
      version 3. This protocol has some additional features to protocol
      version 2.
      
       * Support several optical interfaces.
       * Support a data chunk for return of reverb effect.
       * Have a quirk of tx packets.
       * Support heartbeat asynchronous transaction.
      
      In this protocol, series of transferred packets has some quirks. Below
      fields in CIP headers of the packets are out of IEC 61883-1:
       - SID (source node id): always 0x0d
       - DBS (data block size): always 0x04
       - DBC (data block counter): always 0x00
       - EOH (End of header): always 0x00
      
      Below is an actual sample of transferred packets.
      
      quads CIP1       CIP2
      520   0x0D040400 0x22FFFFFF
        8   0x0D040400 0x22FFFFFF
      520   0x0D040400 0x22FFFFFF
      520   0x0D040400 0x22FFFFFF
        8   0x0D040400 0x22FFFFFF
      
      Status of clock is configured by write transactions to 0x'ffff'f000'0b14,
      as well as version 2, while meanings of fields are different from the
      former protocols. Modes of optical interfaces are configured by write
      transactions to 0x'ffff'f000'0c94.
      
      Drivers can register its address to receive heatbeat transactions from the
      unit. 0x'ffff'f000'0b0c is for the higher part and 0x'ffff'f000'0b10 is
      for the lower part. Nevertheless, this feature is not useless for this
      driver and this commit omits it.
      
      Each data block consists of two parts in a point of the number of included
      data chunks. In both of 'fixed' and 'differed' parts, the number of
      included data blocks are a multiple of 4, thus depending on models there's
      some empty data chunks. For example, 828mk3 includes one pair of empty
      data chunks in its fixed part. When optical interface is configured to
      S/PDIF, 828mk3 includes one pair of empty data chunks in its differed part.
      To reduce consumption of CPU cycles with additional conditions/loops, this
      commit just exposes these empty chunks to user space as PCM channels.
      
      Additionally, 828mk3 has a non-negligible overhead to change its sampling
      transfer frequency. When softwares send asynchronous transaction to
      perform it, LED on the unit starts to blink. In a worst case, it continues
      blink during several seconds; e.g. 10 seconds. When stopping blinking,
      the unit seems to be prepared for the requested sampling transfer
      frequency. To wait for the preparation, this commit forces the driver
      to call task scheduler and applications sleeps for 4 seconds.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      5992e300
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: add a quirk of packet without valid EOH in CIP format · 2128f78f
      Takashi Sakamoto authored
      In IEC 61883-1, when two quadlets CIP header is used, the most significant
      bit in second CIP header stands. However, packets from units with MOTU
      protocol version 3 have a quirk without this flag. Current packet streaming
      layer handles this as protocol error.
      
      This commit adds a new enumeration constant for this quirk, to handle MOTU
      protocol version 3.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      2128f78f
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add support for MOTU 828mk2 as a model with protocol version 2 · 949613e3
      Takashi Sakamoto authored
      MOTU 828mk2 is one of second generation in MOTU FireWire series, produced in
      2003. This model consists of four chips:
       * TI TSB41AB2 (Physical layer for IEEE 1394 bus)
       * PDI 1394L40BE (Link layer for IEEE 1394 bus and packet processing layer)
       * ALTERA ACEX 1K EP1K30 Series FPGA (Data block processing layer)
       * TI TMS320VC5402 (Digital signal processing)
      
      This commit adds a support for this model, with its unique protocol as
      version 2. The features of this protocol are:
      
       * Support data chunks for status and control messages for both
         directions.
       * Support a pair of MIDI input/output.
       * Support a data chunk for mic/instrument independent of analog line in.
       * Support a data chunk for playback return.
       * Support independent data chunks for S/PDIF of both optical/coaxial
         interfaces.
       * Support independent data chunks for each of main out and phone out.
      
      Status of clock is configured by write transactions to 0x'ffff'f000'0b14.
      Modes of optical interfaces are configured by write transactions to
      0x'ffff'f000'0c04.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      949613e3
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: enable to read transaction cache via hwdep interface · 5aaab1bf
      Takashi Sakamoto authored
      MOTU FireWire series can transfer messages to registered address. These
      messages are transferred for the status of internal clock synchronization
      just after starting streams.
      
      When the synchronization is stable, it's 0x01ffffff. Else, it's 0x05ffffff.
      
      This commit adds a functionality for user space applications to receive
      content of the message.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      5aaab1bf
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add hwdep interface · 71c37977
      Takashi Sakamoto authored
      This commit adds hwdep interface so as the other sound drivers for units
      on IEEE 1394 bus have.
      
      This interface is designed for mixer/control applications. By using this
      interface, an 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>
      71c37977
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add MIDI functionality · 9e796e7d
      Takashi Sakamoto authored
      In MOTU FireWire series, MIDI messages are multiplexed to isochronous
      packets as well as PCM frames, while the way is different from the one
      in IEC 61883-6.
      
      MIDI messages are put into a certain position in message chunks. One data
      block can includes one byte of the MIDI messages. When data block includes
      a MIDI byte, the block has a flag in a certain position of the message
      chunk. These positions are unique depending on protocols.
      
      Once a data block includes a MIDI byte, some following data blocks includes
      no MIDI bytes. Next MIDI byte appears on a data block corresponding to
      next cycle of physical MIDI bus. This seems to avoid buffer overflow caused
      by bandwidth differences between IEEE 1394 bus and physical MIDI bus.
      
      This commit adds MIDI functionality to transfer/receive MIDI messages.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9e796e7d
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add PCM functionality · dd49b2d1
      Takashi Sakamoto authored
      This commit adds PCM functionality to transmit/receive PCM samples.
      
      When one of PCM substreams are running or external clock source is
      selected, current sampling rate is used. Else, the sampling rate is
      changed according to requests from a userspace application.
      
      Available number of samples in a frame of PCM substream is determined at
      open(2) to corresponding PCM character device. Later, packet streaming
      starts by ioctl(2) with SNDRV_PCM_IOCTL_PREPARE. In theory, between them,
      applications can change state of the unit by any write transaction to
      change the number. In this case, this driver may fail packet streaming due
      to wrong data format.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      dd49b2d1
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add proc node to show current statuc of clock and packet formats · 4638ec6e
      Takashi Sakamoto authored
      This commit adds a proc node for debugging purpose.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      4638ec6e
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add stream management functionality · 9b2bb4f2
      Takashi Sakamoto authored
      This commit adds a functionality to manage packet streaming for MOTU
      FireWire series.
      
      The streaming is not controlled by CMP, thus against IEC 61883-1. Write
      transaction to certain addresses start/stop packet streaming.
      
      Transactions to 0x'ffff'f000'0b00 results in isochronous channel number for
      both directions and starting/stopping transmission of packets. The
      isochronous channel number is represented in 6 bit field, thus units can
      identify the channels up to 64, as IEEE 1394 bus specification described.
      
      Transactions to 0x'ffff'f000'0b10 results in packet format for both
      directions and transmission speed. When each of data block includes fixed
      part of data chunks only, corresponding flags stand.
      
      When bus reset occurs, the units continue to transmit packets with
      non-contiguous data block counter. This causes discontinuity detection in
      packet streaming engine and ALSA PCM applications receives EPIPE from any
      I/O operation. In this case, typical applications manage to recover
      corresponding PCM substream. This behaviour is kicked much earlier than
      callback of bus reset handler by Linux FireWire subsystem, therefore
      status of packet streaming is not changed in the handler.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9b2bb4f2
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: handle transactions specific for MOTU FireWire models · 2e76701b
      Takashi Sakamoto authored
      All models of MOTU FireWire series can be controlled by write transaction
      to addresses in a range from 0x'ffff'f0000'0b00 to 0x'ffff'f000'0cff.
      
      The models support asynchronous notification. This notification has 32 bit
      field data, and is transferred when status of clock changes. Meaning of
      the value is not enough clear yet.
      
      Drivers can register its address to receive the notification. Write
      transaction to 0x'ffff'f000'0b04 registers higher 16 bits of the address.
      Write transaction to 0x'ffff'f0000'0b08 registers the rest of bits. The
      address includes node ID, thus it should be registered every time of bus
      reset.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      2e76701b
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add MOTU specific protocol layer · 4641c939
      Takashi Sakamoto authored
      MOTU FireWire series uses blocking transmission for AMDTP packet streaming.
      They transmit/receive 8,000 packets per second, to handle the same number
      of data blocks as current sampling transmission frequency. Thus,
      IEC 61883-1/6 packet streaming engine of ALSA firewire stack is available
      for them.
      
      However, the sequence of packet and data blocks includes some quirks.
      Below sample is a sequence of CIP headers of packets received by 828mk2,
      at 44.1kHz of sampling transmission frequency.
      
      quads CIP1        CIP2
      488   0x020F04E8  0x8222FFFF
        8   0x020F04F8  0x8222FFFF
      488   0x020F0400  0x8222FFFF
      488   0x020F0408  0x8222FFFF
        8   0x020F04E8  0x8222FFFF
      488   0x020F04F0  0x8222FFFF
      488   0x020F04F8  0x8222FFFF
      
      The SID (source node ID), DBS (data block size), SPH (source packet header),
      FMT (format ID), FDF (format dependent field) and SYT (time stamp) fields
      are in IEC 61883-1. Especially, FMT is 0x02, FDF is 0x22 and SYT is 0xffff
      to define MOTU specific protocol. In an aspect of dbc field, the value
      represents accumulated number of data blocks included the packet. This
      is against IEC 61883-1, because according to the specification this value
      should be the number of data blocks already transferred.
      
      In ALSA IEC 61883-1/6 engine, this quirk is already supported by
      CIP_DBC_IS_END_EVENT flag, because Echo Audio Fireworks has.
      
      Each data block includes SPH as its first quadlet field, to represent its
      presentation time stamp. Actual value of SPH is compliant to IEC 61883-1;
      lower 25 bits of 32 bits width consists of 13 bits cycle count and 12 bits
      cycle offset.
      
      The rest of each data block consists of 24 bit chunks. All of PCM samples,
      MIDI messages, status and control messages are transferred by the chunks.
      This is similar to '24-bit * 4 Audio Pack' in IEC 61883-6. The position of
      each kind of data depends on generations of each model. The number of
      whole chunks in a data block is a multiple of 4, to consists of
      quadlet-aligned packets.
      
      This commit adds data block processing layer specific for the MOTU
      protocol. The remarkable point is the way to generate SPH header. Time
      stamps for each data blocks are generated by below calculation:
      
       * Using pre-computed table for the number of ticks per event
        *  44,1kHz: (557 + 123/441)
        *  48.0kHz: (512 +   0/441)
        *  88.2kHz: (278 + 282/441)
        *  96.0kHz: (256 +   0/441)
        * 176.4kHz: (139 + 141/441)
        * 192.0kHz: (128 +   0/441)
       * Accumulate the ticks and set the value to SPH for every events.
       * This way makes sense only for blocking transmission because this mode
         transfers fixed number or none of events.
      
      This calculation assumes that each data block has a PCM frame which is
      sampled according to event timing clock. Current packet streaming layer
      has the same assumption.
      
      Although this sequence works fine for MOTU FireWire series at sampling
      transmission frequency based on 48.0kHz, it is not enough at the frequency
      based on 44.1kHz. The units generate choppy noise every few seconds.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      4641c939
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: enable CIP_DBC_IS_END_EVENT for both directions of stream · 9dae017b
      Takashi Sakamoto authored
      Commit c8bdf49b("ALSA: fireworks/firewire-lib: Add a quirk for the
      meaning of dbc") adds CIP_DBC_IS_END_EVENT flag just for tx packets.
      However, MOTU FireWire series has this quirk for rx packets.
      
      This commit allows both directions with the flag.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9dae017b
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: add support for source packet header field in CIP header · 9863874f
      Takashi Sakamoto authored
      In IEC 61883-1, CIP headers can have a SPH field. When a packet has 1 in
      SPH field of its CIP header, the packet has a source packet headers. A
      source packet header consists of 32 bit field (= 1 quadlet) and it
      transfers time stamp, which is the same value as the lower 25 bits of the
      IEEE 1394 CYCLE_TIMER register and the rest is zero.
      
      This commit just supports source packet header field because IEC 61883-1
      includes ambiguity the position of this header and its count. Each
      protocol layer is allowed to have actual implementation according its
      requirements.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9863874f
    • Takashi Sakamoto's avatar
      ALSA: firewire-lib: record cycle count for the first packet · a04513f8
      Takashi Sakamoto authored
      Currently, packet streaming layer passes generated SYT value to data block
      processing layer. However, this is not enough in a case that the data block
      processing layer generates time stamps by its own ways.
      
      For out-packet stream, the packet streaming layer guarantees 8,000 times
      calls of data block processing layers per sec. Therefore, when cycle count
      of the first packet is recorded, data block processing layers can calculate
      own time stamps with the recorded value.
      
      For the reason, this commit allows packet streaming layer to record the
      first cycle count. Each data block processing layer can read the count by
      accessing a member of structure for packet streaming layer.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a04513f8
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add an abstraction layer for three types of protocols · 59f6482c
      Takashi Sakamoto authored
      In an aspect of used protocols to communicate, models of MOTU FireWire
      units are categorized to three generations.
      
      This commit adds an abstraction layer of the protocols for features
      related to packet streaming functionality. This layer includes 5
      operations.
      
      When configuring packet streaming functionality with sampling rate and
      sampling transmission frequency, .get_clock_rate and .set_clock_rate are
      called with proper arguments. MOTU FireWire series supports up to 192.0kHz.
      
      When checking current source of sampling clock (not clock for packetization
      layer), .get_clock_source is used. Enumeration is added to represent the
      sources supported by this series. This operation can be used to expose
      available sampling rate to user space applications when the unit is
      configured to use any input signal as source of clock instead of crystal
      clock.
      
      In the protocols, the path between packet processing layer and digital
      signal processing layer can be controlled. This looks a functionality to
      'mute' the unit. For this feature, .switch_fetching_mode is added. This
      can be used to suppress noises every time packet streaming starts/stops.
      
      In a point of the size of data blocks at a certain sampling transmission
      frequency, the most units accept several modes. This is due to usage of
      optical interfaces. The size differs depending on which modes are
      configured to the interfaces; None, S/PDIF and ADAT. Additionally, format
      of packet is different depending on protocols. To cache current size of
      data blocks and its format, .cache_packet_formats is added. This is used
      by PCM functionality, packet streaming functionality and data block
      processing layer.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      59f6482c
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add a structure for model-dependent parameters. · 5e03c33e
      Takashi Sakamoto authored
      MOTU FireWire series doesn't tell drivers their capabilities, thus
      the drivers should have and apply model-dependent parameters to detected
      models.
      
      This commit adds a structure to represent such parameters. Capabilities
      are represented by enumeration except for the number of analog line
      in/out. Identification name also be in the structure because the units has
      no registers for this purpose.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      5e03c33e
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: postpone sound card registration · 8865a31e
      Takashi Sakamoto authored
      Just after appearing on IEEE 1394 bus, this unit generates several bus
      resets. This is due to loading firmware from on-board flash memory and
      initialize hardware. It's better to postpone sound card registration.
      
      This commit applies this idea.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      8865a31e
    • Takashi Sakamoto's avatar
      ALSA: firewire-motu: add skeleton for Mark of the unicorn (MOTU) FireWire series · 6c3cef48
      Takashi Sakamoto authored
      This commit adds an new driver for MOTU FireWire series. In this commit,
      this driver just creates/removes card instance according to bus event.
      More functionalities will be added in following commits.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      6c3cef48
  7. 24 Mar, 2017 1 commit
    • Arnd Bergmann's avatar
      ALSA: au88x0: avoid theoretical uninitialized access · 13f99ebd
      Arnd Bergmann authored
      The latest gcc-7.0.1 snapshot points out that we if nr_ch is zero, we never
      initialize some variables:
      
      sound/pci/au88x0/au88x0_core.c: In function 'vortex_adb_allocroute':
      sound/pci/au88x0/au88x0_core.c:2304:68: error: 'mix[0]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
      sound/pci/au88x0/au88x0_core.c:2305:58: error: 'src[0]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
      
      I assume this can never happen in practice, but adding a check here doesn't
      hurt either and avoids the warning. The code has been unchanged since
      the start of git history.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      13f99ebd
  8. 20 Mar, 2017 10 commits