diff options
author | Zoltan Puskas <zpuskas@dension.com> | 2013-02-20 11:31:35 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-03-03 22:03:39 -0500 |
commit | f6a75d95048895ed3fa6758e1ec1238d945472c7 (patch) | |
tree | 763560e2f708d3f0511b38616a576c9b19dd6682 | |
parent | 6dbe51c251a327e012439c4772097a13df43c5b8 (diff) |
ASoC: atmel: Add slave mode support to SSC in DSP Mode A
Add previously unsupported slave mode to the SSC peripheral when using
DSP/PCM Mode A format on the Atmel ARM platform.
Signed-off-by: Zoltan Puskas <zpuskas@dension.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/atmel/atmel_ssc_dai.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c index e13580d6c476..94da62345a27 100644 --- a/sound/soc/atmel/atmel_ssc_dai.c +++ b/sound/soc/atmel/atmel_ssc_dai.c | |||
@@ -533,6 +533,49 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream, | |||
533 | break; | 533 | break; |
534 | 534 | ||
535 | case SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_CBM_CFM: | 535 | case SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_CBM_CFM: |
536 | /* | ||
537 | * DSP/PCM Mode A format, CODEC supplies BCLK and LRC clocks. | ||
538 | * | ||
539 | * The SSC transmit clock is obtained from the BCLK signal on | ||
540 | * on the TK line, and the SSC receive clock is | ||
541 | * generated from the transmit clock. | ||
542 | * | ||
543 | * Data is transferred on first BCLK after LRC pulse rising | ||
544 | * edge.If stereo, the right channel data is contiguous with | ||
545 | * the left channel data. | ||
546 | */ | ||
547 | rcmr = SSC_BF(RCMR_PERIOD, 0) | ||
548 | | SSC_BF(RCMR_STTDLY, START_DELAY) | ||
549 | | SSC_BF(RCMR_START, SSC_START_RISING_RF) | ||
550 | | SSC_BF(RCMR_CKI, SSC_CKI_RISING) | ||
551 | | SSC_BF(RCMR_CKO, SSC_CKO_NONE) | ||
552 | | SSC_BF(RCMR_CKS, SSC_CKS_PIN); | ||
553 | |||
554 | rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE) | ||
555 | | SSC_BF(RFMR_FSOS, SSC_FSOS_NONE) | ||
556 | | SSC_BF(RFMR_FSLEN, 0) | ||
557 | | SSC_BF(RFMR_DATNB, (channels - 1)) | ||
558 | | SSC_BIT(RFMR_MSBF) | ||
559 | | SSC_BF(RFMR_LOOP, 0) | ||
560 | | SSC_BF(RFMR_DATLEN, (bits - 1)); | ||
561 | |||
562 | tcmr = SSC_BF(TCMR_PERIOD, 0) | ||
563 | | SSC_BF(TCMR_STTDLY, START_DELAY) | ||
564 | | SSC_BF(TCMR_START, SSC_START_RISING_RF) | ||
565 | | SSC_BF(TCMR_CKI, SSC_CKI_FALLING) | ||
566 | | SSC_BF(TCMR_CKO, SSC_CKO_NONE) | ||
567 | | SSC_BF(TCMR_CKS, SSC_CKS_PIN); | ||
568 | |||
569 | tfmr = SSC_BF(TFMR_FSEDGE, SSC_FSEDGE_POSITIVE) | ||
570 | | SSC_BF(TFMR_FSDEN, 0) | ||
571 | | SSC_BF(TFMR_FSOS, SSC_FSOS_NONE) | ||
572 | | SSC_BF(TFMR_FSLEN, 0) | ||
573 | | SSC_BF(TFMR_DATNB, (channels - 1)) | ||
574 | | SSC_BIT(TFMR_MSBF) | ||
575 | | SSC_BF(TFMR_DATDEF, 0) | ||
576 | | SSC_BF(TFMR_DATLEN, (bits - 1)); | ||
577 | break; | ||
578 | |||
536 | default: | 579 | default: |
537 | printk(KERN_WARNING "atmel_ssc_dai: unsupported DAI format 0x%x\n", | 580 | printk(KERN_WARNING "atmel_ssc_dai: unsupported DAI format 0x%x\n", |
538 | ssc_p->daifmt); | 581 | ssc_p->daifmt); |