summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCástor Muñoz <cmvidal@gmail.com>2012-02-25 14:21:24 +0100
committerNils Wallménius <nils@rockbox.org>2012-02-25 14:51:52 +0100
commit8c7d372e45c186084d9ba4c9f60e3c5f39d64a35 (patch)
tree8f7e4aa55f294577516e3c49cb8fa00a754dce0e
parent31a05953e142b1ffff631cfb8b817880db7e4c27 (diff)
downloadrockbox-8c7d372e45c186084d9ba4c9f60e3c5f39d64a35.tar.gz
rockbox-8c7d372e45c186084d9ba4c9f60e3c5f39d64a35.zip
FS#12519 - iPod Classic/6G: swap L-R audio channels by Cástor Muñoz
Fixes swapped left and right channels on ipod 6g and changes the i2s config to send samples as 16 bits instead of 16 zero padded to 24 bits to the dac. Change-Id: Icfecfdf0f6868bdb01c11dced604ebfceb874aa1 Signed-off-by: Nils Wallménius <nils@rockbox.org>
-rw-r--r--firmware/target/arm/s5l8702/pcm-s5l8702.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c
index 52a040c35a..b58ef0f4d3 100644
--- a/firmware/target/arm/s5l8702/pcm-s5l8702.c
+++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c
@@ -71,7 +71,7 @@ void INT_DMAC0C0(void)
71 if (!pcm_remaining) 71 if (!pcm_remaining)
72 { 72 {
73 pcm_lli->nextlli = NULL; 73 pcm_lli->nextlli = NULL;
74 pcm_lli->control = 0x75249000; 74 pcm_lli->control = 0x7524a000;
75 commit_dcache(); 75 commit_dcache();
76 return; 76 return;
77 } 77 }
@@ -92,7 +92,7 @@ void INT_DMAC0C0(void)
92 pcm_lli[i].srcaddr = (void*)dataptr; 92 pcm_lli[i].srcaddr = (void*)dataptr;
93 pcm_lli[i].dstaddr = (void*)((int)&I2STXDB0); 93 pcm_lli[i].dstaddr = (void*)((int)&I2STXDB0);
94 pcm_lli[i].nextlli = chunksize ? &pcm_lli[i + 1] : lastlli; 94 pcm_lli[i].nextlli = chunksize ? &pcm_lli[i + 1] : lastlli;
95 pcm_lli[i].control = (chunksize ? 0x75249000 : 0xf5249000) | (thislli / 2); 95 pcm_lli[i].control = (chunksize ? 0x7524a000 : 0xf524a000) | (thislli / 2);
96 dataptr += thislli; 96 dataptr += thislli;
97 i++; 97 i++;
98 } 98 }
@@ -105,7 +105,7 @@ void INT_DMAC0C0(void)
105 else lastlli->srcaddr = dataptr; 105 else lastlli->srcaddr = dataptr;
106 lastlli->dstaddr = (void*)((int)&I2STXDB0); 106 lastlli->dstaddr = (void*)((int)&I2STXDB0);
107 lastlli->nextlli = last ? NULL : pcm_lli; 107 lastlli->nextlli = last ? NULL : pcm_lli;
108 lastlli->control = (last ? 0xf5249000 : 0x75249000) | (lastsize / 2); 108 lastlli->control = (last ? 0xf524a000 : 0x7524a000) | (lastsize / 2);
109 dataptr += lastsize; 109 dataptr += lastsize;
110 commit_dcache(); 110 commit_dcache();
111 if (!(DMAC0C0CONFIG & 1) && (pcm_lli[0].control & 0xfff)) 111 if (!(DMAC0C0CONFIG & 1) && (pcm_lli[0].control & 0xfff))
@@ -123,7 +123,6 @@ void pcm_play_dma_start(const void* addr, size_t size)
123 dataptr = (const unsigned char*)addr; 123 dataptr = (const unsigned char*)addr;
124 pcm_remaining = size; 124 pcm_remaining = size;
125 I2STXCOM = 0xe; 125 I2STXCOM = 0xe;
126 DMAC0CONFIG |= 4;
127 INT_DMAC0C0(); 126 INT_DMAC0C0();
128} 127}
129 128
@@ -145,7 +144,7 @@ void pcm_play_dma_init(void)
145 PWRCON(0) &= ~(1 << 4); 144 PWRCON(0) &= ~(1 << 4);
146 PWRCON(1) &= ~(1 << 7); 145 PWRCON(1) &= ~(1 << 7);
147 I2S40 = 0x110; 146 I2S40 = 0x110;
148 I2STXCON = 0xb100059; 147 I2STXCON = 0xb100019;
149 I2SCLKCON = 1; 148 I2SCLKCON = 1;
150 VIC0INTENABLE = 1 << IRQ_DMAC0; 149 VIC0INTENABLE = 1 << IRQ_DMAC0;
151 150