Message ID | 1395916060-16234-1-git-send-email-zonque@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 6479285d8aa1cbf22d21706370e812e7af51241c |
Headers | show |
On 03/27/2014 12:27 PM, Daniel Mack wrote: > In DIT (S/PDIF) mode, program the transmitted user bits to reflect the > configured sample rate, along with some other details. > > Signed-off-by: Daniel Mack <zonque@gmail.com> Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com> > --- > v3 just changes variable names. > > sound/soc/davinci/davinci-mcasp.c | 49 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 47 insertions(+), 2 deletions(-) > > diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c > index 4500cf0..a21a7d4 100644 > --- a/sound/soc/davinci/davinci-mcasp.c > +++ b/sound/soc/davinci/davinci-mcasp.c > @@ -27,6 +27,7 @@ > #include <linux/of_platform.h> > #include <linux/of_device.h> > > +#include <sound/asoundef.h> > #include <sound/core.h> > #include <sound/pcm.h> > #include <sound/pcm_params.h> > @@ -576,8 +577,12 @@ static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream) > } > > /* S/PDIF */ > -static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp) > +static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp, > + unsigned int rate) > { > + u32 cs_value = 0; > + u8 *cs_bytes = (u8*) &cs_value; > + > /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0 > and LSB first */ > mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15)); > @@ -599,6 +604,46 @@ static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp) > /* Enable the DIT */ > mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN); > > + /* Set S/PDIF channel status bits */ > + cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT; > + cs_bytes[1] = IEC958_AES1_CON_PCM_CODER; > + > + switch (rate) { > + case 22050: > + cs_bytes[3] |= IEC958_AES3_CON_FS_22050; > + break; > + case 24000: > + cs_bytes[3] |= IEC958_AES3_CON_FS_24000; > + break; > + case 32000: > + cs_bytes[3] |= IEC958_AES3_CON_FS_32000; > + break; > + case 44100: > + cs_bytes[3] |= IEC958_AES3_CON_FS_44100; > + break; > + case 48000: > + cs_bytes[3] |= IEC958_AES3_CON_FS_48000; > + break; > + case 88200: > + cs_bytes[3] |= IEC958_AES3_CON_FS_88200; > + break; > + case 96000: > + cs_bytes[3] |= IEC958_AES3_CON_FS_96000; > + break; > + case 176400: > + cs_bytes[3] |= IEC958_AES3_CON_FS_176400; > + break; > + case 192000: > + cs_bytes[3] |= IEC958_AES3_CON_FS_192000; > + break; > + default: > + printk(KERN_WARNING "unsupported sampling rate: %d\n", rate); > + return -EINVAL; > + } > + > + mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value); > + mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value); > + > return 0; > } > > @@ -634,7 +679,7 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream, > return ret; > > if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE) > - ret = mcasp_dit_hw_param(mcasp); > + ret = mcasp_dit_hw_param(mcasp, params_rate(params)); > else > ret = mcasp_i2s_hw_param(mcasp, substream->stream); > >
On Thu, Mar 27, 2014 at 11:27:40AM +0100, Daniel Mack wrote: > In DIT (S/PDIF) mode, program the transmitted user bits to reflect the > configured sample rate, along with some other details. Applied, thanks.
On 03/27/2014 02:18 PM, Mark Brown wrote: > On Thu, Mar 27, 2014 at 11:27:40AM +0100, Daniel Mack wrote: >> In DIT (S/PDIF) mode, program the transmitted user bits to reflect the >> configured sample rate, along with some other details. > > Applied, thanks. > Strange - this one's also missing in mainline? No big deal, I can resend if you want me to. I just want to understand what happened :) Thanks, Daniel
On Wed, Jun 18, 2014 at 05:14:50PM +0200, Daniel Mack wrote: > Strange - this one's also missing in mainline? No big deal, I can resend > if you want me to. I just want to understand what happened :) Probably same thing here.
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c index 4500cf0..a21a7d4 100644 --- a/sound/soc/davinci/davinci-mcasp.c +++ b/sound/soc/davinci/davinci-mcasp.c @@ -27,6 +27,7 @@ #include <linux/of_platform.h> #include <linux/of_device.h> +#include <sound/asoundef.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> @@ -576,8 +577,12 @@ static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream) } /* S/PDIF */ -static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp) +static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp, + unsigned int rate) { + u32 cs_value = 0; + u8 *cs_bytes = (u8*) &cs_value; + /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0 and LSB first */ mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15)); @@ -599,6 +604,46 @@ static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp) /* Enable the DIT */ mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN); + /* Set S/PDIF channel status bits */ + cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT; + cs_bytes[1] = IEC958_AES1_CON_PCM_CODER; + + switch (rate) { + case 22050: + cs_bytes[3] |= IEC958_AES3_CON_FS_22050; + break; + case 24000: + cs_bytes[3] |= IEC958_AES3_CON_FS_24000; + break; + case 32000: + cs_bytes[3] |= IEC958_AES3_CON_FS_32000; + break; + case 44100: + cs_bytes[3] |= IEC958_AES3_CON_FS_44100; + break; + case 48000: + cs_bytes[3] |= IEC958_AES3_CON_FS_48000; + break; + case 88200: + cs_bytes[3] |= IEC958_AES3_CON_FS_88200; + break; + case 96000: + cs_bytes[3] |= IEC958_AES3_CON_FS_96000; + break; + case 176400: + cs_bytes[3] |= IEC958_AES3_CON_FS_176400; + break; + case 192000: + cs_bytes[3] |= IEC958_AES3_CON_FS_192000; + break; + default: + printk(KERN_WARNING "unsupported sampling rate: %d\n", rate); + return -EINVAL; + } + + mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value); + mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value); + return 0; } @@ -634,7 +679,7 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream, return ret; if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE) - ret = mcasp_dit_hw_param(mcasp); + ret = mcasp_dit_hw_param(mcasp, params_rate(params)); else ret = mcasp_i2s_hw_param(mcasp, substream->stream);
In DIT (S/PDIF) mode, program the transmitted user bits to reflect the configured sample rate, along with some other details. Signed-off-by: Daniel Mack <zonque@gmail.com> --- v3 just changes variable names. sound/soc/davinci/davinci-mcasp.c | 49 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-)