Pavel Dobias [Fri, 22 May 2020 14:29:57 +0000 (16:29 +0200)]
ASoC: max9867: keep ADCs and DACs always on
Updating power management register requires toggling the shutdown
bit otherwise it causes unexpected behavior of the codec.
However, toggling the shutdown bit results in loud speaker crackling.
Setup the power management register only at startup to avoid that.
Pavel Dobias [Wed, 20 May 2020 07:19:00 +0000 (09:19 +0200)]
ASoC: max9867: don't use regmap defaults
MAX9867 codec doesn't have reset pin, so the registers don't
have default values in the case of reboot without powering off.
Remove the reg_defaults struct and let the regmap read initial
state of the registers at startup instead of taking them from
reg_defaults struct.
Lubomir Rintel [Mon, 11 May 2020 21:01:34 +0000 (23:01 +0200)]
ASoC: mmp-sspa: Add Device Tree support
This makes it possible to select CONFIG_SND_MMP_SOC_SSPA directly, as
opposed to via CONFIG_SND_MMP_SOC, and for the driver to bind to a device
tree node. That makes the driver useful on Device Tree based systems,
with audio-graph-card or simple-card.
The aforementioned card drivers control the master clock themselves and
don't call the set_dai_sysclk() or set_dai_pll(), thus the respective
handlers don't serve any purpose anymore. Instead, they return early and
the hw_params() handler sets the appropriate bitclk itself.
The register range is split into two -- for the RX block and for the TX
block. On a MMP2 there are two pairs of them; the first one has the
clock controller in the middle, while the second just has a hole:
Shengjiu Wang [Tue, 12 May 2020 10:22:59 +0000 (18:22 +0800)]
ASoC: fsl_asrc: Set ASR76K and ASR56K based on processing clock
The processing clock is different for platforms, so it is better
to set ASR76K and ASR56K based on processing clock, rather than
hard coding the value for them.
Vijendar Mukunda [Mon, 18 May 2020 17:16:55 +0000 (01:16 +0800)]
ASoC: amd: add ACP3x PDM platform driver
PDM platform driver binds to the platform device created by
ACP3x PCI device. PDM driver registers ALSA DMA and CPU DAI
components with ASoC framework.
Vijendar Mukunda [Mon, 18 May 2020 17:16:54 +0000 (01:16 +0800)]
ASoC: amd: create acp3x pdm platform device
ACP 3x IP has PDM decoder as one of IP blocks.
Create a platform device for it, so that the PDM platform driver
can be bound to this device.
Pass PCI resources like MMIO, irq to this platform device.
Hans de Goede [Mon, 18 May 2020 07:24:16 +0000 (09:24 +0200)]
ASoC: Intel: bytcr_rt5640: Add quirk for Toshiba Encore WT8-A tablet
The Toshiba Encore WT8-A tablet almost fully works with the default
settings for non-CR Bay Trail devices. The only problem is that its
jack-detect switch is not inverted (it is active high instead of
the normal active low).
Add a quirk for this model using the default settings +
BYT_RT5640_JD_NOT_INV.
Mark Brown [Mon, 18 May 2020 15:43:50 +0000 (16:43 +0100)]
Merge series "ASoC: SOF: Intel and IMX updates for 5.8" from Kai Vehmanen <kai.vehmanen@linux.intel.com>:
Hi,
here's a series of minor fixes and improvements to SOF. Add support
for smart amplifier component type. Cover more systems by relaxing
match rules for the generic Soundwire machine driver. Fix issues with
driver unload and address a few compiler warnings.
Daniel Baluta (2):
ASoC: SOF: Do nothing when DSP PM callbacks are not set
ASoC: SOF: define INFO_ flags in dsp_ops
Keyon Jie (1):
ASoC: SOF: topology: add support to smart amplifier
Marcin Rajwa (2):
ASoC: SOF: add a power_down_notify method
ASoC: SOF: inform DSP that driver is going to be removed
Pierre-Louis Bossart (2):
ASoC: SOF: imx: make dsp_ops static
ASoC: SOF: imx: make imx8m_dsp_ops static
Mark Brown [Mon, 18 May 2020 15:43:49 +0000 (16:43 +0100)]
Merge series "ASoC: cleanup DAI/Component activity" from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>:
Hi Mark
These are v3 of DAI/Component activity cleanup.
This patch-set exchanges soc-dapm.c :: snd_soc_dai_link_event_xxx()
behavior which updates dai->active but not cares other actives.
But I think original code was wrong.
So, I believe these works correctly, but maybe need some tests or deep review.
v1 -> v2
- function naming "activity" -> "active"
v2 -> v3
- macro -> inline function
- added Reviewed-by from Ranjani, Acked-by from Peter
Link: https://lore.kernel.org/r/875zd39frp.wl-kuninori.morimoto.gx@renesas.com Link: https://lore.kernel.org/r/87blmq9alx.wl-kuninori.morimoto.gx@renesas.com
Kuninori Morimoto (21):
ASoC: soc-pcm: replace snd_soc_runtime_activate()/deactivate() to macro
ASoC: soc-dai: add snd_soc_dai_action()
ASoC: soc-dapm: use snd_soc_dai_activate()/deactivate()
ASoC: soc-dai: add snd_soc_dai_active()
ASoC: soc-component: add snd_soc_component_active()
ASoC: soc-dai: add snd_soc_dai_stream_active()
ASoC: use snd_soc_xxx_active()
ASoC: atomel: use snd_soc_xxx_active()
ASoC: bcm: use snd_soc_xxx_active()
ASoC: cirrus: use snd_soc_xxx_active()
ASoC: codecs: use snd_soc_xxx_active()
ASoC: fsl: use snd_soc_xxx_active()
ASoC: intel: use snd_soc_xxx_active()
ASoC: jz4740: use snd_soc_xxx_active()
ASoC: mediatek: use snd_soc_xxx_active()
ASoC: meson: use snd_soc_xxx_active()
ASoC: pxa: use snd_soc_xxx_active()
ASoC: ti: use snd_soc_xxx_active()
ASoC: uniphier: use snd_soc_xxx_active()
ASoC: dwc: use snd_soc_xxx_active()
ASoC: cleanup dai / component active code
Mark Brown [Mon, 18 May 2020 15:43:48 +0000 (16:43 +0100)]
Merge series "ASoC: codecs: rt*-sdw: memory leaks and simplifications" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
While debugging unrelated memory corruption errors, I detected issues
related to the interaction with the SoundWire and ASoC cores, here are
3 small patches to fix all this.
Mark Brown [Mon, 18 May 2020 15:43:46 +0000 (16:43 +0100)]
Merge series "ASoC: Intel: minor fixes to machine drivers" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
Minor button remap changes, inspired by recent Chromebook patches,
typo in component string reported by Jaroslav and driver name change
not submitted in last wm8804 contribution.
Pierre-Louis Bossart (5):
ASoC: Intel: soc-acpi: change machine driver name for WM8804 platforms
ASoC: Intel: sof_sdw: fix typo in components string
ASoC: Intel: sof_sdw_rt711: remap buttons
ASoC: Intel: sof_sdw_rt700: remap buttons
ASoC: Intel: cht_bsw_nau8824: remap BTN_0 as KEY_PLAYPAUSE
Mark Brown [Mon, 18 May 2020 15:43:45 +0000 (16:43 +0100)]
Merge series "ASoC: da7213: support for usage with simple-card" from Sebastian Reichel <sebastian.reichel@collabora.com>:
Hi,
This extends the da7213 driver to be used with simple-audio-card in
combination with a fixed clock. Here is a snippet of the downstream
board's DT, that is supposed to be supported by this patchset.
This is mostly a resend of PATCHv2. There was quite a bit of discussion
for the last patch. As far as I can see no better solution was found and
the patch is fine as is. Sorry for the delay in sending another revision.
Changes since PATCHv2:
* https://lore.kernel.org/alsa-devel/20191120152406.2744-1-sebastian.reichel@collabora.com/
* dropped patch converting DA7213 into selectable Kconfig option (merged)
* fix compatible string in patch 1 (DT binding) as pointed out by Adam Thomson
* collected Reviewed-by from Adam Thomson for patch 2-4
Changes since PATCHv1:
* https://lore.kernel.org/alsa-devel/20191108174843.11227-1-sebastian.reichel@collabora.com/
* add patch adding da7212 compatible to DT bindings
* update regulator patch, so that VDDA is enabled together with VDDIO
while the device is enabled to avoid device reset
* update clock patch, so that automatic PLL handling is not enabled
when PLL is configured manually
* update clock patch, so that automatic PLL is disabled when the device
is suspended
* update clock patch, so that automatic PLL is configured into bypass
mode when possible
-- Sebastian
Sebastian Reichel (5):
ASoC: da7213: Add da7212 DT compatible
ASoC: da7213: Add regulator support
ASoC: da7213: move set_sysclk to codec level
ASoC: da7213: move set_pll to codec level
ASoC: da7213: add default clock handling
ASoC: soc-dapm: use snd_soc_dai_activate()/deactivate()
soc-dapm.c :: snd_soc_dai_link_event_pre_pmu() / snd_soc_dai_link_event()
are directly updating dai->active without caring about
stream_active / component->active.
It is breaking xxx_active count balance.
This patch uses snd_soc_dai_action() for it.
snd_soc_runtime_action() updates DAI's xxx_active.
We should update these in the same time, and
it can be implemented at soc-dai.c.
This patch adds snd_soc_dai_action() for it.
This is prepare for xxx_active cleanup.
ASoC: soc-pcm: replace snd_soc_runtime_activate()/deactivate() to macro
snd_soc_runtime_activate()/deactivate() are implemented by global function
which are just calling snd_soc_runtime_action().
We can replace it to macro, and this patch do it.
This patch is prepare for xxx_active cleanup.
This adds support for most regulators of da7212 for improved
power management. The only thing skipped was the speaker supply,
which has some undocumented dependencies. It's supposed to be
either always-enabled or always-disabled.
ASoC: Intel: sof_sdw: fix typo in components string
The component string attributes are separated by spaces, not commas.
Fixes: b1ca2f63e20b4 ("ASoC: Intel: sof_sdw: add amp number in components string for ucm") Reported-by: Jaroslav Kysela <perex@perex.cz> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20200515210731.10942-3-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Daniel Baluta [Fri, 15 May 2020 13:59:56 +0000 (16:59 +0300)]
ASoC: SOF: define INFO_ flags in dsp_ops
In the past, the INFO_ flags such as PAUSE/NO_PERIOD_WAKEUP were
defined in the SOF PCM core, but that was changed since
commit 27e322fabd508b ("ASoC: SOF: define INFO_ flags in dsp_ops")
Now these flags must be set in DSP ops.
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-7-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
On some platforms such as Up Extreme all links are enabled but only one
link can be used by external codec. Instead of exact match of two masks,
first check whether link_mask of mach is subset of link_mask supported
by hw and then go on searching link_adr.
Signed-off-by: randerwang <rander.wang@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-6-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Keyon Jie [Fri, 15 May 2020 13:59:54 +0000 (16:59 +0300)]
ASoC: SOF: topology: add support to smart amplifier
Add smart amplifier component support, which is designed as another new
type of process component and used for speaker protection algorithm
integration.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-5-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Marcin Rajwa [Fri, 15 May 2020 13:59:53 +0000 (16:59 +0300)]
ASoC: SOF: inform DSP that driver is going to be removed
This patch invokes the DSP power down notifier to inform
DSP that driver is going to be removed.
The module removal entails DSP power down, disabling of
IRQs and more. Therefore it is highly recommended to inform
the DSP about this upcoming event.
Due to hardware limitations on some Intel platforms it is necessary
to power gate all LPSRAM banks that were enabled prior to controller
reset. Otherwise, an attempt to write LPSRAM control registers may
have no effect.
Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-4-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Marcin Rajwa [Fri, 15 May 2020 13:59:52 +0000 (16:59 +0300)]
ASoC: SOF: add a power_down_notify method
This patch adds a snd_sof_dsp_power_down_notify() method which aims to
prepare the DSP for the upcoming power down.
This new function make use of SOF_IPC_PM_CTX_SAVE message.
Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-3-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Daniel Baluta [Fri, 15 May 2020 13:59:51 +0000 (16:59 +0300)]
ASoC: SOF: Do nothing when DSP PM callbacks are not set
This provides a better separation between runtime and PM sleep
callbacks.
Only do nothing if given runtime flag is set and calback is not set.
With the current implementation, if PM sleep callback is set but runtime
callback is not set then at runtime resume we reload the firmware even
if we do not support runtime resume callback.
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-2-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
The .read_prop callback is supposed to be called by the SoundWire core
only. Calling it again from this driver results in an additional
memory allocation for no good reason.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Cc: Oder Chiou <oder_chiou@realtek.com> Cc: Shuming Fan <shumingf@realtek.com> Cc: Jack Yu <jack.yu@realtek.com> Link: https://lore.kernel.org/r/20200515211531.11416-4-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
ASoC: codecs: rt*-sdw: fix memory leak in set_sdw_stream()
Now that the sdw_stream is allocated in machine driver,
set_sdw_stream() is also called with a NULL argument during the
dailink shutdown.
In this case, the drivers should not allocate any memory, and just
return.
Detected with KASAN/kmemleak.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Cc: Oder Chiou <oder_chiou@realtek.com> Cc: Shuming Fan <shumingf@realtek.com> Cc: Jack Yu <jack.yu@realtek.com> Link: https://lore.kernel.org/r/20200515211531.11416-3-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
The SoundWire bus core already assigns the slave ops, no need to set
them a second time manually in each driver.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Cc: Oder Chiou <oder_chiou@realtek.com> Cc: Shuming Fan <shumingf@realtek.com> Cc: Jack Yu <jack.yu@realtek.com> Link: https://lore.kernel.org/r/20200515211531.11416-2-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Ard Biesheuvel [Fri, 15 May 2020 10:03:09 +0000 (12:03 +0200)]
ASoC: cros_ec_codec: switch to library API for SHA-256
The CrOS EC codec driver uses SHA-256 explicitly, and not in a
performance critical manner, so there is really no point in using
the SHASH crypto API here. Let's switch to the library API instead.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Tzung-Bi Shih <tzungbi@google.com> Cc: Cheng-Yi Chiang <cychiang@chromium.org> Cc: Enric Balletbo i Serra <enric.balletbo@collabora.com> Cc: Guenter Roeck <groeck@chromium.org> Cc: Benson Leung <bleung@chromium.org> Cc: Liam Girdwood <lgirdwood@gmail.com> Cc: Mark Brown <broonie@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Eric Biggers <ebiggers@kernel.org> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Tzung-Bi Shih <tzungbi@google.com> Link: https://lore.kernel.org/r/20200515100309.20795-1-ardb@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
Shengjiu Wang [Fri, 15 May 2020 10:10:50 +0000 (18:10 +0800)]
ASoC: fsl_esai: introduce SoC specific data
Introduce a SoC specific data structure which contains the
differences between the different SoCs.
This makes it easier to support more differences without having
to introduce a new if/else each time.
Dan Murphy [Thu, 14 May 2020 12:33:36 +0000 (07:33 -0500)]
ASoC: tlv320adcx140: Add controls for PDM clk
Add ALSA controls to configure the PDM clocks.
The clocks need to be configurable to accommodate various microphones
that use clocks for low power/low resolution modes to high power/high
resolution modes.
Dan Murphy [Wed, 13 May 2020 14:28:07 +0000 (09:28 -0500)]
ASoC: tlv320adcx140: Fix bias config values
The device tree binding declares the ti,mic-bias-source and the
ti,vref-source properties as u32. The code reads them as u8 which is
incorrect. Since the device tree binding indicates them as u32 the
conde needs to be updated to read u32.
In addition the bias source needs to be shifted 4 bits to
correctly write the register.
Shengjiu Wang [Wed, 13 May 2020 05:30:35 +0000 (13:30 +0800)]
ASoC: wm8962: Use force clear for WM8962_SYSCLK_ENA after reset
When CLOCKING2 is non-volatile register, we need force clear
the WM8962_SYSCLK_ENA bit after reset, for the value in cache
maybe 0 but in hardware it is 1. Otherwise there will issue
as below statement in driver.
/* SYSCLK defaults to on; make sure it is off so we can safely
* write to registers if the device is declocked.
Lubomir Rintel [Mon, 11 May 2020 21:01:32 +0000 (23:01 +0200)]
ASoC: mmp-sspa: Set appropriate bus format for given bit width
The values set by set_dai_fmt() and hw_params() seem to be tailored only
for 32-bit formats. Negotiate the correct ones in hw_params() callback
instead.
This was essentially copied from the OLPC kernel driver and tested to
fix wrong audio output for non-32bit formats. The documentation is not
available.
Lubomir Rintel [Mon, 11 May 2020 21:01:29 +0000 (23:01 +0200)]
ASoC: mmp-sspa: Remove the embedded struct ssp_device
The "serial port" it represents is actually a SPI controller -- it's not
clear why would the audio serial interface embed it. We're only using
the mmio_base and clk fields.
Lubomir Rintel [Mon, 11 May 2020 21:01:28 +0000 (23:01 +0200)]
ASoC: mmp-sspa: Add support for soc-generic-dmaengine-pcm
This makes the driver usable with the mmp_tdma drier via
soc-generic-dmaengine-pcm. This is conditionalized on DT node (support
for DT is added by a later patch).
A custom mmap callback that creates a NC mapping is used instead of the
default WC one, because with write-combining some bytes don't seem to
make it through for reasons unknown to me.
Lubomir Rintel [Mon, 11 May 2020 21:01:27 +0000 (23:01 +0200)]
ASoC: mmp-sspa: Get rid of dma_params and phys_base
This makes things simpler. There's no reason not to just embed the struct
snd_dmaengine_dai_dma_data in struct sspa_priv and do away with an
unnecessary kmalloc(). While at that, we can initialize the
snd_dmaengine_dai_dma_data structures earlier.
Let's also stop offsetting the source/destination of the DMA transfer by
phys_base. Firstly, it's never set and is always zero. Secondly, the
hardware actually ignores it, at least on a MMP2 and MMP3.