diff options
author | Cástor Muñoz <cmvidal@gmail.com> | 2012-02-25 14:21:24 +0100 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2012-02-25 14:51:52 +0100 |
commit | 8c7d372e45c186084d9ba4c9f60e3c5f39d64a35 (patch) | |
tree | 8f7e4aa55f294577516e3c49cb8fa00a754dce0e /firmware/target/arm | |
parent | 31a05953e142b1ffff631cfb8b817880db7e4c27 (diff) | |
download | rockbox-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>
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/s5l8702/pcm-s5l8702.c | 9 |
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 | ||