diff options
Diffstat (limited to 'sound/soc/davinci')
-rw-r--r-- | sound/soc/davinci/davinci-mcasp.c | 24 | ||||
-rw-r--r-- | sound/soc/davinci/davinci-pcm.c | 6 |
2 files changed, 25 insertions, 5 deletions
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c index eca22d7829d2..7a06c0a86665 100644 --- a/sound/soc/davinci/davinci-mcasp.c +++ b/sound/soc/davinci/davinci-mcasp.c | |||
@@ -512,34 +512,49 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev, | |||
512 | int channel_size) | 512 | int channel_size) |
513 | { | 513 | { |
514 | u32 fmt = 0; | 514 | u32 fmt = 0; |
515 | u32 mask, rotate; | ||
515 | 516 | ||
516 | switch (channel_size) { | 517 | switch (channel_size) { |
517 | case DAVINCI_AUDIO_WORD_8: | 518 | case DAVINCI_AUDIO_WORD_8: |
518 | fmt = 0x03; | 519 | fmt = 0x03; |
520 | rotate = 6; | ||
521 | mask = 0x000000ff; | ||
519 | break; | 522 | break; |
520 | 523 | ||
521 | case DAVINCI_AUDIO_WORD_12: | 524 | case DAVINCI_AUDIO_WORD_12: |
522 | fmt = 0x05; | 525 | fmt = 0x05; |
526 | rotate = 5; | ||
527 | mask = 0x00000fff; | ||
523 | break; | 528 | break; |
524 | 529 | ||
525 | case DAVINCI_AUDIO_WORD_16: | 530 | case DAVINCI_AUDIO_WORD_16: |
526 | fmt = 0x07; | 531 | fmt = 0x07; |
532 | rotate = 4; | ||
533 | mask = 0x0000ffff; | ||
527 | break; | 534 | break; |
528 | 535 | ||
529 | case DAVINCI_AUDIO_WORD_20: | 536 | case DAVINCI_AUDIO_WORD_20: |
530 | fmt = 0x09; | 537 | fmt = 0x09; |
538 | rotate = 3; | ||
539 | mask = 0x000fffff; | ||
531 | break; | 540 | break; |
532 | 541 | ||
533 | case DAVINCI_AUDIO_WORD_24: | 542 | case DAVINCI_AUDIO_WORD_24: |
534 | fmt = 0x0B; | 543 | fmt = 0x0B; |
544 | rotate = 2; | ||
545 | mask = 0x00ffffff; | ||
535 | break; | 546 | break; |
536 | 547 | ||
537 | case DAVINCI_AUDIO_WORD_28: | 548 | case DAVINCI_AUDIO_WORD_28: |
538 | fmt = 0x0D; | 549 | fmt = 0x0D; |
550 | rotate = 1; | ||
551 | mask = 0x0fffffff; | ||
539 | break; | 552 | break; |
540 | 553 | ||
541 | case DAVINCI_AUDIO_WORD_32: | 554 | case DAVINCI_AUDIO_WORD_32: |
542 | fmt = 0x0F; | 555 | fmt = 0x0F; |
556 | rotate = 0; | ||
557 | mask = 0xffffffff; | ||
543 | break; | 558 | break; |
544 | 559 | ||
545 | default: | 560 | default: |
@@ -550,6 +565,13 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev, | |||
550 | RXSSZ(fmt), RXSSZ(0x0F)); | 565 | RXSSZ(fmt), RXSSZ(0x0F)); |
551 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, | 566 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, |
552 | TXSSZ(fmt), TXSSZ(0x0F)); | 567 | TXSSZ(fmt), TXSSZ(0x0F)); |
568 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, TXROT(rotate), | ||
569 | TXROT(7)); | ||
570 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_RXFMT_REG, RXROT(rotate), | ||
571 | RXROT(7)); | ||
572 | mcasp_set_reg(dev->base + DAVINCI_MCASP_TXMASK_REG, mask); | ||
573 | mcasp_set_reg(dev->base + DAVINCI_MCASP_RXMASK_REG, mask); | ||
574 | |||
553 | return 0; | 575 | return 0; |
554 | } | 576 | } |
555 | 577 | ||
@@ -638,7 +660,6 @@ static void davinci_hw_param(struct davinci_audio_dev *dev, int stream) | |||
638 | printk(KERN_ERR "playback tdm slot %d not supported\n", | 660 | printk(KERN_ERR "playback tdm slot %d not supported\n", |
639 | dev->tdm_slots); | 661 | dev->tdm_slots); |
640 | 662 | ||
641 | mcasp_set_reg(dev->base + DAVINCI_MCASP_TXMASK_REG, 0xFFFFFFFF); | ||
642 | mcasp_clr_bits(dev->base + DAVINCI_MCASP_TXFMCTL_REG, FSXDUR); | 663 | mcasp_clr_bits(dev->base + DAVINCI_MCASP_TXFMCTL_REG, FSXDUR); |
643 | } else { | 664 | } else { |
644 | /* bit stream is MSB first with no delay */ | 665 | /* bit stream is MSB first with no delay */ |
@@ -655,7 +676,6 @@ static void davinci_hw_param(struct davinci_audio_dev *dev, int stream) | |||
655 | printk(KERN_ERR "capture tdm slot %d not supported\n", | 676 | printk(KERN_ERR "capture tdm slot %d not supported\n", |
656 | dev->tdm_slots); | 677 | dev->tdm_slots); |
657 | 678 | ||
658 | mcasp_set_reg(dev->base + DAVINCI_MCASP_RXMASK_REG, 0xFFFFFFFF); | ||
659 | mcasp_clr_bits(dev->base + DAVINCI_MCASP_RXFMCTL_REG, FSRDUR); | 679 | mcasp_clr_bits(dev->base + DAVINCI_MCASP_RXFMCTL_REG, FSRDUR); |
660 | } | 680 | } |
661 | } | 681 | } |
diff --git a/sound/soc/davinci/davinci-pcm.c b/sound/soc/davinci/davinci-pcm.c index 091dacb78b4d..2f7da49ed34f 100644 --- a/sound/soc/davinci/davinci-pcm.c +++ b/sound/soc/davinci/davinci-pcm.c | |||
@@ -145,7 +145,7 @@ static int davinci_pcm_dma_request(struct snd_pcm_substream *substream) | |||
145 | prtd->master_lch = ret; | 145 | prtd->master_lch = ret; |
146 | 146 | ||
147 | /* Request parameter RAM reload slot */ | 147 | /* Request parameter RAM reload slot */ |
148 | ret = edma_alloc_slot(EDMA_SLOT_ANY); | 148 | ret = edma_alloc_slot(EDMA_CTLR(prtd->master_lch), EDMA_SLOT_ANY); |
149 | if (ret < 0) { | 149 | if (ret < 0) { |
150 | edma_free_channel(prtd->master_lch); | 150 | edma_free_channel(prtd->master_lch); |
151 | return ret; | 151 | return ret; |
@@ -162,8 +162,8 @@ static int davinci_pcm_dma_request(struct snd_pcm_substream *substream) | |||
162 | * so davinci_pcm_enqueue_dma() takes less time in IRQ. | 162 | * so davinci_pcm_enqueue_dma() takes less time in IRQ. |
163 | */ | 163 | */ |
164 | edma_read_slot(prtd->slave_lch, &p_ram); | 164 | edma_read_slot(prtd->slave_lch, &p_ram); |
165 | p_ram.opt |= TCINTEN | EDMA_TCC(prtd->master_lch); | 165 | p_ram.opt |= TCINTEN | EDMA_TCC(EDMA_CHAN_SLOT(prtd->master_lch)); |
166 | p_ram.link_bcntrld = prtd->slave_lch << 5; | 166 | p_ram.link_bcntrld = EDMA_CHAN_SLOT(prtd->slave_lch) << 5; |
167 | edma_write_slot(prtd->slave_lch, &p_ram); | 167 | edma_write_slot(prtd->slave_lch, &p_ram); |
168 | 168 | ||
169 | return 0; | 169 | return 0; |