1. 13 Jan, 2020 7 commits
    • Takashi Iwai's avatar
      ALSA: hda: Manage concurrent reg access more properly · 1a462be5
      Takashi Iwai authored
      In the commit 8e85def5 ("ALSA: hda: enable regmap internal
      locking"), we re-enabled the regmap lock due to the reported
      regression that showed the possible concurrent accesses.  It was a
      temporary workaround, and there are still a few opened races even
      after the revert.  In this patch, we cover those still opened windows
      with a proper mutex lock and disable the regmap internal lock again.
      
      First off, the patch introduces a new snd_hdac_device.regmap_lock
      mutex that is applied for each snd_hdac_regmap_*() call, including
      read, write and update helpers.  The mutex is applied carefully so
      that it won't block the self-power-up procedure in the helper
      function.  Also, this assures the protection for the accesses without
      regmap, too.
      
      The snd_hdac_regmap_update_raw() is refactored to use the standard
      regmap_update_bits_check() function instead of the open-code.  The
      non-regmap case is still open-coded but it's an easy part.  The all
      read and write operations are in the single mutex protection, so it's
      now race-free.
      
      In addition, a couple of new helper functions are added:
      snd_hdac_regmap_update_raw_once() and snd_hdac_regmap_sync().  Both
      are called from HD-audio legacy driver.  The former is to initialize
      the given verb bits but only once when it's not initialized yet.  Due
      to this condition, the function invokes regcache_cache_only(), and
      it's now performed inside the regmap_lock (formerly it was racy) too.
      The latter function is for simply invoking regcache_sync() inside the
      regmap_lock, which is called from the codec resume call path.
      Along with that, the HD-audio codec driver code is slightly modified /
      simplified to adapt those new functions.
      
      And finally, snd_hdac_regmap_read_raw(), *_write_raw(), etc are
      rewritten with the helper macro.  It's just for simplification because
      the code logic is identical among all those functions.
      Tested-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
      Link: https://lore.kernel.org/r/20200109090104.26073-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      1a462be5
    • Alexander Tsoy's avatar
      ALSA: usb-audio: Add boot quirk for MOTU M Series · 73ac9f5e
      Alexander Tsoy authored
      Add delay to make sure that audio urbs are not sent too early.
      Otherwise the device hangs. Windows driver makes ~2s delay, so use
      about the same time delay value.
      
      snd_usb_apply_boot_quirk() is called 3 times for my MOTU M4, which
      is an overkill. Thus a quirk that is called only once is implemented.
      
      Also send two vendor-specific control messages before and after
      the delay. This behaviour is blindly copied from the Windows driver.
      Signed-off-by: default avatarAlexander Tsoy <alexander@tsoy.me>
      Link: https://lore.kernel.org/r/20200112102358.18085-1-alexander@tsoy.meSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      73ac9f5e
    • Takashi Sakamoto's avatar
      ALSA: dice: add support for Alesis MasterControl · 791a485f
      Takashi Sakamoto authored
      Alesis MasterControl was shipped 2009 and already discontinued. This model
      consists of:
       * TSB41AB2 for physical layer of IEEE 1394
       * WaveFront Dice II STD for link layer and protocol implementation
       * FreeScale DSPB56374AE
      
      Although the firmware of this model can respond against read transaction
      to address space for TCAT extension protocol, the content is not valid
      for protocol extension. This results in sound card without any PCM/MIDI
      interfaces.
      
      $ ./firewire-request /dev/fw1 read 0xffffe0200000 0x48
      result: 000: 00 00 00 20 00 00 04 94 00 00 04 b4 00 00 00 b4
      result: 010: 00 00 05 68 00 00 00 24 00 00 05 8c 00 00 00 48
      result: 020: 00 00 00 20 00 00 00 08 00 00 00 20 00 00 00 20
      result: 030: 00 00 00 10 00 00 00 08 00 00 00 08 00 00 00 04
      result: 040: 00 00 00 00 00 00 00 00
      
      This commit adds support the model by adding hard-coded stream formats.
      
      $ python3 ~/git/linux-firewire-utils/src/crpp < /sys/bus/firewire/devices/fw1/config_rom
                     ROM header and bus information block
                     -----------------------------------------------------------------
      400  04041ad7  bus_info_length 4, crc_length 4, crc 6871
      404  31333934  bus_name "1394"
      408  e0ff8112  irmc 1, cmc 1, isc 1, bmc 0, pmc 0, cyc_clk_acc 255,
                     max_rec 8 (512), max_rom 1, gen 1, spd 2 (S400)
      40c  00059504  company_id 000595     | Alesis Corporation
      410  008003f5  device_id 04008003f5  | EUI-64 00059504008003f5
      
                     root directory
                     -----------------------------------------------------------------
      414  0006a620  directory_length 6, crc 42528
      418  03000595  vendor: Alesis Corporation
      41c  8100000a  --> descriptor leaf at 444
      420  17000002  model
      424  8100000d  --> descriptor leaf at 458
      428  0c0087c0  node capabilities per IEEE 1394
      42c  d1000001  --> unit directory at 430
      
                     unit directory at 430
                     -----------------------------------------------------------------
      430  00041b9f  directory_length 4, crc 7071
      434  12000595  specifier id: Alesis Corporation
      438  13000001  version: audio
      43c  17000002  model
      440  8100000d  --> descriptor leaf at 474
      
                     descriptor leaf at 444
                     -----------------------------------------------------------------
      444  000494c2  leaf_length 4, crc 38082
      448  00000000  textual descriptor
      44c  00000000  minimal ASCII
      450  416c6573  "Ales"
      454  69730000  "is"
      
                     descriptor leaf at 458
                     -----------------------------------------------------------------
      458  0006c2ec  leaf_length 6, crc 49900
      45c  00000000  textual descriptor
      460  00000000  minimal ASCII
      464  4d617374  "Mast"
      468  6572436f  "erCo"
      46c  6e74726f  "ntro"
      470  6c000000  "l"
      
                     descriptor leaf at 474
                     -----------------------------------------------------------------
      474  0006c2ec  leaf_length 6, crc 49900
      478  00000000  textual descriptor
      47c  00000000  minimal ASCII
      480  4d617374  "Mast"
      484  6572436f  "erCo"
      488  6e74726f  "ntro"
      48c  6c000000  "l"
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Link: https://lore.kernel.org/r/20200113084630.14305-4-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      791a485f
    • Takashi Sakamoto's avatar
      ALSA: dice: loosen stream format check for MIDI conformant data channel · a9f47fcb
      Takashi Sakamoto authored
      ALSA dice driver expects devices to multiplex MIDI messages into first
      port of isochronous communication. Actually devices perform for it.
      However, check of stream format is invalid for second port of isochronous
      communication. As a result, when the device supports two ports for
      isochronous communication and the stream format is hard-coded, ALSA
      dice driver fails to start packet streaming.
      
      This commit loosens stream format check for MIDI conformant data channel.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Link: https://lore.kernel.org/r/20200113084630.14305-3-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a9f47fcb
    • Takashi Sakamoto's avatar
      ALSA: oxfw: fix for Stanton SCS.1d · 41dbc792
      Takashi Sakamoto authored
      Stanton SCS.1d uses Oxford Semiconductor FW 971 ASIC (FW971) for
      communication. Although the unit is bound to ALSA oxfw driver, the instance
      of sound card can not be added due to its quirk of plug information. This
      bug was added when snd-scs1x is merged into snd-oxfw at commit
      9e2004f9 ("ALSA: oxfw: obsolete scs1x module").
      
      This commit fixes the driver for the quirk. In cases that the unit returns
      NOT IMPLEMENTED for some AV/C commands, the sound card is added without any
      PCM/MIDI interfaces for packet streaming. For SCS.1d, model dependent
      operation adds MIDI interface and applications can use it to operate
      according to HSS1394 protocol from reverse-engineering work by Sean M.
      Pappalardo.
      
      Plug Control Register (PCR) has information that the unit has a pair of
      plugs for isochronous communication:
      
      (oMPR)
      $ ./firewire-request /dev/fw1 read 0xfffff0000900
      result: 80ff0001
      (iMPR)
      $ ./firewire-request /dev/fw1 read 0xfffff0000980
      result: 80ff0001
      
      AV/C PLUG INFO also returns information that the unit has a pair of
      plugs for isochronous communication.
      
      (AV/C PLUG INFO command)
      $ ./firewire-request /dev/fw1 fcp 0x01ff0200ffffffff
      response: 000: 0c ff 02 00 01 01 02 02
      
      However, AV/C PLUG SIGNAL INFO command is rejected for both plugs.
      
      (AV/C OUTPUT PLUG SIGNAL INFO command)
      $ ./firewire-request /dev/fw1 fcp 0x01ff1800ffffffff
      response: 000: 0a ff 18 00 ff ff ff ff
      (AV/C INPUT PLUG SIGNAL INFO command)
      $ ./firewire-request /dev/fw1 fcp 0x01ff1900ffffffff
      response: 000: 0a ff 19 00 ff ff ff ff
      
      Furthermore, AV/C EXTENDED STREAM FORMAT INFO is not implemented.
      
      (AV/C EXTENDED STREAM FORMAT INFO list subfunction for input plug)
      $ ./firewire-request /dev/fw1 fcp 0x01ffbfc000000000ffff00ff
      response: 000: 08 ff bf c0 00 00 00 00 ff ff 00 ff
      (AV/C EXTENDED STREAM FORMAT INFO list subfunction for output plug)
      $ ./firewire-request /dev/fw1 fcp 0x01ffbfc001000000ffff00ff
      response: 000: 08 ff bf c0 01 00 00 00 ff ff 00 ff
      (AV/C EXTENDED STREAM FORMAT INFO single subfunction for input plug)
      $ ./firewire-request /dev/fw1 fcp 0x01ffbfc100000000ffffffff
      response: 000: 08 ff bf c1 00 00 00 00 ff ff ff ff
      (AV/C EXTENDED STREAM FORMAT INFO single subfunction for output plug)
      $ ./firewire-request /dev/fw1 fcp 0x01ffbfc101000000ffffffff
      response: 000: 08 ff bf c1 01 00 00 00 ff ff ff ff
      
      Reference: https://mailman.alsa-project.org/pipermail/alsa-devel/2012-May/052264.htmlSigned-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Link: https://lore.kernel.org/r/20200113073418.24622-4-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      41dbc792
    • Takashi Sakamoto's avatar
      ALSA: oxfw: don't add MIDI/PCM interface when packet streaming is unavailable · 06a42a74
      Takashi Sakamoto authored
      Stanton SCS.1d doesn't support packet streaming even if it has plugs for
      isochronous communication.
      
      This commit is a preparation for this case. The 'has_input' member is
      added to specific structure, and MIDI/PCM interfaces are not added when
      the member is false.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Link: https://lore.kernel.org/r/20200113073418.24622-3-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      06a42a74
    • Takashi Sakamoto's avatar
      ALSA: oxfw: use ENXIO for not-supported cases · 03be63b2
      Takashi Sakamoto authored
      When AV/C command returns 'NOT IMPLEMENTED' status in its response, ALSA
      oxfw driver uses ENOSYS as error code. However, it's expected just to be
      used for missing system call number.
      
      This commit replaces it with ENXIO.
      Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
      Link: https://lore.kernel.org/r/20200113073418.24622-2-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      03be63b2
  2. 12 Jan, 2020 3 commits
  3. 11 Jan, 2020 2 commits
    • Takashi Iwai's avatar
      Merge branch 'for-linus' into for-next · 3cdca6d6
      Takashi Iwai authored
      Sync 5.5-devel branch once again for applying the HD-audio fixes.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      3cdca6d6
    • Takashi Iwai's avatar
      ALSA: hda: Rename back to dmic_detect option · 7fba6aea
      Takashi Iwai authored
      We've got quite a few bug reports showing the SOF driver being loaded
      unintentionally recently, and the reason seems to be that users didn't
      know the module option change: with the recent kernel, a new option
      dsp_driver=1 has to be passed to a new module snd-intel-dspcfg
      instead of snd_hda_intel.dmic_detect=0 option.
      
      That is, actually there are two tricky things here:
      - We changed the whole detection in another module and another
        option semantics.
      - The existing option for skipping the DSP probe was also renamed.
      
      For avoiding the confusion and giving user more hint, this patch
      reverts the renamed option dsp_driver back to dmic_detect for
      snd-hda-intel module, and show the warning about the module option
      change when the non-default value is passed.
      
      Fixes: 82d9d54a ("ALSA: hda: add Intel DSP configuration / probe code")
      Link: https://lore.kernel.org/r/20200109082000.26729-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7fba6aea
  4. 08 Jan, 2020 6 commits
  5. 06 Jan, 2020 1 commit
  6. 05 Jan, 2020 21 commits