All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Set ab8500-codec dai slots from machine drivers
@ 2013-05-21 10:04 Fabio Baltieri
  2013-05-21 10:04 ` [PATCH 1/2] ASoC: ab8500-codec: Set tx dai slots from tx_mask Fabio Baltieri
  2013-05-21 10:04 ` [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask Fabio Baltieri
  0 siblings, 2 replies; 8+ messages in thread
From: Fabio Baltieri @ 2013-05-21 10:04 UTC (permalink / raw)
  To: Mark Brown
  Cc: Liam Girdwood, alsa-devel, linux-kernel, Linus Walleij,
	Lee Jones, Ola Lilja, Fabio Baltieri

Hi Mark,

these two patches rework the slot selection code in ab8500-codec to use
the slots masks provided by the machine drivers instead of the hardcoded
ones as suggested.

The patches replaces some of the previous macros with a parametrized
version in the effort of making the actual code compact and readable,
and should be applied in order.  Also, the second patch drops the
hardcoded defintions swapped in -rc2, so you may want to rebase the
ux500 topic branch to avoid the conflict, or I can resend the patch
based on the topic branch directly.  Just let me know.

Big thanks to Ola for helping me figuring out the weird ab8500 slot
mapping logic.

Fabio

Fabio Baltieri (2):
  ASoC: ab8500-codec: Set tx dai slots from tx_mask
  ASoC: ab8500-codec: Set rx dai slots from rx_mask

 sound/soc/codecs/ab8500-codec.c | 60 ++++++++++++++++++++++++++---------------
 sound/soc/codecs/ab8500-codec.h | 42 +++++++++++++++--------------
 2 files changed, 61 insertions(+), 41 deletions(-)

-- 
1.8.2


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] ASoC: ab8500-codec: Set tx dai slots from tx_mask
  2013-05-21 10:04 [PATCH 0/2] Set ab8500-codec dai slots from machine drivers Fabio Baltieri
@ 2013-05-21 10:04 ` Fabio Baltieri
  2013-05-21 16:35   ` Mark Brown
  2013-05-21 10:04 ` [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask Fabio Baltieri
  1 sibling, 1 reply; 8+ messages in thread
From: Fabio Baltieri @ 2013-05-21 10:04 UTC (permalink / raw)
  To: Mark Brown
  Cc: Liam Girdwood, alsa-devel, linux-kernel, Linus Walleij,
	Lee Jones, Ola Lilja, Fabio Baltieri

Replace hard-coded tx slot numbers from ab8500_codec_set_dai_tdm_slot
using the ones requested by the machine driver in tx_mask instead.

Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
 sound/soc/codecs/ab8500-codec.c | 31 +++++++++++++++++++------------
 sound/soc/codecs/ab8500-codec.h |  7 +++++++
 2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
index 3126cac..bace321 100644
--- a/sound/soc/codecs/ab8500-codec.c
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -2236,7 +2236,7 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
 		int slots, int slot_width)
 {
 	struct snd_soc_codec *codec = dai->codec;
-	unsigned int val, mask, slots_active;
+	unsigned int val, mask, slot, slots_active;
 
 	mask = BIT(AB8500_DIGIFCONF2_IF0WL0) |
 		BIT(AB8500_DIGIFCONF2_IF0WL1);
@@ -2292,27 +2292,34 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
 	snd_soc_update_bits(codec, AB8500_DIGIFCONF1, mask, val);
 
 	/* Setup TDM DA according to active tx slots */
+
+	if (tx_mask & ~0xff)
+		return -EINVAL;
+
 	mask = AB8500_DASLOTCONFX_SLTODAX_MASK;
+	tx_mask = tx_mask << AB8500_DA_DATA0_OFFSET;
 	slots_active = hweight32(tx_mask);
+
 	dev_dbg(dai->codec->dev, "%s: Slots, active, TX: %d\n", __func__,
 		slots_active);
+
 	switch (slots_active) {
 	case 0:
 		break;
 	case 1:
-		/* Slot 9 -> DA_IN1 & DA_IN3 */
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, 11);
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, 11);
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, 11);
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, 11);
+		slot = find_first_bit((unsigned long *)&tx_mask, 32);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot);
 		break;
 	case 2:
-		/* Slot 9 -> DA_IN1 & DA_IN3, Slot 11 -> DA_IN2 & DA_IN4 */
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, 9);
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, 9);
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, 11);
-		snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, 11);
-
+		slot = find_first_bit((unsigned long *)&tx_mask, 32);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
+		slot = find_next_bit((unsigned long *)&tx_mask, 32, slot + 1);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot);
+		snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot);
 		break;
 	case 8:
 		dev_dbg(dai->codec->dev,
diff --git a/sound/soc/codecs/ab8500-codec.h b/sound/soc/codecs/ab8500-codec.h
index 306d0bc..64c14ce 100644
--- a/sound/soc/codecs/ab8500-codec.h
+++ b/sound/soc/codecs/ab8500-codec.h
@@ -24,6 +24,13 @@
 #define AB8500_SUPPORTED_RATE			(SNDRV_PCM_RATE_48000)
 #define AB8500_SUPPORTED_FMT			(SNDRV_PCM_FMTBIT_S16_LE)
 
+/* AB8500 interface slot offset definitions */
+
+#define AB8500_AD_DATA0_OFFSET	0
+#define AB8500_DA_DATA0_OFFSET	8
+#define AB8500_AD_DATA1_OFFSET	16
+#define AB8500_DA_DATA1_OFFSET	24
+
 /* AB8500 audio bank (0x0d) register definitions */
 
 #define AB8500_POWERUP				0x00
-- 
1.8.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask
  2013-05-21 10:04 [PATCH 0/2] Set ab8500-codec dai slots from machine drivers Fabio Baltieri
  2013-05-21 10:04 ` [PATCH 1/2] ASoC: ab8500-codec: Set tx dai slots from tx_mask Fabio Baltieri
@ 2013-05-21 10:04 ` Fabio Baltieri
  2013-05-21 16:39     ` Mark Brown
  2013-05-21 16:43     ` Mark Brown
  1 sibling, 2 replies; 8+ messages in thread
From: Fabio Baltieri @ 2013-05-21 10:04 UTC (permalink / raw)
  To: Mark Brown
  Cc: Liam Girdwood, alsa-devel, linux-kernel, Linus Walleij,
	Lee Jones, Ola Lilja, Fabio Baltieri

Replace hard coded rx slot numbers from ab8500_codec_set_dai_tdm_slot
using the ones requested by the machine driver in rx_mask instead.

Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
 sound/soc/codecs/ab8500-codec.c | 29 ++++++++++++++++++++---------
 sound/soc/codecs/ab8500-codec.h | 35 +++++++++++++++--------------------
 2 files changed, 35 insertions(+), 29 deletions(-)

diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
index bace321..4ca45b9 100644
--- a/sound/soc/codecs/ab8500-codec.c
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -2334,25 +2334,36 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
 	}
 
 	/* Setup TDM AD according to active RX-slots */
+
+	if (rx_mask & ~0xff)
+		return -EINVAL;
+
+	rx_mask = rx_mask << AB8500_AD_DATA0_OFFSET;
 	slots_active = hweight32(rx_mask);
+
 	dev_dbg(dai->codec->dev, "%s: Slots, active, RX: %d\n", __func__,
 		slots_active);
+
 	switch (slots_active) {
 	case 0:
 		break;
 	case 1:
-		/* AD_OUT3 -> slot 0 & 1 */
-		snd_soc_update_bits(codec, AB8500_ADSLOTSEL1, AB8500_MASK_ALL,
-				AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN |
-				AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD);
+		slot = find_first_bit((unsigned long *)&rx_mask, 32);
+		snd_soc_update_bits(codec, AB8500_ADSLOTSEL(slot),
+				AB8500_MASK_SLOT(slot),
+				AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
 		break;
 	case 2:
-		/* AD_OUT3 -> slot 0, AD_OUT2 -> slot 1 */
+		slot = find_first_bit((unsigned long *)&rx_mask, 32);
+		snd_soc_update_bits(codec,
+				AB8500_ADSLOTSEL(slot),
+				AB8500_MASK_SLOT(slot),
+				AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
+		slot = find_next_bit((unsigned long *)&rx_mask, 32, slot + 1);
 		snd_soc_update_bits(codec,
-				AB8500_ADSLOTSEL1,
-				AB8500_MASK_ALL,
-				AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN |
-				AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD);
+				AB8500_ADSLOTSEL(slot),
+				AB8500_MASK_SLOT(slot),
+				AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT2, slot));
 		break;
 	case 8:
 		dev_dbg(dai->codec->dev,
diff --git a/sound/soc/codecs/ab8500-codec.h b/sound/soc/codecs/ab8500-codec.h
index 64c14ce..e2e5442 100644
--- a/sound/soc/codecs/ab8500-codec.h
+++ b/sound/soc/codecs/ab8500-codec.h
@@ -80,6 +80,7 @@
 #define AB8500_ADSLOTSEL14			0x2C
 #define AB8500_ADSLOTSEL15			0x2D
 #define AB8500_ADSLOTSEL16			0x2E
+#define AB8500_ADSLOTSEL(slot)			(AB8500_ADSLOTSEL1 + (slot >> 1))
 #define AB8500_ADSLOTHIZCTRL1			0x2F
 #define AB8500_ADSLOTHIZCTRL2			0x30
 #define AB8500_ADSLOTHIZCTRL3			0x31
@@ -151,6 +152,7 @@
 #define AB8500_CACHEREGNUM			(AB8500_LAST_REG + 1)
 
 #define AB8500_MASK_ALL				0xFF
+#define AB8500_MASK_SLOT(slot)			((slot & 1) ? 0xF0 : 0x0F)
 #define AB8500_MASK_NONE			0x00
 
 /* AB8500_POWERUP */
@@ -354,28 +356,21 @@
 #define AB8500_DIGIFCONF4_IF1WL0		0
 
 /* AB8500_ADSLOTSELX */
-#define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_ODD	0x00
-#define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD	0x10
-#define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD	0x20
-#define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_ODD	0x30
-#define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_ODD	0x40
-#define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_ODD	0x50
-#define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_ODD	0x60
-#define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_ODD	0x70
-#define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_ODD	0x80
-#define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_ODD	0xF0
-#define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_EVEN	0x00
-#define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_EVEN	0x01
-#define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN	0x02
-#define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_EVEN	0x03
-#define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_EVEN	0x04
-#define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_EVEN	0x05
-#define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_EVEN	0x06
-#define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_EVEN	0x07
-#define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_EVEN	0x08
-#define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_EVEN	0x0F
+#define AB8500_AD_OUT1	0x0
+#define AB8500_AD_OUT2	0x1
+#define AB8500_AD_OUT3	0x2
+#define AB8500_AD_OUT4	0x3
+#define AB8500_AD_OUT5	0x4
+#define AB8500_AD_OUT6	0x5
+#define AB8500_AD_OUT7	0x6
+#define AB8500_AD_OUT8	0x7
+#define AB8500_ZEROES	0x8
+#define AB8500_TRISTATE	0xF
 #define AB8500_ADSLOTSELX_EVEN_SHIFT		0
 #define AB8500_ADSLOTSELX_ODD_SHIFT		4
+#define AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(out, slot)	\
+	((out) << (((slot) & 1) ? \
+	 AB8500_ADSLOTSELX_ODD_SHIFT : AB8500_ADSLOTSELX_EVEN_SHIFT))
 
 /* AB8500_ADSLOTHIZCTRL1 */
 /* AB8500_ADSLOTHIZCTRL2 */
-- 
1.8.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] ASoC: ab8500-codec: Set tx dai slots from tx_mask
  2013-05-21 10:04 ` [PATCH 1/2] ASoC: ab8500-codec: Set tx dai slots from tx_mask Fabio Baltieri
@ 2013-05-21 16:35   ` Mark Brown
  0 siblings, 0 replies; 8+ messages in thread
From: Mark Brown @ 2013-05-21 16:35 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: 223 bytes --]

On Tue, May 21, 2013 at 12:04:08PM +0200, Fabio Baltieri wrote:
> Replace hard-coded tx slot numbers from ab8500_codec_set_dai_tdm_slot
> using the ones requested by the machine driver in tx_mask instead.

Applied, thanks.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask
  2013-05-21 10:04 ` [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask Fabio Baltieri
@ 2013-05-21 16:39     ` Mark Brown
  2013-05-21 16:43     ` Mark Brown
  1 sibling, 0 replies; 8+ messages in thread
From: Mark Brown @ 2013-05-21 16:39 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: 223 bytes --]

On Tue, May 21, 2013 at 12:04:09PM +0200, Fabio Baltieri wrote:
> Replace hard coded rx slot numbers from ab8500_codec_set_dai_tdm_slot
> using the ones requested by the machine driver in rx_mask instead.

Applied, thanks.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask
@ 2013-05-21 16:39     ` Mark Brown
  0 siblings, 0 replies; 8+ messages in thread
From: Mark Brown @ 2013-05-21 16:39 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: Ola Lilja, alsa-devel, Linus Walleij, Liam Girdwood,
	linux-kernel, Lee Jones


[-- Attachment #1.1: Type: text/plain, Size: 223 bytes --]

On Tue, May 21, 2013 at 12:04:09PM +0200, Fabio Baltieri wrote:
> Replace hard coded rx slot numbers from ab8500_codec_set_dai_tdm_slot
> using the ones requested by the machine driver in rx_mask instead.

Applied, thanks.

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask
  2013-05-21 10:04 ` [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask Fabio Baltieri
@ 2013-05-21 16:43     ` Mark Brown
  2013-05-21 16:43     ` Mark Brown
  1 sibling, 0 replies; 8+ messages in thread
From: Mark Brown @ 2013-05-21 16:43 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: 223 bytes --]

On Tue, May 21, 2013 at 12:04:09PM +0200, Fabio Baltieri wrote:
> Replace hard coded rx slot numbers from ab8500_codec_set_dai_tdm_slot
> using the ones requested by the machine driver in rx_mask instead.

Applied, thanks.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask
@ 2013-05-21 16:43     ` Mark Brown
  0 siblings, 0 replies; 8+ messages in thread
From: Mark Brown @ 2013-05-21 16:43 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: Ola Lilja, alsa-devel, Linus Walleij, Liam Girdwood,
	linux-kernel, Lee Jones


[-- Attachment #1.1: Type: text/plain, Size: 223 bytes --]

On Tue, May 21, 2013 at 12:04:09PM +0200, Fabio Baltieri wrote:
> Replace hard coded rx slot numbers from ab8500_codec_set_dai_tdm_slot
> using the ones requested by the machine driver in rx_mask instead.

Applied, thanks.

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-05-21 17:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-21 10:04 [PATCH 0/2] Set ab8500-codec dai slots from machine drivers Fabio Baltieri
2013-05-21 10:04 ` [PATCH 1/2] ASoC: ab8500-codec: Set tx dai slots from tx_mask Fabio Baltieri
2013-05-21 16:35   ` Mark Brown
2013-05-21 10:04 ` [PATCH 2/2] ASoC: ab8500-codec: Set rx dai slots from rx_mask Fabio Baltieri
2013-05-21 16:39   ` Mark Brown
2013-05-21 16:39     ` Mark Brown
2013-05-21 16:43   ` Mark Brown
2013-05-21 16:43     ` Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.