summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2010-03-03 02:36:15 +0000
committerMichael Sparmann <theseven@rockbox.org>2010-03-03 02:36:15 +0000
commitaadecdd77e42d47b33e0a440c4e3955378cdfd70 (patch)
tree32202030011b7a7ec916ef9240a11255357cdc26 /firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
parentb8eb44d7dbbc89eef1bc89dc109aea4ba8001470 (diff)
downloadrockbox-aadecdd77e42d47b33e0a440c4e3955378cdfd70.tar.gz
rockbox-aadecdd77e42d47b33e0a440c4e3955378cdfd70.zip
Fix numerous non-critical iPod Nano 2G FTL bugs
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24999 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c')
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
index 7961b94f7f..3b5f88d3c2 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
@@ -406,9 +406,12 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer,
406 return nand_unlock(rc); 406 return nand_unlock(rc);
407 } 407 }
408 if (nand_transfer_data(bank, 0, spare, 0x40)) return nand_unlock(1); 408 if (nand_transfer_data(bank, 0, spare, 0x40)) return nand_unlock(1);
409 memcpy(nand_ecc, &spare[0xC], 0x28); 409 if (databuffer)
410 rc |= (ecc_decode(3, data, nand_ecc) & 0xF) << 4; 410 {
411 if (databuffer && data != databuffer) memcpy(databuffer, data, 0x800); 411 memcpy(nand_ecc, &spare[0xC], 0x28);
412 rc |= (ecc_decode(3, data, nand_ecc) & 0xF) << 4;
413 if (data != databuffer) memcpy(databuffer, data, 0x800);
414 }
412 memset(nand_ctrl, 0xFF, 0x200); 415 memset(nand_ctrl, 0xFF, 0x200);
413 memcpy(nand_ctrl, spare, 0xC); 416 memcpy(nand_ctrl, spare, 0xC);
414 memcpy(nand_ecc, &spare[0x34], 0xC); 417 memcpy(nand_ecc, &spare[0x34], 0xC);