From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Olivier Moysan <olivier.moysan@st.com>,
Mark Brown <broonie@kernel.org>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH AUTOSEL 4.19 14/53] ASoC: stm32: dfsdm: manage multiple prepare
Date: Fri, 26 Apr 2019 21:40:11 -0400 [thread overview]
Message-ID: <20190427014051.7522-14-sashal@kernel.org> (raw)
In-Reply-To: <20190427014051.7522-1-sashal@kernel.org>
From: Olivier Moysan <olivier.moysan@st.com>
[ Upstream commit 19441e35a43b616ea6afad91ed0d9e77268d8f6a ]
The DFSDM must be stopped when a new setting is applied.
restart systematically DFSDM on multiple prepare calls,
to apply changes.
Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/stm/stm32_adfsdm.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c
index 706ff005234f..71d341b732a4 100644
--- a/sound/soc/stm/stm32_adfsdm.c
+++ b/sound/soc/stm/stm32_adfsdm.c
@@ -9,6 +9,7 @@
#include <linux/clk.h>
#include <linux/module.h>
+#include <linux/mutex.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
@@ -37,6 +38,8 @@ struct stm32_adfsdm_priv {
/* PCM buffer */
unsigned char *pcm_buff;
unsigned int pos;
+
+ struct mutex lock; /* protect against race condition on iio state */
};
static const struct snd_pcm_hardware stm32_adfsdm_pcm_hw = {
@@ -62,10 +65,12 @@ static void stm32_adfsdm_shutdown(struct snd_pcm_substream *substream,
{
struct stm32_adfsdm_priv *priv = snd_soc_dai_get_drvdata(dai);
+ mutex_lock(&priv->lock);
if (priv->iio_active) {
iio_channel_stop_all_cb(priv->iio_cb);
priv->iio_active = false;
}
+ mutex_unlock(&priv->lock);
}
static int stm32_adfsdm_dai_prepare(struct snd_pcm_substream *substream,
@@ -74,13 +79,19 @@ static int stm32_adfsdm_dai_prepare(struct snd_pcm_substream *substream,
struct stm32_adfsdm_priv *priv = snd_soc_dai_get_drvdata(dai);
int ret;
+ mutex_lock(&priv->lock);
+ if (priv->iio_active) {
+ iio_channel_stop_all_cb(priv->iio_cb);
+ priv->iio_active = false;
+ }
+
ret = iio_write_channel_attribute(priv->iio_ch,
substream->runtime->rate, 0,
IIO_CHAN_INFO_SAMP_FREQ);
if (ret < 0) {
dev_err(dai->dev, "%s: Failed to set %d sampling rate\n",
__func__, substream->runtime->rate);
- return ret;
+ goto out;
}
if (!priv->iio_active) {
@@ -92,6 +103,9 @@ static int stm32_adfsdm_dai_prepare(struct snd_pcm_substream *substream,
__func__, ret);
}
+out:
+ mutex_unlock(&priv->lock);
+
return ret;
}
@@ -298,6 +312,7 @@ static int stm32_adfsdm_probe(struct platform_device *pdev)
priv->dev = &pdev->dev;
priv->dai_drv = stm32_adfsdm_dai;
+ mutex_init(&priv->lock);
dev_set_drvdata(&pdev->dev, priv);
--
2.19.1
next prev parent reply other threads:[~2019-04-27 1:51 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-27 1:39 [PATCH AUTOSEL 4.19 01/53] ASoC: tlv320aic3x: fix reset gpio reference counting Sasha Levin
2019-04-27 1:39 ` [PATCH AUTOSEL 4.19 02/53] ASoC: hdmi-codec: fix S/PDIF DAI Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 03/53] ASoC: ab8500: Mark expected switch fall-through Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 04/53] ASoC: stm32: sai: fix iec958 controls indexation Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 05/53] ASoC: stm32: sai: fix exposed capabilities in spdif mode Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 06/53] ASoC:soc-pcm:fix a codec fixup issue in TDM case Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 07/53] ASoC:intel:skl:fix a simultaneous playback & capture issue on hda platform Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 08/53] ASoC: nau8824: fix the issue of the widget with prefix name Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 09/53] ASoC: nau8810: fix the issue of widget with prefixed name Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 10/53] ASoC: samsung: odroid: Fix clock configuration for 44100 sample rate Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 11/53] ASoC: rt5682: recording has no sound after booting Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 12/53] ASoC: wm_adsp: Add locking to wm_adsp2_bus_error Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 13/53] clk: meson-gxbb: round the vdec dividers to closest Sasha Levin
2019-04-27 1:40 ` Sasha Levin [this message]
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 15/53] ASoC: stm32: dfsdm: fix debugfs warnings on entry creation Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 16/53] ASoC: cs4270: Set auto-increment bit for register writes Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 17/53] ASoC: dapm: Fix NULL pointer dereference in snd_soc_dapm_free_kcontrol Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 18/53] drm/omap: hdmi4_cec: Fix CEC clock handling for PM Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 19/53] IB/hfi1: Eliminate opcode tests on mr deref Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 20/53] IB/hfi1: Fix the allocation of RSM table Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 21/53] MIPS: KGDB: fix kgdb support for SMP platforms Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 22/53] ASoC: tlv320aic32x4: Fix Common Pins Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 23/53] drm/mediatek: Fix an error code in mtk_hdmi_dt_parse_pdata() Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 24/53] perf/x86/intel: Fix handling of wakeup_events for multi-entry PEBS Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 25/53] perf/x86/intel: Initialize TFA MSR Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 26/53] linux/kernel.h: Use parentheses around argument in u64_to_user_ptr() Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 27/53] xtensa: fix initialization of pt_regs::syscall in start_thread Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 28/53] ASoC: rockchip: pdm: fix regmap_ops hang issue Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 29/53] drm/amdkfd: Add picasso pci id Sasha Levin
[not found] ` <BN6PR12MB18098B1A85760FCFFFDD3C37F73F0@BN6PR12MB1809.namprd12.prod.outlook.com>
2019-05-08 17:35 ` Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 30/53] drm/amd/display: fix cursor black issue Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 31/53] ASoC: cs35l35: Disable regulators on driver removal Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 32/53] objtool: Add rewind_stack_do_exit() to the noreturn list Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 33/53] powerpc/vdso32: fix CLOCK_MONOTONIC on PPC64 Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 34/53] slab: fix a crash by reading /proc/slab_allocators Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 35/53] ASoC: stm32: fix sai driver name initialisation Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 36/53] drm/sun4i: tcon top: Fix NULL/invalid pointer dereference in sun8i_tcon_top_un/bind Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 37/53] virtio_pci: fix a NULL pointer reference in vp_del_vqs Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 38/53] RDMA/vmw_pvrdma: Fix memory leak on pvrdma_pci_remove Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 39/53] RDMA/hns: Fix bug that caused srq creation to fail Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 40/53] scsi: csiostor: fix missing data copy in csio_scsi_err_handler() Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 41/53] drm/mediatek: fix possible object reference leak Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 42/53] Bluetooth: btusb: request wake pin with NOAUTOEN Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 43/53] ASoC: Intel: kbl: fix wrong number of channels Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 44/53] virtio-blk: limit number of hw queues by nr_cpu_ids Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 45/53] clk: x86: Add system specific quirk to mark clocks as critical Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 46/53] nvme-fc: correct csn initialization and increments on error Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 47/53] platform/x86: pmc_atom: Drop __initconst on dmi table Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 48/53] NFS: Forbid setting AF_INET6 to "struct sockaddr_in"->sin_family Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 49/53] perf/core: Fix perf_event_disable_inatomic() race Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 50/53] iommu/amd: Set exclusion range correctly Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 51/53] mm: make page ref count overflow check tighter and more explicit Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 52/53] mm: add 'try_get_page()' helper function Sasha Levin
2019-04-27 1:40 ` [PATCH AUTOSEL 4.19 53/53] fs: prevent page refcount overflow in pipe_buf_get Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190427014051.7522-14-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=olivier.moysan@st.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox