1. 02 Aug, 2018 1 commit
  2. 01 Aug, 2018 13 commits
  3. 31 Jul, 2018 4 commits
    • Jorge Sanjuan's avatar
      ALSA: usb-audio: Operate UAC3 Power Domains in PCM callbacks · a0a4959e
      Jorge Sanjuan authored
      Make use of UAC3 Power Domains associated to an Audio Streaming
      path within the PCM's logic. This means, when there is no audio
      being transferred (pcm is closed), the host will set the Power Domain
      associated to that substream to state D1. When audio is being transferred
      (from hw_params onwards), the Power Domain will be set to D0 state.
      
      This is the way the host lets the device know which Terminal
      is going to be actively used and it is for the device to
      manage its own internal resources on that UAC3 Power Domain.
      
      Note the resume method now sets the Power Domain to D1 state as
      resuming the device doesn't mean audio streaming will occur.
      Signed-off-by: default avatarJorge Sanjuan <jorge.sanjuan@codethink.co.uk>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a0a4959e
    • Jorge Sanjuan's avatar
      ALSA: usb-audio: Add UAC3 Power Domains to suspend/resume · 3f59aa11
      Jorge Sanjuan authored
      Set the UAC3 Power Domain state for an Audio Streaming interface
      to D2 state before suspending the device (usb_driver callback).
      This lets the device know there is no intention to use any of the
      Units in the Audio Function and that the host is not going to
      even listen for wake-up events (interrupts) on the units.
      
      When the usb_driver gets resumed, the state D0 (fully powered) will
      be set. This ties up the UAC3 Power Domains to the runtime PM.
      Signed-off-by: default avatarJorge Sanjuan <jorge.sanjuan@codethink.co.uk>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      3f59aa11
    • Jorge Sanjuan's avatar
      ALSA: usb-audio: AudioStreaming Power Domain parsing · 7edf3b5e
      Jorge Sanjuan authored
      Power Domains in the UAC3 spec are mainly intended to be
      associated to an Input or Output Terminal so the host
      changes the power state of the entire capture or playback
      path within the topology.
      
      This patch adds support for finding Power Domains associated
      to an Audio Streaming Interface (bTerminalLink) and adds a
      reference to them in the usb audio substreams (snd_usb_substream).
      Signed-off-by: default avatarJorge Sanjuan <jorge.sanjuan@codethink.co.uk>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7edf3b5e
    • Jorge Sanjuan's avatar
      ALSA: usb-audio: Initial Power Domain support · 11785ef5
      Jorge Sanjuan authored
      Thee USB Audio Class 3 (UAC3) introduces Power Domains as a new
      feature to let a host turn individual parts of an audio function
      to different power states via USB requests. This lets the device
      get to know a bit amore about what the host is up to in order to
      optimize power consumption efficiently.
      
      The Power Domains are optional for UAC3 configuration but all
      UAC3 devices shall include at least one BADD configuration where
      the support for Power Domains is compulsory.
      
      This patch adds a set of features/helpers to parse these power
      domains and change their status.
      Signed-off-by: default avatarJorge Sanjuan <jorge.sanjuan@codethink.co.uk>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      11785ef5
  4. 30 Jul, 2018 2 commits
    • Takashi Iwai's avatar
      ALSA: seq: virmidi: Use READ_ONCE/WRITE_ONCE() macros · 89b4ab21
      Takashi Iwai authored
      The trigger flag in vmidi object can be referred in different contexts
      concurrently, hence it's better to be put with READ_ONCE() and
      WRITE_ONCE() macros to assure the accesses.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      89b4ab21
    • Takashi Iwai's avatar
      ALSA: seq: virmidi: Offload the output event processing · f7debfe5
      Takashi Iwai authored
      The virmidi sequencer stuff tries to translate the rawmidi bytes to
      sequencer events and deliver the packets at trigger callback.  The
      amount of the whole process of these translations and deliveries
      depends on the incoming rawmidi bytes, and we have no limit for that;
      this was the cause of a CPU soft lockup that had been reported and
      fixed recently.
      
      Although we've fixed the soft lockup by putting the temporary unlock
      and cond_resched(), it's rather a quick band aid.  In this patch,
      meanwhile, the event parsing and delivery process is offloaded to a
      dedicated work, and the trigger callback just kicks it off.  It has
      three merits, at least:
      
      - The processing is always done in a sleepable context, which can
        assure the event delivery with non-atomic flag without hackish
        is_atomic() usage.
      
      - Other relevant codes can be simplified, reducing the lines
      
      - It makes me happier
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      f7debfe5
  5. 29 Jul, 2018 2 commits
  6. 28 Jul, 2018 2 commits
  7. 27 Jul, 2018 16 commits
    • Jia-Ju Bai's avatar
      ALSA: ctxfi: cthw20k2: Replace mdelay() with msleep() and usleep_range() · fad56c89
      Jia-Ju Bai authored
      hw_pll_init(), hw_dac_stop(), hw_dac_start() and hw_adc_init()
      are never called in atomic context.
      They call mdelay() to busily wait, which is not necessary.
      mdelay() can be replaced with msleep().
      
      This is found by a static analysis tool named DCNS written by myself.
      Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      fad56c89
    • Jia-Ju Bai's avatar
      ALSA:: ctxfi: cthw20k1: Replace mdelay() with msleep() · 08fd8325
      Jia-Ju Bai authored
      hw_pll_init(), hw_reset_dac() and hw_card_init() are never
      called in atomic context.
      They calls mdelay() to busily wait, which is not necessary.
      mdelay() can be replaced with msleep().
      
      This is found by a static analysis tool named DCNS written by myself.
      Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      08fd8325
    • Jia-Ju Bai's avatar
      ALSA: usb-audio: quirks: Replace mdelay() with msleep() and usleep_range() · df3f0347
      Jia-Ju Bai authored
      snd_usb_select_mode_quirk(), snd_usb_set_interface_quirk() and
      snd_usb_ctl_msg_quirk() are never called in atomic context.
      They call mdelay() to busily wait, which is not necessary.
      mdelay() can be replaced with msleep() and usleep_range().
      
      This is found by a static analysis tool named DCNS written by myself.
      Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      df3f0347
    • Takashi Iwai's avatar
      ALSA: sb: Proper endian notations · 13e9a3ed
      Takashi Iwai authored
      The data types defined in SB CSP driver code are all in little-endian,
      hence the proper type like __le32 should be used.
      
      Spotted by sparse, a warning like:
        sound/isa/sb/sb16_csp.c:330:14: warning: cast to restricted __le32
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      13e9a3ed
    • Takashi Iwai's avatar
      ALSA: atiixp_modem: Proper endian notations · 7e49aadf
      Takashi Iwai authored
      The DMA address table in atiixp modem driver is in little-endian,
      hence we should define it with __le32 properly.
      
      Spotted by sparse, a warning like:
        sound/pci/atiixp_modem.c:360:28: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7e49aadf
    • Takashi Iwai's avatar
      ALSA: atiixp: Proper endian notations · c44a81a4
      Takashi Iwai authored
      The DMA address table in atiixp driver is in little-endian, hence we should define it with __le32 properly.
      
      Spotted by sparse, a warning like:
        sound/pci/atiixp.c:393:28: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c44a81a4
    • Takashi Iwai's avatar
      ALSA: bt87x: Proper endian notations · 58578d18
      Takashi Iwai authored
      The RISC data in bt87x is in little-endian, hence we should define it
      with __le32 properly.
      
      Spotted by sparse, a warning like:
        sound/pci/bt87x.c:240:17: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      58578d18
    • Takashi Iwai's avatar
      ALSA: echoaudio: Proper endian notations · 2a833a02
      Takashi Iwai authored
      Many data fields defined in echoaudio drivers are in little-endian,
      hence they should be defined with __le16 or __le32.  This makes it
      easier to catch the forgotten conversions.
      
      Spotted by sparse, a warning like:
        sound/pci/echoaudio/echoaudio_dsp.c:990:36: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      2a833a02
    • Takashi Iwai's avatar
      ALSA: maestro3: Proper endian notations · 8c0ab942
      Takashi Iwai authored
      The ASSP data passed to maestro3 driver is in little-endian format,
      hence the data pointer should be with __le16.
      
      Spotted by sparse, warnings like:
        sound/pci/maestro3.c:2128:35: warning: cast to restricted __le16
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      8c0ab942
    • Takashi Iwai's avatar
      ALSA: intel8x0m: Proper endian notations · 7752a7de
      Takashi Iwai authored
      The BD address tables in intel8x0m driver are in little-endian, hence
      they should be represented as __le32 instead u32.
      
      Spotted by sparse, warnings like:
        sound/pci/intel8x0m.c:406:40: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7752a7de
    • Takashi Iwai's avatar
      ALSA: intel8x0: Proper endian notations · 3c164e2c
      Takashi Iwai authored
      The BD address tables in intel8x0 driver are in little-endian, hence
      they should be represented as __le32 instead u32.
      
      Spotted by sparse, warnings like:
        sound/pci/intel8x0.c:688:40: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      3c164e2c
    • Takashi Iwai's avatar
      ALSA: lola: Proper endian notations · 0d9a26fc
      Takashi Iwai authored
      The BDL entries in lola driver are little-endian while we code them as
      u32.  This leads to sparse warnings like:
        sound/pci/lola/lola.c:105:40: warning: incorrect type in assignment (different base types)
        sound/pci/lola/lola.c:105:40:    expected unsigned int [unsigned] [usertype] <noident>
        sound/pci/lola/lola.c:105:40:    got restricted __le32 [usertype] <noident>
      
      This patch fixes the declarations to the proper __le32 type.
      
      Also, there was a typo in the original code, where __user was used
      that was intended as __iomem.  This was caused also by sparse:
        sound/pci/lola/lola_mixer.c:132:27: warning: incorrect type in assignment (different address spaces)
      Fixed in this patch as well.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      0d9a26fc
    • Takashi Iwai's avatar
      ALSA: mixart: Proper endian notations · 0e7ca66a
      Takashi Iwai authored
      The miXart driver deals with big-endian values as raw data, while it
      declares most of variables as u32.  This leads to sparse warnings like
        sound/pci/mixart/mixart.c:1203:23: warning: cast to restricted __be32
      
      Fix them by properly defining the structs and add the explicit cast to
      macros.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      0e7ca66a
    • Takashi Iwai's avatar
      ALSA: riptide: Properly endian notations · be05e3de
      Takashi Iwai authored
      The SG descriptor of Riptide contains the little-endian values, hence
      we need to define with __le32 properly.  This fixes sparse warnings
      like:
        sound/pci/riptide/riptide.c:1112:40: warning: cast to restricted __le32
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      be05e3de
    • Takashi Iwai's avatar
      ALSA: hda: Proper endian notations for BDL pointers · 7362b0fc
      Takashi Iwai authored
      The BDL pointer used in snd_hdac_dsp_prepare() should be declared as
      __le32, as warned by sparse:
        sound/hda/hdac_stream.c:655:47: warning: incorrect type in argument 4 (different base types)
        sound/hda/hdac_stream.c:655:47:    expected restricted __le32 [usertype] **bdlp
        sound/hda/hdac_stream.c:655:47:    got unsigned int [usertype] **<noident>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7362b0fc
    • Takashi Iwai's avatar
      ALSA: trident: Proper endian notations · 752089fe
      Takashi Iwai authored
      The TLB entries in Trident driver are represented in little-endian,
      hence they should be declared as __le32.
      
      This patch fixes the sparse warnings like:
        sound/pci/trident/trident_memory.c:226:17: warning: incorrect type in assignment (different base types)
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      752089fe