1. 20 Nov, 2019 6 commits
  2. 19 Nov, 2019 4 commits
    • Nikhil Mahale's avatar
      ALSA: hda - Add DP-MST support for NVIDIA codecs · 5398e94f
      Nikhil Mahale authored
      This patch adds DP-MST support for GK104+ NVIDIA codecs.
      
      GK104+ NVIDIA codecs support DP-MST audio. These codecs have 4
      output converters and 4 pin widgets, with 4 device entries per pin
      widget for a total of 16 device entries.
      
      This patch moves the existing patch_nvhdmi() definition to
      patch_nvhdmi_legacy(), used by pre-GK104 NVIDIA codecs. Redefine
      patch_nvhdmi() to enable DP-MST support by setting codec->dp_mst and
      spec->dyn_pcm_assign.
      
      Introduce fresh logic for dynamic pcm assignment, making
      sure that new pcm assignments are compatible with the legacy static
      per_pin-pmc assignment that existed in the days before DP-MST.
      Signed-off-by: default avatarNikhil Mahale <nmahale@nvidia.com>
      Reviewed-by: default avatarAaron Plattner <aplattner@nvidia.com>
      Link: https://lore.kernel.org/r/20191119084710.29267-5-nmahale@nvidia.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      5398e94f
    • Nikhil Mahale's avatar
      ALSA: hda - Add DP-MST support for non-acomp codecs · 9c32fea8
      Nikhil Mahale authored
      This patch make it possible for non-acomp codecs to set
      dyn_pcm_assign/dp_mst and get DP-MST audio support.
      
      Document change notification HDA040-A for the Intel High Definition
      Audio 1.0a specification introduces a Device Select verb for Digital
      Display Pin Widgets that are multi-stream capable. This verb selects
      a Device Entry that is used by subsequent Pin Widget verbs.
      Once the Device Entry is selected, all subsequent Pin Widget verbs
      controlling the sink device will be directed to the selected Device
      Entry until the Device Select verb is updated with a new value.
      
      These Pin Widget verbs include:
      
        * Connection Select
        * Get Connection List Entry
        * Amplifier Gain/Mute
        * Power State
        * Pin Widget Control
        * ELD Data
        * DIP-Size
        * DIP-Index
        * DIP-Data
        * DIP-XmitCtrl
        * Content Protection Control
        * ASP Channel Mapping
      
      This patch adds calls to snd_hda_set_dev_select() to direct each of
      these Pin Widget control verbs to the correct Device Entry.
      
      snd_hda_get_connections() does not return per-device connection
      list, therefore make use snd_hda_get_raw_connections() instead of
      snd_hda_get_connections().
      Signed-off-by: default avatarNikhil Mahale <nmahale@nvidia.com>
      Reviewed-by: default avatarAaron Plattner <aplattner@nvidia.com>
      Link: https://lore.kernel.org/r/20191119084710.29267-4-nmahale@nvidia.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9c32fea8
    • Nikhil Mahale's avatar
      ALSA: hda - Add DP-MST jack support · 5204a05d
      Nikhil Mahale authored
      This patch adds DP-MST jack support which will be used on NVIDIA
      platforms. Today, DP-MST audio is supported only if the codec has
      acomp support. This patch makes it possible to add DP-MST support
      for non-acomp codecs.
      
      For the codecs supporting DP-MST audio, each pin can contain several
      device entries. Each device entry is a virtual pin, described by
      pin_nid and dev_id in struct hdmi_spec_per_pin. For monitor hotplug
      event handling, non-acomp codecs enable and register jack-detection
      for every hdmi_spec_per_pin.
      
      This patch updates every relevant function in hda_jack.h and its
      implementation in hda_jack.c, to consider dev_id along with pin_nid.
      
      Changes to the HD Audio specification to support DP-MST audio are
      described in the Intel Document Change Notification (DCN) number
      HDA040-A.
      
      From HDA040-A, "For the case of multi stream capable Digital Display
      Pin Widget, [the Get Pin Sense verb] can be used to read a specific
      Device Entry state as reported in Get Device List Entry verb." This
      patch updates the read_pin_sense() function to take the dev_id as an
      argument and pass it as a parameter to the Get Pin Sense verb.
      
      Bits 15 through 20 from the Unsolicited Response for intrinsic
      events contain the index of the Device Entry that generated the
      event. This patch updates the Unsolicited Response event handlers to
      extract the device entry index from the response and pass it to
      snd_hda_jack_tbl_get_from_tag().
      
      This patch updates snd_hda_jack_tbl_new() to take a dev_id argument
      and store it in the jack structure, and to make sure not to generate
      a different tag when called more than once for the same nid.
      Signed-off-by: default avatarNikhil Mahale <nmahale@nvidia.com>
      Link: https://lore.kernel.org/r/20191119084710.29267-3-nmahale@nvidia.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      5204a05d
    • Nikhil Mahale's avatar
      ALSA: hda - Rename snd_hda_pin_sense to snd_hda_jack_pin_sense · 80b917a8
      Nikhil Mahale authored
      s/snd_hda_pin_sense/snd_hda_jack_pin_sense/g
      
      This aligns the snd_hda_pin_sense function name with the names of
      other functions in hda_jack.h.
      Signed-off-by: default avatarNikhil Mahale <nmahale@nvidia.com>
      Reviewed-by: default avatarAaron Plattner <aplattner@nvidia.com>
      Link: https://lore.kernel.org/r/20191119084710.29267-2-nmahale@nvidia.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      80b917a8
  3. 15 Nov, 2019 3 commits
  4. 14 Nov, 2019 5 commits
  5. 13 Nov, 2019 2 commits
  6. 12 Nov, 2019 1 commit
  7. 11 Nov, 2019 6 commits
  8. 09 Nov, 2019 12 commits
  9. 08 Nov, 2019 1 commit
    • Takashi Iwai's avatar
      ALSA: timer: Fix possible race at assigning a timer instance · 6a34367e
      Takashi Iwai authored
      When a new timer instance is created and assigned to the active link
      in snd_timer_open(), the caller still doesn't (can't) set its callback
      and callback data.  In both the user-timer and the sequencer-timer
      code, they do manually set up the callbacks after calling
      snd_timer_open().  This has a potential risk of race when the timer
      instance is added to the already running timer target, as the callback
      might get triggered during setting up the callback itself.
      
      This patch tries to address it by changing the API usage slightly:
      
      - An empty timer instance is created at first via the new function
        snd_timer_instance_new().  This object isn't linked to the timer
        list yet.
      - The caller sets up the callbacks and others stuff for the new timer
        instance.
      - The caller invokes snd_timer_open() with this instance, so that it's
        linked to the target timer.
      
      For closing, do similarly:
      
      - Call snd_timer_close().  This unlinks the timer instance from the
        timer list.
      - Free the timer instance via snd_timer_instance_free() after that.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Link: https://lore.kernel.org/r/20191107192008.32331-4-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      6a34367e