Commit c0c9fe847aa4504d7f19fb9db7fbfc5ee0df8fd5

Authored by Bo Shen
Committed by Greg Kroah-Hartman
1 parent 31bf97f511

ASoC: atmel_ssc_dai: fix start event for I2S mode

commit a43bd7e125143b875caae6d4f9938855b440faaf upstream.

According to the I2S specification information as following:
  - WS = 0, channel 1 (left)
  - WS = 1, channel 2 (right)
So, the start event should be TF/RF falling edge.

Reported-by: Songjun Wu <songjun.wu@atmel.com>
Signed-off-by: Bo Shen <voice.shen@atmel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 1 changed file with 4 additions and 14 deletions Side-by-side Diff

sound/soc/atmel/atmel_ssc_dai.c
... ... @@ -345,7 +345,6 @@
345 345 struct atmel_pcm_dma_params *dma_params;
346 346 int dir, channels, bits;
347 347 u32 tfmr, rfmr, tcmr, rcmr;
348   - int start_event;
349 348 int ret;
350 349 int fslen, fslen_ext;
351 350  
352 351  
353 352  
... ... @@ -454,19 +453,10 @@
454 453 * The SSC transmit clock is obtained from the BCLK signal on
455 454 * on the TK line, and the SSC receive clock is
456 455 * generated from the transmit clock.
457   - *
458   - * For single channel data, one sample is transferred
459   - * on the falling edge of the LRC clock.
460   - * For two channel data, one sample is
461   - * transferred on both edges of the LRC clock.
462 456 */
463   - start_event = ((channels == 1)
464   - ? SSC_START_FALLING_RF
465   - : SSC_START_EDGE_RF);
466   -
467 457 rcmr = SSC_BF(RCMR_PERIOD, 0)
468 458 | SSC_BF(RCMR_STTDLY, START_DELAY)
469   - | SSC_BF(RCMR_START, start_event)
  459 + | SSC_BF(RCMR_START, SSC_START_FALLING_RF)
470 460 | SSC_BF(RCMR_CKI, SSC_CKI_RISING)
471 461 | SSC_BF(RCMR_CKO, SSC_CKO_NONE)
472 462 | SSC_BF(RCMR_CKS, ssc->clk_from_rk_pin ?
473 463  
... ... @@ -475,14 +465,14 @@
475 465 rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
476 466 | SSC_BF(RFMR_FSOS, SSC_FSOS_NONE)
477 467 | SSC_BF(RFMR_FSLEN, 0)
478   - | SSC_BF(RFMR_DATNB, 0)
  468 + | SSC_BF(RFMR_DATNB, (channels - 1))
479 469 | SSC_BIT(RFMR_MSBF)
480 470 | SSC_BF(RFMR_LOOP, 0)
481 471 | SSC_BF(RFMR_DATLEN, (bits - 1));
482 472  
483 473 tcmr = SSC_BF(TCMR_PERIOD, 0)
484 474 | SSC_BF(TCMR_STTDLY, START_DELAY)
485   - | SSC_BF(TCMR_START, start_event)
  475 + | SSC_BF(TCMR_START, SSC_START_FALLING_RF)
486 476 | SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
487 477 | SSC_BF(TCMR_CKO, SSC_CKO_NONE)
488 478 | SSC_BF(TCMR_CKS, ssc->clk_from_rk_pin ?
... ... @@ -492,7 +482,7 @@
492 482 | SSC_BF(TFMR_FSDEN, 0)
493 483 | SSC_BF(TFMR_FSOS, SSC_FSOS_NONE)
494 484 | SSC_BF(TFMR_FSLEN, 0)
495   - | SSC_BF(TFMR_DATNB, 0)
  485 + | SSC_BF(TFMR_DATNB, (channels - 1))
496 486 | SSC_BIT(TFMR_MSBF)
497 487 | SSC_BF(TFMR_DATDEF, 0)
498 488 | SSC_BF(TFMR_DATLEN, (bits - 1));