* [PATCH] ASoC: ux500: Ensure consistent configuration between DAIs
@ 2013-05-28 14:16 Fabio Baltieri
2013-05-28 14:23 ` Mark Brown
0 siblings, 1 reply; 2+ messages in thread
From: Fabio Baltieri @ 2013-05-28 14:16 UTC (permalink / raw)
To: Mark Brown
Cc: Liam Girdwood, alsa-devel, linux-kernel, Linus Walleij,
Lee Jones, Ola Lilja, Fabio Baltieri
Current implementation of mop500_ab8500 allows for inconsistent sample
rate and channel count configuration between the playback and recording
interfaces, through in the hardware the two MSP controllers share
common clock and frame sync signals.
This patch adds the necessary code to ensure that the two device are
configure consistently. The check is added at machine driver level, as
how to lock DAI configuration depend of the actual hardware
implementation.
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
sound/soc/ux500/mop500_ab8500.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/sound/soc/ux500/mop500_ab8500.c b/sound/soc/ux500/mop500_ab8500.c
index 5e0f146..7e923ec 100644
--- a/sound/soc/ux500/mop500_ab8500.c
+++ b/sound/soc/ux500/mop500_ab8500.c
@@ -16,6 +16,7 @@
#include <linux/device.h>
#include <linux/io.h>
#include <linux/clk.h>
+#include <linux/mutex.h>
#include <sound/soc.h>
#include <sound/soc-dapm.h>
@@ -44,6 +45,12 @@
static unsigned int tx_slots = DEF_TX_SLOTS;
static unsigned int rx_slots = DEF_RX_SLOTS;
+/* Configuration consistency parameters */
+static DEFINE_MUTEX(mop500_ab8500_params_lock);
+static unsigned long mop500_ab8500_usage;
+static int mop500_ab8500_rate;
+static int mop500_ab8500_channels;
+
/* Clocks */
static const char * const enum_mclk[] = {
"SYSCLK",
@@ -231,6 +238,21 @@ static int mop500_ab8500_hw_params(struct snd_pcm_substream *substream,
substream->name,
substream->number);
+ /* Ensure configuration consistency between DAIs */
+ mutex_lock(&mop500_ab8500_params_lock);
+ if (mop500_ab8500_usage) {
+ if (mop500_ab8500_rate != params_rate(params) ||
+ mop500_ab8500_channels != params_channels(params)) {
+ mutex_unlock(&mop500_ab8500_params_lock);
+ return -EBUSY;
+ }
+ } else {
+ mop500_ab8500_rate = params_rate(params);
+ mop500_ab8500_channels = params_channels(params);
+ }
+ __set_bit(cpu_dai->id, &mop500_ab8500_usage);
+ mutex_unlock(&mop500_ab8500_params_lock);
+
channels = params_channels(params);
switch (params_format(params)) {
@@ -329,9 +351,22 @@ static int mop500_ab8500_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static int mop500_ab8500_hw_free(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+
+ mutex_lock(&mop500_ab8500_params_lock);
+ __clear_bit(cpu_dai->id, &mop500_ab8500_usage);
+ mutex_unlock(&mop500_ab8500_params_lock);
+
+ return 0;
+}
+
struct snd_soc_ops mop500_ab8500_ops[] = {
{
.hw_params = mop500_ab8500_hw_params,
+ .hw_free = mop500_ab8500_hw_free,
.startup = mop500_ab8500_startup,
.shutdown = mop500_ab8500_shutdown,
}
--
1.8.2
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] ASoC: ux500: Ensure consistent configuration between DAIs
2013-05-28 14:16 [PATCH] ASoC: ux500: Ensure consistent configuration between DAIs Fabio Baltieri
@ 2013-05-28 14:23 ` Mark Brown
0 siblings, 0 replies; 2+ messages in thread
From: Mark Brown @ 2013-05-28 14:23 UTC (permalink / raw)
To: Fabio Baltieri
Cc: Liam Girdwood, alsa-devel, linux-kernel, Linus Walleij,
Lee Jones, Ola Lilja
[-- Attachment #1: Type: text/plain, Size: 336 bytes --]
On Tue, May 28, 2013 at 04:16:39PM +0200, Fabio Baltieri wrote:
> Current implementation of mop500_ab8500 allows for inconsistent sample
> rate and channel count configuration between the playback and recording
> interfaces, through in the hardware the two MSP controllers share
> common clock and frame sync signals.
Applied, thanks.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-05-28 14:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-28 14:16 [PATCH] ASoC: ux500: Ensure consistent configuration between DAIs Fabio Baltieri
2013-05-28 14:23 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®