1. 19 3月, 2019 2 次提交
  2. 18 3月, 2019 13 次提交
  3. 16 3月, 2019 1 次提交
  4. 14 3月, 2019 4 次提交
  5. 13 3月, 2019 11 次提交
  6. 12 3月, 2019 9 次提交
    • L
      ASoC: axi-i2s: let both capture and playback be optional · 7bf7d055
      Luca Ceresoli 提交于
      Both the capture and playback channels are optional in the axi_i2s IP
      block. Reflect this in the driver by enabling only the channel(s) that
      have a DMA.
      Signed-off-by: NLuca Ceresoli <luca@lucaceresoli.net>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      7bf7d055
    • J
      ASoC: rsnd: src: fix compiler warnings · 399706df
      Jiada Wang 提交于
      compiler complains about following declarations
      
      sound/soc/sh/rcar/src.c:174:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
       const static u32 bsdsr_table_pattern1[] = {
       ^~~~~
      sound/soc/sh/rcar/src.c:183:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
       const static u32 bsdsr_table_pattern2[] = {
       ^~~~~
      sound/soc/sh/rcar/src.c:192:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
       const static u32 bsisr_table[] = {
       ^~~~~
      sound/soc/sh/rcar/src.c:201:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
       const static u32 chan288888[] = {
       ^~~~~
      sound/soc/sh/rcar/src.c:210:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
       const static u32 chan244888[] = {
       ^~~~~
      sound/soc/sh/rcar/src.c:219:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
       const static u32 chan222222[] = {
       ^~~~~
      
      This patch moves the 'static' keyword to the front of the
      declaration to fix the compiler warnings
      
      Fixes: linux-next commit 7674bec4 ("ASoC: rsnd: update BSDSR/BSDISR handling")
      Signed-off-by: NJiada Wang <jiada_wang@mentor.com>
      Acked-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      399706df
    • J
      ASoC: rsnd: src: Avoid a potential deadlock · ba164a49
      Jiada Wang 提交于
      lockdep warns us that priv->lock and k->k_lock can cause a
      deadlock when after acquire of k->k_lock, process is interrupted
      by src, while in another routine of src .init, k->k_lock is
      acquired with priv->lock held.
      
      This patch avoids a potential deadlock by not calling soc_device_match()
      in SRC .init callback, instead it adds new soc fields in priv->flags to
      differentiate SoCs.
      
      Fixes: linux-next commit 7674bec4 ("ASoC: rsnd: update BSDSR/BSDISR handling")
      Signed-off-by: NJiada Wang <jiada_wang@mentor.com>
      Acked-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      ba164a49
    • O
      ASoC: stm32: i2s: fix registers declaration in regmap · a39fe6e2
      Olivier Moysan 提交于
      - Declare SR as volatile, as it is changed by hardware.
      - Remove TXDR from readable and volatile register list,
      as it is intended for write accesses only.
      Signed-off-by: NOlivier Moysan <olivier.moysan@st.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      a39fe6e2
    • J
      ASoC: nau8824: fix the issue of the widget with prefix name · 844a4a36
      John Hsu 提交于
      The driver has two issues when machine add prefix name for codec.
      (1)The stream name of DAI can't find the AIF widgets.
      (2)The drivr can enable/disalbe the MICBIAS and SAR widgets.
      
      The patch will fix these issues caused by prefixed name added.
      Signed-off-by: NJohn Hsu <KCHSU0@nuvoton.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      844a4a36
    • K
      ASoC: dpcm: prevent snd_soc_dpcm use after free · a9764869
      KaiChieh Chuang 提交于
      The dpcm get from fe_clients/be_clients
      may be free before use
      
      Add a spin lock at snd_soc_card level,
      to protect the dpcm instance.
      The lock may be used in atomic context, so use spin lock.
      
      Use irq spin lock version,
      since the lock may be used in interrupts.
      
      possible race condition between
      void dpcm_be_disconnect(
      	...
      	list_del(&dpcm->list_be);
      	list_del(&dpcm->list_fe);
      	kfree(dpcm);
      	...
      
      and
      	for_each_dpcm_fe()
      	for_each_dpcm_be*()
      
      race condition example
      Thread 1:
          snd_soc_dapm_mixer_update_power()
              -> soc_dpcm_runtime_update()
                  -> dpcm_be_disconnect()
                      -> kfree(dpcm);
      Thread 2:
          dpcm_fe_dai_trigger()
              -> dpcm_be_dai_trigger()
                  -> snd_soc_dpcm_can_be_free_stop()
                      -> if (dpcm->fe == fe)
      
      Excpetion Scenario:
      	two FE link to same BE
      	FE1 -> BE
      	FE2 ->
      
      	Thread 1: switch of mixer between FE2 -> BE
      	Thread 2: pcm_stop FE1
      
      Exception:
      
      Unable to handle kernel paging request at virtual address dead0000000000e0
      
      pc=<> [<ffffff8960e2cd10>] dpcm_be_dai_trigger+0x29c/0x47c
      	sound/soc/soc-pcm.c:3226
      		if (dpcm->fe == fe)
      lr=<> [<ffffff8960e2f694>] dpcm_fe_dai_do_trigger+0x94/0x26c
      
      Backtrace:
      [<ffffff89602dba80>] notify_die+0x68/0xb8
      [<ffffff896028c7dc>] die+0x118/0x2a8
      [<ffffff89602a2f84>] __do_kernel_fault+0x13c/0x14c
      [<ffffff89602a27f4>] do_translation_fault+0x64/0xa0
      [<ffffff8960280cf8>] do_mem_abort+0x4c/0xd0
      [<ffffff8960282ad0>] el1_da+0x24/0x40
      [<ffffff8960e2cd10>] dpcm_be_dai_trigger+0x29c/0x47c
      [<ffffff8960e2f694>] dpcm_fe_dai_do_trigger+0x94/0x26c
      [<ffffff8960e2edec>] dpcm_fe_dai_trigger+0x3c/0x44
      [<ffffff8960de5588>] snd_pcm_do_stop+0x50/0x5c
      [<ffffff8960dded24>] snd_pcm_action+0xb4/0x13c
      [<ffffff8960ddfdb4>] snd_pcm_drop+0xa0/0x128
      [<ffffff8960de69bc>] snd_pcm_common_ioctl+0x9d8/0x30f0
      [<ffffff8960de1cac>] snd_pcm_ioctl_compat+0x29c/0x2f14
      [<ffffff89604c9d60>] compat_SyS_ioctl+0x128/0x244
      [<ffffff8960283740>] el0_svc_naked+0x34/0x38
      [<ffffffffffffffff>] 0xffffffffffffffff
      Signed-off-by: NKaiChieh Chuang <kaichieh.chuang@mediatek.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      a9764869
    • R
      ASoC:intel:skl:fix a simultaneous playback & capture issue on hda platform · c899df3e
      Rander Wang 提交于
      If playback and capture are enabled concurrently, when the capture stops
      the output becomes inaudile. The playback application will become stuck
      and underrun after a timeout.
      
      This is caused by mistaken use of the stream_id, which should only be
      set for playback and not for capture
      
      Tested on Apollolake and Kabylake with SST driver.
      Signed-off-by: NRander Wang <rander.wang@linux.intel.com>
      Acked-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      c899df3e
    • R
      ASoC:hdac_hda:use correct format to setup hda codec · 03d0aa4d
      Rander Wang 提交于
      The current implementation of the hdac_hda codec results in zero-valued
      samples on capture and noise with headset playback when SOF is used on
      platforms with an on-board HDaudio codec. This is root-caused to SOF
      using be_hw_params_fixup, and the prepare() call using invalid runtime
      fields to determine the format.
      
      This patch moves the format handling to the hw_params() callback, as
      done already for hdac_hdmi, to make sure the fixed-up information is
      taken into account but keeps the codec initialization in prepare() as
      the stream_tag is only available at that time. Moving everything in the
      prepare() callback is possible but the code is less elegant so this
      two-step solution was chosen.
      
      The solution was tested with the SST driver with no regressions, and all
      the issues with SOF playback and capture are solved.
      Signed-off-by: NRander Wang <rander.wang@linux.intel.com>
      Acked-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      03d0aa4d
    • R
      ASoC:soc-pcm:fix a codec fixup issue in TDM case · 570f18b6
      Rander Wang 提交于
      On HDaudio platforms, if playback is started when capture is working,
      there is no audible output.
      
      This can be root-caused to the use of the rx|tx_mask to store an HDaudio
      stream tag.
      
      If capture is stared before playback, rx_mask would be non-zero on HDaudio
      platform, then the channel number of playback, which is in the same codec
      dai with the capture, would be changed by soc_pcm_codec_params_fixup based
      on the tx_mask at first, then overwritten by this function based on rx_mask
      at last.
      
      According to the author of tx|rx_mask, tx_mask is for playback and rx_mask
      is for capture. And stream direction is checked at all other references of
      tx|rx_mask in ASoC, so here should be an error. This patch checks stream
      direction for tx|rx_mask for fixup function.
      
      This issue would affect not only HDaudio+ASoC, but also I2S codecs if the
      channel number based on rx_mask is not equal to the one for tx_mask. It could
      be rarely reproduecd because most drivers in kernel set the same channel number
      to tx|rx_mask or rx_mask is zero.
      
      Tested on all platforms using stream_tag & HDaudio and intel I2S platforms.
      Signed-off-by: NRander Wang <rander.wang@linux.intel.com>
      Acked-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      570f18b6