[RFC/PATCH] asoc: pxa-ssp.c -> enchance the I2S enchancement :)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, this patch is what i need to use Paul's pxa-ssp.c I2S enchancements
on my board.

Basically, it doesn't enforce the "fake" network mode, as i dont need
it. And i need _real_ network mode, so i prefer to set SSCR0_MOD only
when really using network mode.

And it uses PXA_SSP_FRM_??FS to actually set SSCR0_DataSize() too. This
allows me to use 32bit frames for 16 bit stereo audio. (No, I don't want
to fake network mode for this, and SSCR0_MOD doesn't work as expected
when PXA is slave).

This patch is incremental to the recent patch from Paul Shen.

Signed-off-by: Daniel Ribeiro <drwyrm@xxxxxxxxx>

diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index ed0906e..762cb93 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -579,7 +579,7 @@ static int pxa_ssp_set_dai_fmt(struct snd_soc_dai
*cpu_dai,
 	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 	case SND_SOC_DAIFMT_I2S:
 	case SND_SOC_DAIFMT_LEFT_J:
-		sscr0 |= SSCR0_PSP | SSCR0_MOD;
+		sscr0 |= SSCR0_PSP;
 		sscr1 |= SSCR1_RWOT | SSCR1_TRAIL;
 
 		/* See hw_params() */
@@ -655,7 +655,7 @@ static int pxa_ssp_hw_params(struct
snd_pcm_substream *substream,
 	int dma = 0, chn = params_channels(params);
 	u32 sscr0;
 	u32 sspsp;
-	int frame_width;
+	int frame_width = 0;
 	int width = snd_pcm_format_physical_width(params_format(params));
 	int ttsa = ssp_read_reg(ssp, SSTSA) & 0xf;
 
@@ -698,7 +698,6 @@ static int pxa_ssp_hw_params(struct
snd_pcm_substream *substream,
 		sscr0 |= (SSCR0_EDSS | SSCR0_DataSize(16));
 		break;
 	}
-	ssp_write_reg(ssp, SSCR0, sscr0);
 
 	switch (priv->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 	case SND_SOC_DAIFMT_I2S:
@@ -742,6 +741,15 @@ static int pxa_ssp_hw_params(struct
snd_pcm_substream *substream,
 		break;
 	}
 
+	if (frame_width) {
+		sscr0 &= ~(SSCR0_EDSS | SSCR0_DataSize(16));
+		if (frame_width % 48 == 0)
+			sscr0 |= SSCR0_EDSS | SSCR0_DataSize(8);
+		else
+			sscr0 |= SSCR0_EDSS | SSCR0_DataSize(16);
+	}
+	ssp_write_reg(ssp, SSCR0, sscr0);
+
 	/* When we use a network mode, we always require TDM slots
 	 * - complain loudly and fail if they've not been set up yet.
 	 */


-- 
Daniel Ribeiro

Attachment: signature.asc
Description: Esta =?ISO-8859-1?Q?=E9?= uma parte de mensagem assinada digitalmente

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux