Commit c0c9fe847aa4504d7f19fb9db7fbfc5ee0df8fd5
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)); |