Skip to contentSkip to conversation

Kirkwood audio fixes

PATCH Applied [email protected] 3 participants 6 messages Jul 11, 2010 – Jul 13, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover Kirkwood audio fixes

Hi,

While working on the t5325 audio support, I found two small buglets in the kirkwood ASoC support.

The first one is aiming at fixing mono audio playback and should fix mono playback for all platforms.
The second is adding support for muting/unmuting kirkwood audio. It's mainly usefull for the t5325 which has a bootloader playing with this (hardware default is not muted).

Arnaud

#1 lore raw

PATCH 1/2 ASoC: Fix kirkwood i2s mono playback

Kirkwood controller needs to be informed if the audio stream is mono or not. Failing to do so will result in playing at the wrong speed.

sound/soc/kirkwood/kirkwood-i2s.c +9 -0
Index: sound-2.6/sound/soc/kirkwood/kirkwood-i2s.c
===================================================================
@@ -153,6 +153,15 @@
 	default:
 		return -EINVAL;
 	}
+
+	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+		value &= ~KIRKWOOD_PLAYCTL_MONO_MASK;
+		if (params_channels(params) == 1)
+			value |= KIRKWOOD_PLAYCTL_MONO_BOTH;
+		else
+			value |= KIRKWOOD_PLAYCTL_MONO_OFF;
+	}
+
 	writel(i2s_value, priv->io+i2s_reg);
 	writel(value, priv->io+reg);
 
sound/soc/kirkwood/kirkwood.h +3 -0
Index: sound-2.6/sound/soc/kirkwood/kirkwood.h
===================================================================
@@ -49,6 +49,9 @@
 #define KIRKWOOD_PLAYCTL_BURST_32		(1<<11)
 #define KIRKWOOD_PLAYCTL_PAUSE			(1<<9)
 #define KIRKWOOD_PLAYCTL_SPDIF_MUTE		(1<<8)
+#define KIRKWOOD_PLAYCTL_MONO_MASK		(3<<5)
+#define KIRKWOOD_PLAYCTL_MONO_BOTH		(3<<5)
+#define KIRKWOOD_PLAYCTL_MONO_OFF		(0<<5)
 #define KIRKWOOD_PLAYCTL_I2S_MUTE		(1<<7)
 #define KIRKWOOD_PLAYCTL_SPDIF_EN		(1<<4)
 #define KIRKWOOD_PLAYCTL_I2S_EN		(1<<3)
Applied
#2 lore raw

Re: [patch 1/2] ASoC: Fix kirkwood i2s mono playback

Quoted 2 lines · On Sun, Jul 11, 2010 at 11:28:31PM +0200, [email protected] wrote:

Kirkwood controller needs to be informed if the audio stream is mono or not. Failing to do so will result in playing at the wrong speed.

Applied both, thanks.

#3 lore raw

PATCH 2/2 ASoC: kirkwood-i2s: Handle mute/unmute playback/record

In reply to [email protected]

The controller has mute/unmute capability and some bootloader may mute them at boot. If it's not handled, all things will seem to be working but no sound will come out of the speaker/headphone.

sound/soc/kirkwood/kirkwood-i2s.c +10 -8
Index: sound-2.6/sound/soc/kirkwood/kirkwood-i2s.c
===================================================================
@@ -193,7 +193,8 @@
 		/* configure audio & enable i2s playback */
 		value = readl(priv->io + KIRKWOOD_PLAYCTL);
 		value &= ~KIRKWOOD_PLAYCTL_BURST_MASK;
-		value &= ~(KIRKWOOD_PLAYCTL_PAUSE|KIRKWOOD_PLAYCTL_SPDIF_EN);
+		value &= ~(KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE
+				| KIRKWOOD_PLAYCTL_SPDIF_EN);
 
 		if (priv->burst == 32)
 			value |= KIRKWOOD_PLAYCTL_BURST_32;
@@ -206,7 +207,7 @@
 	case SNDRV_PCM_TRIGGER_STOP:
 		/* stop audio, disable interrupts */
 		value = readl(priv->io + KIRKWOOD_PLAYCTL);
-		value |= KIRKWOOD_PLAYCTL_PAUSE;
+		value |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE;
 		writel(value, priv->io + KIRKWOOD_PLAYCTL);
 
 		value = readl(priv->io + KIRKWOOD_INT_MASK);
@@ -222,14 +223,14 @@
 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 	case SNDRV_PCM_TRIGGER_SUSPEND:
 		value = readl(priv->io + KIRKWOOD_PLAYCTL);
-		value |= KIRKWOOD_PLAYCTL_PAUSE;
+		value |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE;
 		writel(value, priv->io + KIRKWOOD_PLAYCTL);
 		break;
 
 	case SNDRV_PCM_TRIGGER_RESUME:
 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 		value = readl(priv->io + KIRKWOOD_PLAYCTL);
-		value &= ~KIRKWOOD_PLAYCTL_PAUSE;
+		value &= ~(KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE);
 		writel(value, priv->io + KIRKWOOD_PLAYCTL);
 		break;
 
@@ -262,7 +263,8 @@
 		value = readl(priv->io + KIRKWOOD_RECCTL);
 		value &= ~KIRKWOOD_RECCTL_BURST_MASK;
 		value &= ~KIRKWOOD_RECCTL_MONO;
-		value &= ~(KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_SPDIF_EN);
+		value &= ~(KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE
+			| KIRKWOOD_RECCTL_SPDIF_EN);
 
 		if (priv->burst == 32)
 			value |= KIRKWOOD_RECCTL_BURST_32;
@@ -276,7 +278,7 @@
 	case SNDRV_PCM_TRIGGER_STOP:
 		/* stop audio, disable interrupts */
 		value = readl(priv->io + KIRKWOOD_RECCTL);
-		value |= KIRKWOOD_RECCTL_PAUSE;
+		value |= KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE;
 		writel(value, priv->io + KIRKWOOD_RECCTL);
 
 		value = readl(priv->io + KIRKWOOD_INT_MASK);
@@ -292,14 +294,14 @@
 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 	case SNDRV_PCM_TRIGGER_SUSPEND:
 		value = readl(priv->io + KIRKWOOD_RECCTL);
-		value |= KIRKWOOD_RECCTL_PAUSE;
+		value |= KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE;
 		writel(value, priv->io + KIRKWOOD_RECCTL);
 		break;
 
 	case SNDRV_PCM_TRIGGER_RESUME:
 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 		value = readl(priv->io + KIRKWOOD_RECCTL);
-		value &= ~KIRKWOOD_RECCTL_PAUSE;
+		value &= ~(KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE);
 		writel(value, priv->io + KIRKWOOD_RECCTL);
 		break;
Acked-by on the v1 series
#4 lore raw
In reply to [email protected]
Quoted 13 lines · On Sun, 2010-07-11 at 23:28 +0200, [email protected] wrote:

Hi,

While working on the t5325 audio support, I found two small buglets in the kirkwood ASoC support.

The first one is aiming at fixing mono audio playback and should fix mono playback for all platforms.
The second is adding support for muting/unmuting kirkwood audio. It's mainly usefull for the t5325 which has a bootloader playing with this (hardware default is not muted).

All

Signature · 3 lines
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk
Acked-by on the v1 series
#5 lore raw
In reply to [email protected]
Quoted 11 lines · On Sun, 2010-07-11 at 23:28 +0200, [email protected] wrote:

Hi,

While working on the t5325 audio support, I found two small buglets in the kirkwood ASoC support.

The first one is aiming at fixing mono audio playback and should fix mono playback for all platforms.
The second is adding support for muting/unmuting kirkwood audio. It's mainly usefull for the t5325 which has a bootloader playing with this (hardware default is not muted).

Signature · 3 lines
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk