On Thu, Mar 5, 2009 at 12:03 AM, Daniel Mack <daniel@xxxxxxxx> wrote: > Hi Philipp, > > On Wed, Mar 04, 2009 at 09:56:01PM +0100, pHilipp Zabel wrote: >> > diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c >> > index 45fb600..97f11d6 100644 >> > --- a/sound/soc/pxa/pxa-ssp.c >> > +++ b/sound/soc/pxa/pxa-ssp.c >> > @@ -319,6 +319,7 @@ static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai, >> > break; >> > case PXA_SSP_CLK_EXT: >> > priv->sysclk = freq; >> > + ssp_set_scr(&priv->dev, 4); >> >> Shouldn't this be somehow set by set_dai_clkdiv instead? > > This is actually a very common case - MCLK is BCLK*4, so I put it here. > We could still move it to some more configurable place if it turns out > we need to configure it per board. > >> > switch (fmt & SND_SOC_DAIFMT_INV_MASK) { >> > case SND_SOC_DAIFMT_NB_NF: >> > - sspsp |= SSPSP_FSRT; >> > break; >> > case SND_SOC_DAIFMT_NB_IF: >> > - sspsp |= SSPSP_SFRMP | SSPSP_FSRT; >> > - break; >> > - case SND_SOC_DAIFMT_IB_IF: >> > sspsp |= SSPSP_SFRMP; >> > break; >> >> Removal of SSPSP_FSRT from NB/IB selection seems to be correct from the docs. > > SSPSP_FSRT has a totally different meaning according to the PXA3xx docs, > but I'll have a look at the PXA2x specs - maybe we need a special case > here. Unfortunately, I'm not able to quote from PXA3x specs here due to > NDA restrictions. > >> Can you check if IB could be properly handled by setting SCMODE(1)? > > Can't follow that - what are you referring to here? > >> > default: >> > @@ -652,33 +649,39 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream, >> > break; >> > case SNDRV_PCM_FORMAT_S24_LE: >> > sscr0 |= (SSCR0_EDSS | SSCR0_DataSize(8)); >> > - /* we must be in network mode (2 slots) for 24 bit stereo */ >> >> This is still dubious ... >> S24_LE is 24-bit sound LSB-aligned in 32-bit frames, so DataSize >> should be 32 here. > > I didn't test that, and I didn't change it either - I just removed the > comment, as we're not running in network mode anymore. > >> > break; >> > case SNDRV_PCM_FORMAT_S32_LE: >> > sscr0 |= (SSCR0_EDSS | SSCR0_DataSize(16)); >> > - /* we must be in network mode (2 slots) for 32 bit stereo */ >> >> How is it possible to send 64bit in one frame otherwise? > > We're not running in network mode anymore - things are different now :) > >> > + switch (priv->dai_fmt & SND_SOC_DAIFMT_FRAME_FORMAT_MASK) { >> > + case SND_SOC_DAIFMT_FF_I2S_32: >> > + /* These values are all found out by trying and >> > + * failing a lot. PXA's SSP is all black magic and >> > + * does not work like described in any datasheet. >> > + */ >> > + sspsp |= SSPSP_SFRMWDTH(32); >> > + sspsp |= SSPSP_SFRMDLY(32 * 2); >> > + sspsp |= SSPSP_EDMYSTOP(3); >> > + sspsp |= SSPSP_DMYSTOP(3); >> > + sspsp |= SSPSP_DMYSTRT(1); >> >> Wha?! Amazing. And this really works? >> How the hell can this result in 16 bits of data followed by 16 bits of >> zeroes, twice :) > > Don't ask :) If we could explain in detail what these registers mean, > I'd rather make them macro values, but unfortunately, the comment is > correct ... > >> >> > + break; >> > + default: >> > + /* Cleared when the DAI format is set */ >> > + sspsp |= SSPSP_SFRMWDTH(width); >> >> Not good for DSP_A/B. > > This is the SND_SOC_DAIFMT_I2S case, so DSP modes will be unaffected. > > Could you try the patches on your board? Done. They don't interfere with my setup. regards Philipp _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel