07 Aug, 2020

3 commits

  • The jack on Intel NUC 8 Rugged rear panel doesn't work.

    The spec [1] states that the jack supports both headphone and
    microphone, so override a Pin Complex which has both Amp-In and Amp-Out
    to make the jack work.

    Node 0x1b fits the requirement, and user confirmed the jack now works
    with new pin config.

    [1] https://www.intel.com/content/dam/support/us/en/documents/mini-pcs/NUC8CCH_TechProdSpec.pdf
    BugLink: https://bugs.launchpad.net/bugs/1875199

    Signed-off-by: Kai-Heng Feng
    Link: https://lore.kernel.org/r/20200807080514.15293-1-kai.heng.feng@canonical.com
    Signed-off-by: Takashi Iwai

    Kai-Heng Feng
     
  • Adds an entry for Creative USB X-Fi to the rc_config array in
    mixer_quirks.c to allow use of volume knob on the device.
    Adds support for newer X-Fi Pro card, known as "Model No. SB1095"
    with USB ID "041e:3263"

    Signed-off-by: Mirko Dietrich
    Cc:
    Link: https://lore.kernel.org/r/20200806124850.20334-1-buzz@l4m1.de
    Signed-off-by: Takashi Iwai

    Mirko Dietrich
     
  • There is a spelling mistake in a usb_audio_dbg debug message. Also
    replace "param" with "parameter". Fix these.

    Signed-off-by: Colin Ian King
    Link: https://lore.kernel.org/r/20200806105134.46447-1-colin.king@canonical.com
    Signed-off-by: Takashi Iwai

    Colin Ian King
     

06 Aug, 2020

2 commits


05 Aug, 2020

5 commits

  • Tegra HDA has audio data buffer for upto tens of frames, this buffer
    can help to avoid underflow. HW will keep issuing new data fetch
    request when buffers are not full and current BDL is not done. When SW
    disable DMA RUN bit for a stream, HW can't cancel the already issued data
    fetch request and hence it can't stop DMA. HW has to wait for all issued
    data fetch request get data returned before it stops DMA.

    This HW behavior is not in sync with HDA spec which says DMA RUN bit
    should be cleared within 1 audio frame. For Tegra, DMA RUN bit was
    active for more than one audio frame, due to this the timeout in
    snd_hdac_stream_sync function is not helping. When Stream reset set
    and clear happens during DMA RUN bit active state it results in Memory
    Decode error.

    Unfortunately, there is no way to detect when these data accesses have
    completed, but testing has shown that a 100us delay between Stream reset
    set and clear operation for Tegra avoids the memory decode error.
    Therefore, adding a 100us dma stop delay.

    Signed-off-by: Mohan Kumar
    Link: https://lore.kernel.org/r/20200805095221.5476-4-mkumard@nvidia.com
    Signed-off-by: Takashi Iwai

    Mohan Kumar
     
  • A variable dma_stop_delay is added as a new member in hdac_bus
    structure to avoid memory decode error incase DMA RUN bit is not
    disabled in the given timeout from snd_hdac_stream_sync function and
    followed by stream reset which results in memory decode error between
    reset set and clear operation.

    Signed-off-by: Mohan Kumar
    Link: https://lore.kernel.org/r/20200805095221.5476-3-mkumard@nvidia.com
    Signed-off-by: Takashi Iwai

    Mohan Kumar
     
  • Set chip->align_buffer_size to 1 for Tegra platforms to make the buffer
    alignment to be multiple of 128 bytes. This fix is applied as gstreamer
    alsasink gets stuck with the default buffer-time and latency-time
    parameters with 4 byte buffer alignment.

    Signed-off-by: Mohan Kumar
    Link: https://lore.kernel.org/r/20200805095221.5476-2-mkumard@nvidia.com
    Signed-off-by: Takashi Iwai

    Mohan Kumar
     
  • Some ioctls via OSS sequencer API may race and lead to UAF when the
    port create and delete are performed concurrently, as spotted by a
    couple of syzkaller cases. This patch is an attempt to address it by
    serializing the ioctls with the existing register_mutex.

    Basically OSS sequencer API is an obsoleted interface and was designed
    without much consideration of the concurrency. There are very few
    applications with it, and the concurrent performance isn't asked,
    hence this "big hammer" approach should be good enough.

    Reported-by: syzbot+1a54a94bd32716796edd@syzkaller.appspotmail.com
    Reported-by: syzbot+9d2abfef257f3e2d4713@syzkaller.appspotmail.com
    Suggested-by: Hillf Danton
    Cc:
    Link: https://lore.kernel.org/r/20200804185815.2453-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • HDMI on some platforms doesn't enable audio support because its Port
    Connectivity [31:30] is set to AC_JACK_PORT_NONE:
    Node 0x05 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
    Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
    Amp-Out vals: [0x00 0x00]
    Pincap 0x0b000094: OUT Detect HBR HDMI DP
    Pin Default 0x58560010: [N/A] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
    Pin-ctls: 0x40: OUT
    Unsolicited: tag=00, enabled=0
    Power states: D0 D3 EPSS
    Power: setting=D0, actual=D0
    Devices: 0
    Connection: 3
    0x02 0x03* 0x04

    For now, use a quirk to force connectivity based on SSID. If there are
    more platforms affected by the same issue, we can eye for a more generic
    solution.

    Signed-off-by: Kai-Heng Feng
    Link: https://lore.kernel.org/r/20200804155836.16252-1-kai.heng.feng@canonical.com
    Signed-off-by: Takashi Iwai

    Kai-Heng Feng
     

04 Aug, 2020

1 commit


03 Aug, 2020

7 commits

  • Lenovo ThinkStation P620 is like other TRX40 boards, is equipped with
    two USB audio cards.

    USB device (17aa:104d) provides functionality for Internal Speaker and
    Front Headset. It's UAC v2, so it supports insertion control (jack
    detection). However, when trying to get the connector status of the
    speaker, an error occurs:
    [ 5.787405] usb 3-1: cannot get connectors status: req = 0x81, wValue = 0x200, wIndex = 0x1000, type = 0

    Since the insertion control works perfectly for the headset, the error
    for speaker is probably casued by connecting internally. So let's relax
    the error for a bit if it's a speaker, and always reports it's connected.

    USB device (17aa:1046) is for rear Line-in, Line-out and Microphone.
    The insertion control works for all three jacks. However, there's an
    Function Unit that doesn't work:
    [ 5.905415] usb 3-6: cannot get ctl value: req = 0x83, wValue = 0xc00, wIndex = 0x1300, type = 4
    [ 5.905418] usb 3-6: 19:0: cannot get min/max values for control 12 (id 19)

    So turn off the FU to avoid the error.

    Also, add specific card name for both devices, so userspace can easily
    indentify both cards.

    Signed-off-by: Kai-Heng Feng
    Link: https://lore.kernel.org/r/20200803142612.17156-1-kai.heng.feng@canonical.com
    Signed-off-by: Takashi Iwai

    Kai-Heng Feng
     
  • …/sound into for-linus

    ASoC: Updates for v5.9

    The biggest changes here one again come from Mormioto-san who has
    continued his dilligent work cleaning up long standing issues in the
    APIs, it's particularly nice to see the transition from digital_mute()
    to mute_stream() finally completed. There's also been a lot of work on
    the x86 code again, this time a big focus has been on cleaning up some
    issues identified by various static tests, and on the Freescale systems.
    Otherwise the biggest thing has been a lot of driver additions:

    - Convert users of digital_mute() to mute_stream().
    - Simplify I/O helper functions.
    - Add a helper for getting the RTD from a substream.
    - Many, many fixes and cleanups to the x86 code.
    - New drivers for Freescale MQS and i.MX6sx, Intel KeemBay I2S, Maxim
    MAX98360A and MAX98373 Soundwire, several Mediatek boards, nVidia
    Tegra 186 and 210, RealTek RL6231, Samsung Midas and Aries boards (some
    of the first phones I worked on!) and TI J721e EVM.

    Takashi Iwai
     
  • This reverts commit 9a6418487b56 ("ALSA: hda: call runtime_allow()
    for all hda controllers").

    The reverted patch already introduced some regressions on some
    machines:
    - on gemini-lake machines, the error of "azx_get_response timeout"
    happens in the hda driver.
    - on the machines with alc662 codec, the audio jack detection doesn't
    work anymore.

    Fixes: 9a6418487b56 ("ALSA: hda: call runtime_allow() for all hda controllers")
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=208511
    Cc:
    Signed-off-by: Hui Wang
    Link: https://lore.kernel.org/r/20200803064638.6139-1-hui.wang@canonical.com
    Signed-off-by: Takashi Iwai

    Hui Wang
     
  • The ca0113 command had the wrong group_id, 0x48 when it should've been
    0x30. The front microphone selection should now work.

    Signed-off-by: Connor McAdams
    Cc:
    Link: https://lore.kernel.org/r/20200803002928.8638-3-conmanx360@gmail.com
    Signed-off-by: Takashi Iwai

    Connor McAdams
     
  • Add a new quirk ID for the Recon3D, as tested by me.

    Signed-off-by: Connor McAdams
    Cc:
    Link: https://lore.kernel.org/r/20200803002928.8638-2-conmanx360@gmail.com
    Signed-off-by: Takashi Iwai

    Connor McAdams
     
  • When the ZxR headphone gain control was added, the ca0132_switch_get
    function was not updated, which meant that the changes to the control
    state were not saved when entering/exiting alsamixer.

    Signed-off-by: Connor McAdams
    Cc:
    Link: https://lore.kernel.org/r/20200803002928.8638-1-conmanx360@gmail.com
    Signed-off-by: Takashi Iwai

    Connor McAdams
     
  • Takashi Iwai
     

02 Aug, 2020

1 commit


01 Aug, 2020

12 commits

  • GFP_KRENEL -> GFP_KERNEL

    Signed-off-by: Julia Lawall

    Link: https://lore.kernel.org/r/1596224129-7699-1-git-send-email-Julia.Lawall@inria.fr
    Signed-off-by: Takashi Iwai

    Julia Lawall
     
  • CONFIG_PCM_XRUN_DEBUG should be CONFIG_SND_PCM_XRUN_DEBUG

    Signed-off-by: Julia Lawall

    Link: https://lore.kernel.org/r/1596223701-7558-1-git-send-email-Julia.Lawall@inria.fr
    Signed-off-by: Takashi Iwai

    Julia Lawall
     
  • Mark Brown
     
  • Mark Brown
     
  • …<cezary.rojewski@intel.com>:

    Provide a mechanism for true two-step component registration. This
    mimics device registration flow where initialization is the first step
    while addition goes as second in line. Drivers may choose to modify
    component's fields before registering component to ASoC subsystem via
    snd_soc_add_component.

    Patchset achieves status quo - behavior of snd_soc_register_component
    remains unchanged.

    Cezary Rojewski (3):
    ASoC: core: Relocate and expose snd_soc_component_initialize
    ASoC: core: Simplify snd_soc_component_initialize declaration
    ASoC: core: Two step component registration

    include/sound/soc-component.h | 3 --
    include/sound/soc.h | 11 +++---
    sound/soc/soc-component.c | 16 ---------
    sound/soc/soc-core.c | 52 +++++++++++++++++----------
    sound/soc/soc-generic-dmaengine-pcm.c | 14 +++++---
    sound/soc/stm/stm32_adfsdm.c | 9 +++--
    6 files changed, 55 insertions(+), 50 deletions(-)

    --
    2.17.1

    Mark Brown
     
  • Modify snd_soc_add_component so it calls snd_soc_component_initialize
    no longer and thus providing true two-step registration. Drivers may
    choose to change component's fields before actually adding it to ASoC
    subsystem.

    Signed-off-by: Cezary Rojewski
    Link: https://lore.kernel.org/r/20200731144146.6678-4-cezary.rojewski@intel.com
    Signed-off-by: Mark Brown

    Cezary Rojewski
     
  • Move 'name' field initialization responsibility back to
    snd_soc_component_initialize to prepare snd_soc_add_component function
    for being called separatelly as a second registration step.

    Signed-off-by: Cezary Rojewski
    Link: https://lore.kernel.org/r/20200731144146.6678-3-cezary.rojewski@intel.com
    Signed-off-by: Mark Brown

    Cezary Rojewski
     
  • To allow for two-step component registration, expose
    snd_soc_component_initialize function and move it back to soc-core.c.

    Signed-off-by: Cezary Rojewski
    Link: https://lore.kernel.org/r/20200731144146.6678-2-cezary.rojewski@intel.com
    Signed-off-by: Mark Brown

    Cezary Rojewski
     
  • Enabling a whole subsystem from a single driver 'select' is frowned
    upon and won't be accepted in new drivers, that need to use 'depends on'
    instead. Existing selection of DMADEVICES will then cause circular
    dependencies. Replace them with a dependency.

    Signed-off-by: Laurent Pinchart
    Acked-by: Randy Dunlap
    Link: https://lore.kernel.org/r/20200731152433.1297-3-laurent.pinchart@ideasonboard.com
    Signed-off-by: Mark Brown

    Laurent Pinchart
     
  • The fifo_depth is 64 on i.MX8QM/i.MX8QXP, 128 on i.MX8MQ, 16 on
    i.MX7ULP.

    Original FSL_SAI_CR1_RFW_MASK value 0x1F is not suitable for
    these platform, the FIFO watermark mask should be updated
    according to the fifo_depth.

    Fixes: a860fac42097 ("ASoC: fsl_sai: Add support for imx7ulp/imx8mq")
    Signed-off-by: Shengjiu Wang
    Reviewed-by: Fabio Estevam
    Link: https://lore.kernel.org/r/1596176895-28724-1-git-send-email-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown

    Shengjiu Wang
     
  • Commit b73287f0b074 ("ASoC: soc-pcm: dpcm: fix playback/capture checks")
    changed the meaning of dpcm_playback/dpcm_capture and now requires the
    CPU DAI BE to aligned with those flags.

    This broke all Amlogic cards with uni-directional backends (All gx and
    most axg cards).

    While I'm still confused as to how this change is an improvement, those
    cards can't remain broken forever. Hopefully, next time an API change is
    done like that, all the users will be updated as part of the change, and
    not left to fend for themselves.

    Fixes: b73287f0b074 ("ASoC: soc-pcm: dpcm: fix playback/capture checks")
    Signed-off-by: Jerome Brunet
    Link: https://lore.kernel.org/r/20200731120603.2243261-1-jbrunet@baylibre.com
    Signed-off-by: Mark Brown

    Jerome Brunet
     
  • Previous updates to set dailink capabilities and check dailink
    capabilities were based on a flawed assumption that all dais support
    the same capabilities as the dailink. This is true for TDM
    configurations but existing configurations use an amplifier and a
    capture device on the same dailink, and the tests would prevent the
    card from probing.

    This patch modifies the snd_soc_dai_link_set_capabilities()
    helper so that the dpcm_playback (resp. dpcm_capture) dailink
    capabilities are set if at least one dai supports playback (resp. capture).

    Likewise the checks are modified so that an error is reported only
    when dpcm_playback (resp. dpcm_capture) is set but none of the CPU
    DAIs support playback (resp. capture).

    Fixes: 25612477d20b5 ('ASoC: soc-dai: set dai_link dpcm_ flags with a helper')
    Fixes: b73287f0b0745 ('ASoC: soc-pcm: dpcm: fix playback/capture checks')
    Suggested-by: Jerome Brunet
    Signed-off-by: Pierre-Louis Bossart
    Link: https://lore.kernel.org/r/20200723180533.220312-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     

31 Jul, 2020

9 commits

  • The various list iterators are able to handle an empty list.
    The only effect of avoiding the loop is not initializing some
    index variables.
    Drop list_empty tests in cases where these variables are not
    used.

    The semantic patch that makes these changes is as follows:
    (http://coccinelle.lip6.fr/)

    @@
    expression x,e;
    iterator name list_for_each_entry;
    statement S;
    identifier i;
    @@

    -if (!(list_empty(x))) {
    list_for_each_entry(i,x,...) S
    - }
    ... when != i
    ? i = e

    @@
    expression x,e;
    iterator name list_for_each_entry_safe;
    statement S;
    identifier i,j;
    @@

    -if (!(list_empty(x))) {
    list_for_each_entry_safe(i,j,x,...) S
    - }
    ... when != i
    when != j
    (
    i = e;
    |
    ? j = e;
    )

    @@
    expression x,e;
    iterator name list_for_each;
    statement S;
    identifier i;
    @@

    -if (!(list_empty(x))) {
    list_for_each(i,x) S
    - }
    ... when != i
    ? i = e

    @@
    expression x,e;
    iterator name list_for_each_safe;
    statement S;
    identifier i,j;
    @@

    -if (!(list_empty(x))) {
    list_for_each_safe(i,j,x) S
    - }
    ... when != i
    when != j
    (
    i = e;
    |
    ? j = e;
    )

    // -------------------

    @@
    expression x,e;
    statement S;
    identifier i;
    @@

    -if (!(list_empty(x)))
    list_for_each_entry(i,x,...) S
    ... when != i
    ? i = e

    @@
    expression x,e;
    statement S;
    identifier i,j;
    @@

    -if (!(list_empty(x)))
    list_for_each_entry_safe(i,j,x,...) S
    ... when != i
    when != j
    (
    i = e;
    |
    ? j = e;
    )

    @@
    expression x,e;
    statement S;
    identifier i;
    @@

    -if (!(list_empty(x)))
    list_for_each(i,x) S
    ... when != i
    ? i = e

    @@
    expression x,e;
    statement S;
    identifier i,j;
    @@

    -if (!(list_empty(x)))
    list_for_each_safe(i,j,x) S
    ... when != i
    when != j
    (
    i = e;
    |
    ? j = e;
    )

    ---

    drivers/media/pci/saa7134/saa7134-core.c | 14 ++---
    drivers/media/usb/cx231xx/cx231xx-core.c | 16 ++----
    drivers/media/usb/tm6000/tm6000-core.c | 24 +++-------
    drivers/net/ethernet/mellanox/mlx5/core/steering/dr_matcher.c | 13 ++---
    drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c | 5 --
    drivers/net/ethernet/sfc/ptp.c | 20 +++-----
    drivers/net/wireless/ath/dfs_pattern_detector.c | 15 ++----
    sound/soc/intel/atom/sst/sst_loader.c | 10 +---
    sound/soc/intel/skylake/skl-pcm.c | 8 +--
    sound/soc/intel/skylake/skl-topology.c | 5 --
    10 files changed, 53 insertions(+), 77 deletions(-)

    Mark Brown
     
  • PulseAudio (and perhaps other userspace utilities) can not detect any
    jack for rk3399_gru_sound as the driver doesn't expose related Jack
    kcontrols.

    This patch adds two DAPM pins to the headset jack, where the
    snd_soc_card_jack_new() call automatically creates "Headphones Jack" and
    "Headset Mic Jack" kcontrols from them.

    With an appropriate ALSA UCM config specifying JackControl fields for
    the "Headphones" and "Headset" (mic) devices, PulseAudio can detect
    plug/unplug events for both of them after this patch.

    Signed-off-by: Alper Nebi Yasak
    Link: https://lore.kernel.org/r/20200721182709.6895-1-alpernebiyasak@gmail.com
    Signed-off-by: Mark Brown

    Alper Nebi Yasak
     
  • According to the WM8962 datasheet, there is no register at address 0x200.

    WM8962_GPIO_BASE is just a base address for the GPIO registers and not a
    real register, so remove it from wm8962_readable_register().

    Also, Register 515 (WM8962_GPIO_BASE + 3) does not exist, so skip
    its access.

    This fixes the following errors:

    wm8962 0-001a: ASoC: error at soc_component_read_no_lock on wm8962.0-001a: -16
    wm8962 0-001a: ASoC: error at soc_component_read_no_lock on wm8962.0-001a: -16

    Signed-off-by: Fabio Estevam
    Acked-by: Charles Keepax
    Link: https://lore.kernel.org/r/20200717135959.19212-1-festevam@gmail.com
    Signed-off-by: Mark Brown

    Fabio Estevam
     
  • Use resource_size rather than a verbose computation on
    the end and start fields.

    The semantic patch that makes this change is as follows:
    (http://coccinelle.lip6.fr/)

    @@ struct resource ptr; @@
    - (ptr.end - ptr.start + 1)
    + resource_size(&ptr)

    Signed-off-by: Julia Lawall
    Link: https://lore.kernel.org/r/1595751933-4952-1-git-send-email-Julia.Lawall@inria.fr
    Signed-off-by: Mark Brown

    Julia Lawall
     
  • list_for_each_entry_safe is able to handle an empty list.
    The only effect of avoiding the loop is not initializing the
    index variable.
    Drop list_empty tests in cases where these variables are not
    used.

    Note that list_for_each_entry_safe is defined in terms of
    list_first_entry, which indicates that it should not be used on an
    empty list. But in list_for_each_entry_safe, the element obtained by
    list_first_entry is not really accessed, only the address of its
    list_head field is compared to the address of the list head, so the
    list_first_entry is safe.

    The semantic patch that makes this change is as follows (with another
    variant for the no brace case): (http://coccinelle.lip6.fr/)

    @@
    expression x,e;
    iterator name list_for_each_entry_safe;
    statement S;
    identifier i,j;
    @@
    -if (!(list_empty(x))) {
    list_for_each_entry_safe(i,j,x,...) S
    - }
    ... when != i
    when != j
    (
    i = e;
    |
    ? j = e;
    )

    Signed-off-by: Julia Lawall
    Link: https://lore.kernel.org/r/1595761112-11003-2-git-send-email-Julia.Lawall@inria.fr
    Signed-off-by: Mark Brown

    Julia Lawall
     
  • …g <michael.wei.hong.sit@intel.com>:

    This patch series is to enable multiple features on the Keembay Platform

    Michael Sit Wei Hong (4):
    ASoC: Intel: KMB: Add 8kHz audio support
    ASoC: Intel: KMB: Rework disable channel function
    ASoC: Intel: KMB: Enable TDM audio capture
    dt-bindings: sound: intel,keembay-i2s: Add channel-max property

    .../bindings/sound/intel,keembay-i2s.yaml | 8 +
    sound/soc/intel/keembay/kmb_platform.c | 137 +++++++++++++-----
    sound/soc/intel/keembay/kmb_platform.h | 1 +
    3 files changed, 112 insertions(+), 34 deletions(-)

    --
    2.17.1

    Mark Brown
     
  • This patcheset is collection of fixes for the TDM input and output the
    axg audio architecture. Its fixes:
    - slave mode format setting
    - g12 and sm1 skew offset
    - tdm clock inversion
    - standard daifmt props names which don't require a specific prefix

    Jerome Brunet (4):
    ASoC: meson: axg-tdm-interface: fix link fmt setup
    ASoC: meson: axg-tdmin: fix g12a skew
    ASoC: meson: axg-tdm-formatters: fix sclk inversion
    ASoC: meson: cards: remove DT_PREFIX for standard daifmt properties

    sound/soc/meson/axg-tdm-formatter.c | 11 ++++++-----
    sound/soc/meson/axg-tdm-formatter.h | 1 -
    sound/soc/meson/axg-tdm-interface.c | 26 +++++++++++++++++---------
    sound/soc/meson/axg-tdmin.c | 16 +++++++++++++++-
    sound/soc/meson/axg-tdmout.c | 3 ---
    sound/soc/meson/meson-card-utils.c | 2 +-
    6 files changed, 39 insertions(+), 20 deletions(-)

    --
    2.25.4

    Mark Brown
     
  • This patch switches from .txt base to .yaml base Document.

    Signed-off-by: Kuninori Morimoto
    Reviewed-by: Rob Herring
    Link: https://lore.kernel.org/r/87mu4cxlo2.wl-kuninori.morimoto.gx@renesas.com
    Link: https://lore.kernel.org/r/87o8pf3923.wl-kuninori.morimoto.gx@renesas.com
    Link: https://lore.kernel.org/r/873659bpbk.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • Adding rt1015 hw_params which set Bit-clock ratio,
    PLL and appropriate sys clk specific with RTK1015.

    Signed-off-by: Ravulapati Vishnu vardhan rao
    Link: https://lore.kernel.org/r/20200728160255.31020-6-Vishnuvardhanrao.Ravulapati@amd.com
    Signed-off-by: Mark Brown

    Ravulapati Vishnu vardhan rao