1. 19 3月, 2019 1 次提交
  2. 18 7月, 2018 1 次提交
  3. 20 6月, 2018 5 次提交
    • T
      ALSA: firewire-motu: add support for Motu Traveler · 6c5e1ac0
      Takashi Sakamoto 提交于
      This commit adds support for MOTU Traveler, launched in 2005, discontinued
      quite before. As a result, transmission of PCM frame and MIDI messages is
      available via ALSA PCM and RawMIDI/Sequencer interfaces.
      
      This model supports sampling transmission frequency up to 192.0 kHz, and
      AES/EBU on XLR interface and ADAT on optical interface. Unlike
      Motu 828MkII, Windows driver can switch fetching mode for DSP, like
      mute/unmute feature.
      
      Although this commit enables high sampling transmission frequency, actual
      sound from this model is not good. As long as I tested, it's silence at
      176.4 kHz, and it includes hissing noise at 192.0 kHz. In my opinion, as I
      reported at 3526ce7f9ba7 ('ALSA: firewire-motu: add MOTU specific protocol
      layer'), timestamping on source packet header (SPH) may not still be good
      for this model as well.
      
      $ python2 crpp < /sys/bus/firewire/devices/fw1/config_rom
                     ROM header and bus information block
                     -----------------------------------------------------------------
      400  04106505  bus_info_length 4, crc_length 16, crc 25861
      404  31333934  bus_name "1394"
      408  20001000  irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 0, max_rec 1 (4)
      40c  0001f200  company_id 0001f2     |
      410  0001f32f  device_id 000001f32f  | EUI-64 0001f2000001f32f
      
                     root directory
                     -----------------------------------------------------------------
      414  0004c65c  directory_length 4, crc 50780
      418  030001f2  vendor
      41c  0c0083c0  node capabilities per IEEE 1394
      420  8d000006  --> eui-64 leaf at 438
      424  d1000001  --> unit directory at 428
      
                     unit directory at 428
                     -----------------------------------------------------------------
      428  00035955  directory_length 3, crc 22869
      42c  120001f2  specifier id
      430  13000009  version
      434  17107800  model
      
                     eui-64 leaf at 438
                     -----------------------------------------------------------------
      438  000206b2  leaf_length 2, crc 1714
      43c  0001f200  company_id 0001f2     |
      440  0001f32f  device_id 000001f32f  | EUI-64 0001f2000001f32f
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      6c5e1ac0
    • T
      ALSA: firewire-motu: cancel chunk alignment for protocol version 2 · 191ef576
      Takashi Sakamoto 提交于
      For MOTU protocol version 2, this driver arranges the number of data
      chunks to align chunks to quadlet data channel. However, MOTU Traveler
      has padding bytes in the end of data block at high clock mode.
      
      This commit removes the arrangement. Fortunately, at low and middle clock
      mode, supported model for v2 protocol (828mkII) gets no influence from this
      change because all of combination for data chunks are just aligned to
      quadlet data channel.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      191ef576
    • T
      ALSA: firewire-motu: add a flag for AES/EBU on XLR interface · 06ac0b6f
      Takashi Sakamoto 提交于
      MOTU Traveler supports AES/EBU on XLR interface and data block of rx/tx
      packet includes two chunk for the interface. This commit adds a flag
      for this purpose.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      06ac0b6f
    • T
      ALSA: firewire-motu: add a flag for chunks for main 1/2 out · 81720c6d
      Takashi Sakamoto 提交于
      This driver explicitly assumes that all of supported models have main data
      chunk separated from chunk for analog ports. However, MOTU Traveler doesn't
      support the separated main data chunk.
      
      This commit adds a flag for the separated main data chunk.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      81720c6d
    • T
      ALSA: firewire-motu: suppless consumption for unused element of array in stack · 6c1549c4
      Takashi Sakamoto 提交于
      In MOTU firewire protocol, data block consists of 24 bit data chunks except
      for one quadlet for source packet header (SPH). The number of data chunk in
      a data block is different between three clock modes; low, middle and high.
      When unit supports ADAT on optical interface, the data block includes some
      chunks for ADAT channels. These ADAT chunks are unavailable at high mode.
      
      This driver has local functions to calculate the number of ADAT chunks. But
      They uses stack for three clock modes. This is useless for higher mode.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      6c1549c4
  4. 28 5月, 2018 1 次提交
  5. 12 2月, 2018 1 次提交
    • L
      vfs: do bulk POLL* -> EPOLL* replacement · a9a08845
      Linus Torvalds 提交于
      This is the mindless scripted replacement of kernel use of POLL*
      variables as described by Al, done by this script:
      
          for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
              L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
              for f in $L; do sed -i "-es/^\([^\"]*\)\(\<POLL$V\>\)/\\1E\\2/" $f; done
          done
      
      with de-mangling cleanups yet to come.
      
      NOTE! On almost all architectures, the EPOLL* constants have the same
      values as the POLL* constants do.  But they keyword here is "almost".
      For various bad reasons they aren't the same, and epoll() doesn't
      actually work quite correctly in some cases due to this on Sparc et al.
      
      The next patch from Al will sort out the final differences, and we
      should be all done.
      Scripted-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a9a08845
  6. 28 11月, 2017 1 次提交
  7. 02 11月, 2017 1 次提交
    • G
      License cleanup: add SPDX GPL-2.0 license identifier to files with no license · b2441318
      Greg Kroah-Hartman 提交于
      Many source files in the tree are missing licensing information, which
      makes it harder for compliance tools to determine the correct license.
      
      By default all files without license information are under the default
      license of the kernel, which is GPL version 2.
      
      Update the files which contain no license information with the 'GPL-2.0'
      SPDX license identifier.  The SPDX identifier is a legally binding
      shorthand, which can be used instead of the full boiler plate text.
      
      This patch is based on work done by Thomas Gleixner and Kate Stewart and
      Philippe Ombredanne.
      
      How this work was done:
      
      Patches were generated and checked against linux-4.14-rc6 for a subset of
      the use cases:
       - file had no licensing information it it.
       - file was a */uapi/* one with no licensing information in it,
       - file was a */uapi/* one with existing licensing information,
      
      Further patches will be generated in subsequent months to fix up cases
      where non-standard license headers were used, and references to license
      had to be inferred by heuristics based on keywords.
      
      The analysis to determine which SPDX License Identifier to be applied to
      a file was done in a spreadsheet of side by side results from of the
      output of two independent scanners (ScanCode & Windriver) producing SPDX
      tag:value files created by Philippe Ombredanne.  Philippe prepared the
      base worksheet, and did an initial spot review of a few 1000 files.
      
      The 4.13 kernel was the starting point of the analysis with 60,537 files
      assessed.  Kate Stewart did a file by file comparison of the scanner
      results in the spreadsheet to determine which SPDX license identifier(s)
      to be applied to the file. She confirmed any determination that was not
      immediately clear with lawyers working with the Linux Foundation.
      
      Criteria used to select files for SPDX license identifier tagging was:
       - Files considered eligible had to be source code files.
       - Make and config files were included as candidates if they contained >5
         lines of source
       - File already had some variant of a license header in it (even if <5
         lines).
      
      All documentation files were explicitly excluded.
      
      The following heuristics were used to determine which SPDX license
      identifiers to apply.
      
       - when both scanners couldn't find any license traces, file was
         considered to have no license information in it, and the top level
         COPYING file license applied.
      
         For non */uapi/* files that summary was:
      
         SPDX license identifier                            # files
         ---------------------------------------------------|-------
         GPL-2.0                                              11139
      
         and resulted in the first patch in this series.
      
         If that file was a */uapi/* path one, it was "GPL-2.0 WITH
         Linux-syscall-note" otherwise it was "GPL-2.0".  Results of that was:
      
         SPDX license identifier                            # files
         ---------------------------------------------------|-------
         GPL-2.0 WITH Linux-syscall-note                        930
      
         and resulted in the second patch in this series.
      
       - if a file had some form of licensing information in it, and was one
         of the */uapi/* ones, it was denoted with the Linux-syscall-note if
         any GPL family license was found in the file or had no licensing in
         it (per prior point).  Results summary:
      
         SPDX license identifier                            # files
         ---------------------------------------------------|------
         GPL-2.0 WITH Linux-syscall-note                       270
         GPL-2.0+ WITH Linux-syscall-note                      169
         ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause)    21
         ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)    17
         LGPL-2.1+ WITH Linux-syscall-note                      15
         GPL-1.0+ WITH Linux-syscall-note                       14
         ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause)    5
         LGPL-2.0+ WITH Linux-syscall-note                       4
         LGPL-2.1 WITH Linux-syscall-note                        3
         ((GPL-2.0 WITH Linux-syscall-note) OR MIT)              3
         ((GPL-2.0 WITH Linux-syscall-note) AND MIT)             1
      
         and that resulted in the third patch in this series.
      
       - when the two scanners agreed on the detected license(s), that became
         the concluded license(s).
      
       - when there was disagreement between the two scanners (one detected a
         license but the other didn't, or they both detected different
         licenses) a manual inspection of the file occurred.
      
       - In most cases a manual inspection of the information in the file
         resulted in a clear resolution of the license that should apply (and
         which scanner probably needed to revisit its heuristics).
      
       - When it was not immediately clear, the license identifier was
         confirmed with lawyers working with the Linux Foundation.
      
       - If there was any question as to the appropriate license identifier,
         the file was flagged for further research and to be revisited later
         in time.
      
      In total, over 70 hours of logged manual review was done on the
      spreadsheet to determine the SPDX license identifiers to apply to the
      source files by Kate, Philippe, Thomas and, in some cases, confirmation
      by lawyers working with the Linux Foundation.
      
      Kate also obtained a third independent scan of the 4.13 code base from
      FOSSology, and compared selected files where the other two scanners
      disagreed against that SPDX file, to see if there was new insights.  The
      Windriver scanner is based on an older version of FOSSology in part, so
      they are related.
      
      Thomas did random spot checks in about 500 files from the spreadsheets
      for the uapi headers and agreed with SPDX license identifier in the
      files he inspected. For the non-uapi files Thomas did random spot checks
      in about 15000 files.
      
      In initial set of patches against 4.14-rc6, 3 files were found to have
      copy/paste license identifier errors, and have been fixed to reflect the
      correct identifier.
      
      Additionally Philippe spent 10 hours this week doing a detailed manual
      inspection and review of the 12,461 patched files from the initial patch
      version early this week with:
       - a full scancode scan run, collecting the matched texts, detected
         license ids and scores
       - reviewing anything where there was a license detected (about 500+
         files) to ensure that the applied SPDX license was correct
       - reviewing anything where there was no detection but the patch license
         was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
         SPDX license was correct
      
      This produced a worksheet with 20 files needing minor correction.  This
      worksheet was then exported into 3 different .csv files for the
      different types of files to be modified.
      
      These .csv files were then reviewed by Greg.  Thomas wrote a script to
      parse the csv files and add the proper SPDX tag to the file, in the
      format that the file expected.  This script was further refined by Greg
      based on the output to detect more types of files automatically and to
      distinguish between header and source .c files (which need different
      comment types.)  Finally Greg ran the script using the .csv files to
      generate the patches.
      Reviewed-by: NKate Stewart <kstewart@linuxfoundation.org>
      Reviewed-by: NPhilippe Ombredanne <pombredanne@nexb.com>
      Reviewed-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2441318
  8. 25 10月, 2017 1 次提交
    • M
      locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns... · 6aa7de05
      Mark Rutland 提交于
      locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE()
      
      Please do not apply this to mainline directly, instead please re-run the
      coccinelle script shown below and apply its output.
      
      For several reasons, it is desirable to use {READ,WRITE}_ONCE() in
      preference to ACCESS_ONCE(), and new code is expected to use one of the
      former. So far, there's been no reason to change most existing uses of
      ACCESS_ONCE(), as these aren't harmful, and changing them results in
      churn.
      
      However, for some features, the read/write distinction is critical to
      correct operation. To distinguish these cases, separate read/write
      accessors must be used. This patch migrates (most) remaining
      ACCESS_ONCE() instances to {READ,WRITE}_ONCE(), using the following
      coccinelle script:
      
      ----
      // Convert trivial ACCESS_ONCE() uses to equivalent READ_ONCE() and
      // WRITE_ONCE()
      
      // $ make coccicheck COCCI=/home/mark/once.cocci SPFLAGS="--include-headers" MODE=patch
      
      virtual patch
      
      @ depends on patch @
      expression E1, E2;
      @@
      
      - ACCESS_ONCE(E1) = E2
      + WRITE_ONCE(E1, E2)
      
      @ depends on patch @
      expression E;
      @@
      
      - ACCESS_ONCE(E)
      + READ_ONCE(E)
      ----
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: davem@davemloft.net
      Cc: linux-arch@vger.kernel.org
      Cc: mpe@ellerman.id.au
      Cc: shuah@kernel.org
      Cc: snitzer@redhat.com
      Cc: thor.thayer@linux.intel.com
      Cc: tj@kernel.org
      Cc: viro@zeniv.linux.org.uk
      Cc: will.deacon@arm.com
      Link: http://lkml.kernel.org/r/1508792849-3115-19-git-send-email-paulmck@linux.vnet.ibm.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      6aa7de05
  9. 12 9月, 2017 1 次提交
  10. 22 8月, 2017 1 次提交
  11. 21 8月, 2017 2 次提交
    • T
      ALSA: firewire-motu: add support for MOTU Audio Express · 3a93d082
      Takashi Sakamoto 提交于
      MOTU Audio Express is one of third generation in MOTU FireWire
      series, produced in 2011. This model consists of three chips:
       * TI TSB41AB2 (Physical layer for IEEE 1394 bus)
       * Microchip USB3300 (Hi-Speed USB Device with ULPI interface)
       * Xilinx Spartan-3A FPGA, XC3S400A (Link layer for IEEE 1394 bus, packet
         processing and data block processing layer)
      
      This commit adds support for this model. As I expected, it works with
      current implementaion of protocol version 3. On the other hand, the unit
      has a quirk to request subaction originated by any driver.
      
      11:45:51.287643 firewire_ohci 0000:03:00.0: AT spd 2 tl 1f, ffc1 -> ffc0, -reserved-, QW req, fffff0000b14 = 02000200
      11:45:51.289193 firewire_ohci 0000:03:00.0: AR spd 2 tl 1f, ffc0 -> ffc1, ack_complete, W resp
      11:45:51.289381 fireire_core 0000:03:00.0: unsolicited response (source ffc0, tlabel 1f)
      11:45:51.313071 firewire_ohci 0000:03:00.0: AT spd 2 tl 20, ffc1 -> ffc0, ack_pending , QW req, fffff0000b14 = 02000200
      11:45:51.314539 firewire_ohci 0000:03:00.0: AR spd 2 tl 20, ffc0 -> ffc1, ack_complete, W resp
      
      In 1394 OHCI (rev.1.1), after OUTPUT_LAST* descriptors is processed,
      'xferStaus' field is filled with 'ContextControl[0:15]' (see clause 7.1.3).
      5 bits in LSB side of the field has ack code in acknowledge from the unit
      (see clause 7.2.2). A list of the code is shown in Table 3-2.
      
      As long as I investigated, in a case of the '-reserved-' acknowledge
      message from the unit, the field has 0x10. On the table, this value is
      'Reserved for definition by future 1394 standards'. As long as I know,
      any specifications of IEEE 1394 has no such extensions, thus the unit is
      out of specification. Besides, I note that the unit does not always
      acknowledge with the invalid code. I guess this is a bug of firmware. I
      confirmed the bug in firmware version 1.04 and this is the latest one.
      
      $ cd linux-firewire-utils
      $ python2 ./src/crpp < /sys/bus/firewire/devices/fw1/config_rom
                     ROM header and bus information block
                     -----------------------------------------------------------------
      400  0410a756  bus_info_length 4, crc_length 16, crc 42838
      404  31333934  bus_name "1394"
      408  20ff7000  irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 255, max_rec 7 (256)
      40c  0001f200  company_id 0001f2     |
      410  000a8a7b  device_id 00000a8a7b  | EUI-64 0001f200000a8a7b
      
                     root directory
                     -----------------------------------------------------------------
      414  0004ef04  directory_length 4, crc 61188
      418  030001f2  vendor
      41c  0c0083c0  node capabilities per IEEE 1394
      420  d1000002  --> unit directory at 428
      424  8d000005  --> eui-64 leaf at 438
      
                     unit directory at 428
                     -----------------------------------------------------------------
      428  00031680  directory_length 3, crc 5760
      42c  120001f2  specifier id
      430  13000033  version
      434  17104800  model
      
                     eui-64 leaf at 438
                     -----------------------------------------------------------------
      438  00025ef3  leaf_length 2, crc 24307
      43c  0001f200  company_id 0001f2     |
      440  000a8a7b  device_id 00000a8a7b  | EUI-64 0001f200000a8a7b
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      3a93d082
    • T
      ALSA: firewire-motu: add specification flag for position of flag for MIDI messages · 8b460c76
      Takashi Sakamoto 提交于
      In protocols of MOTU FireWire series, when transferring MIDI messages,
      transmitter set existence flag to one byte on first several quadlets. The
      position differs depending on protocols and models, however two cases are
      confirmed; in 5th byte and 8th byte from MSB side.
      
      This commit adds a series of specification flag to describe them. When
      the existence flag is in the 5th byte, SND_MOTU_SPEC_[R|T]X_MIDI_2ND_Q is
      used. Else, another set of the flag is used. Here, '_Q' means quadlet.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      8b460c76
  12. 20 8月, 2017 1 次提交
  13. 19 8月, 2017 1 次提交
  14. 15 8月, 2017 1 次提交
  15. 08 6月, 2017 1 次提交
  16. 07 6月, 2017 1 次提交
    • T
      ALSA: firewire: process packets in 'struct snd_pcm_ops.ack' callback · 875becf8
      Takashi Sakamoto 提交于
      In recent commit for ALSA PCM core, some arrangement is done for
      'struct snd_pcm_ops.ack' callback. This is called when appl_ptr is
      explicitly moved in intermediate buffer for PCM frames, except for
      some cases described later.
      
      For drivers in ALSA firewire stack, usage of this callback has a merit to
      reduce latency between time of PCM frame queueing and handling actual
      packets in recent isochronous cycle, because no need to wait for software
      IRQ context from isochronous context of OHCI 1394.
      
      If this works well in a case that mapped page frame is used for the
      intermediate buffer, user process should execute some commands for ioctl(2)
      to tell the number of handled PCM frames in the intermediate buffer just
      after handling them. Therefore, at present, with a combination of below
      conditions, this doesn't work as expected and user process should wait for
      the software IRQ context as usual:
       - when ALSA PCM core judges page frame mapping is available for status
         data (struct snd_pcm_mmap_status) and control data
         (struct snd_pcm_mmap_control).
       - user process handles PCM frames by loop just with 'snd_pcm_mmap_begin()'
         and 'snd_pcm_mmap_commit()'.
       - user process uses PCM hw plugin in alsa-lib to operate I/O without
         'sync_ptr_ioctl' option.
      
      Unfortunately, major use case include these three conditions.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      875becf8
  17. 20 4月, 2017 1 次提交
    • A
      ALSA: firewire-motu: mark trace helpers as __maybe_unused · fa8323bf
      Arnd Bergmann 提交于
      Two functions were introduced for the purpose of tracing but cause warnings
      when tracing is disabled:
      
      sound/firewire/motu/amdtp-motu.c:284:13: error: 'copy_message' defined but not used [-Werror=unused-function]
       static void copy_message(u64 *frames, __be32 *buffer, unsigned int data_blocks,
      sound/firewire/motu/amdtp-motu.c:271:13: error: 'copy_sph' defined but not used [-Werror=unused-function]
       static void copy_sph(u32 *frames, __be32 *buffer, unsigned int data_blocks,
      
      Marking them as __maybe_unused will do the right thing here.
      
      Fixes: 17909c1b ("ALSA: firewire-motu: add tracepoints for SPH in IEC 61883-1 fashion")
      Fixes: c6b0b9e6 ("ALSA: firewire-motu: add tracepoints for messages for unique protocol")
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      fa8323bf
  18. 11 4月, 2017 2 次提交
    • T
      ALSA: firewire-motu: add tracepoints for messages for unique protocol · c6b0b9e6
      Takashi Sakamoto 提交于
      MOTU units transfer/receive messages in each data block of their
      isochronous packet payload. A part of content in the message is cleard for
      MIDI message transmission, while the rest is unknown yet. Additional
      features are required to assist users and developers to reveal the
      details.
      
      This commit adds tracepoints for the purpose. The tracepoints are designed
      for MOTU's protocol version 2 and 3 (Protocol version 1 is not upstreamed
      yet). In the tracepoints, events are probed to gather first two 24 bit
      data chunks of each data block. The chunks are formatted into elements
      of 64 bit array with padding in MSB.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c6b0b9e6
    • T
      ALSA: firewire-motu: add tracepoints for SPH in IEC 61883-1 fashion · 17909c1b
      Takashi Sakamoto 提交于
      Unique protocol is used for MOTU FireWire series. In this protocol,
      data block format is not compliant to AM824 in IEC 61883-1/6. Each of
      the data block consists of 24 bit data chunks, except for a first
      quadlet. The quadlet is used for source packet header (SPH) described
      in IEC 61883-1.
      
      The sequence of SPH seems to represent presentation timestamp
      corresponding to included data. Developers have experienced that invalid
      sequence brings disorder of units in the series.
      
      Unfortunately, current implementation of ALSA IEC 61883-1/6 engine and
      firewire-motu driver brings periodical noises to the units at sampling
      transmission frequency based on 44.1 kHz. The engine generates the SPH with
      even interval and this mechanism seems not to be suitable to the units.
      Further work is required for this issue and infrastructure is preferable
      to assist the work.
      
      This commit adds tracepoints for the purpose. In the tracepoints, events
      are probed to gather the SPHs from each data blocks.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      17909c1b
  19. 06 4月, 2017 1 次提交
  20. 28 3月, 2017 14 次提交
    • T
      ALSA: firewire-motu: add support for MOTU 828mk3 (FireWire/Hybrid) as a model... · 5992e300
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      5992e300
    • T
      ALSA: firewire-motu: add support for MOTU 828mk2 as a model with protocol version 2 · 949613e3
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      949613e3
    • T
      ALSA: firewire-motu: enable to read transaction cache via hwdep interface · 5aaab1bf
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      5aaab1bf
    • T
      ALSA: firewire-motu: add hwdep interface · 71c37977
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      71c37977
    • T
      ALSA: firewire-motu: add MIDI functionality · 9e796e7d
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      9e796e7d
    • T
      ALSA: firewire-motu: add PCM functionality · dd49b2d1
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      dd49b2d1
    • T
      ALSA: firewire-motu: add proc node to show current statuc of clock and packet formats · 4638ec6e
      Takashi Sakamoto 提交于
      This commit adds a proc node for debugging purpose.
      Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      4638ec6e
    • T
      ALSA: firewire-motu: add stream management functionality · 9b2bb4f2
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      9b2bb4f2
    • T
      ALSA: firewire-motu: handle transactions specific for MOTU FireWire models · 2e76701b
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      2e76701b
    • T
      ALSA: firewire-motu: add MOTU specific protocol layer · 4641c939
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      4641c939
    • T
      ALSA: firewire-motu: add an abstraction layer for three types of protocols · 59f6482c
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      59f6482c
    • T
      ALSA: firewire-motu: add a structure for model-dependent parameters. · 5e03c33e
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      5e03c33e
    • T
      ALSA: firewire-motu: postpone sound card registration · 8865a31e
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      8865a31e
    • T
      ALSA: firewire-motu: add skeleton for Mark of the unicorn (MOTU) FireWire series · 6c3cef48
      Takashi Sakamoto 提交于
      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: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      6c3cef48