summaryrefslogtreecommitdiff
path: root/firmware/drivers/nand_id.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/nand_id.c')
-rw-r--r--firmware/drivers/nand_id.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/firmware/drivers/nand_id.c b/firmware/drivers/nand_id.c
index 4dc1ec1ceb..dfb96c8820 100644
--- a/firmware/drivers/nand_id.c
+++ b/firmware/drivers/nand_id.c
@@ -24,35 +24,38 @@
24 24
25struct nand_manufacturer 25struct nand_manufacturer
26{ 26{
27 unsigned char id; 27 unsigned char id;
28 struct nand_info* info; 28 struct nand_info* info;
29 unsigned short total; 29 unsigned short total;
30}; 30};
31 31
32/* { pages_per_block, blocks_per_bank, page_size, spare_size, col_cycles, row_cycles } */
33
34static const struct nand_info samsung[] = 32static const struct nand_info samsung[] =
35{ 33{
36 /* K9F4G08UOM */ 34/* { id1, id2, pages_per_block, blocks_per_bank, page_size, spare_size, col_cycles, row_cycles } */
37 {0xDC, 0x10, 64, 4096, 2048, 64, 2, 3}, 35
38 /* K9K8G08UOM */ 36 /* K9F4G08UOM */
39 {0xD3, 0x51, 64, 8192, 2048, 64, 2, 3}, 37 {0xDC, 0x10, 64, 4096, 2048, 64, 2, 3 },
40 /* K9LAG08UOM */ 38 /* K9K8G08UOM */
41 {0xD5, 0x55, 128, 8192, 2048, 64, 2, 3}, 39 {0xD3, 0x51, 64, 8192, 2048, 64, 2, 3 },
42 /* K9LBG08UOM, K9HBG08U1M, K9MCG08U5M */ 40 /* K9LAG08UOM */
43 {0xD7, 0x55, 128, 8192, 4096, 128, 2, 3} 41 {0xD5, 0x55, 128, 8192, 2048, 64, 2, 3 },
42 /* K9LBG08UOM, K9HBG08U1M, K9MCG08U5M */
43 {0xD7, 0x55, 128, 8192, 4096, 128, 2, 3 },
44}; 44};
45 45
46#define M(id, x) {id, (struct nand_info*)x, (sizeof(x)/sizeof(struct nand_info))} 46#define NI(id, x) {id, (struct nand_info*)x, (sizeof(x)/sizeof(struct nand_info))}
47static const struct nand_manufacturer all[] = 47static const struct nand_manufacturer all[] =
48{ 48{
49 M(0xEC, samsung), 49 NI(0xEC, samsung),
50}; 50};
51 51
52// --------------------------------------------------------------------------------------------------
53
52struct nand_info* nand_identify(unsigned char data[5]) 54struct nand_info* nand_identify(unsigned char data[5])
53 { 55 {
54 unsigned int i; 56 unsigned int i;
55 int found = -1; 57 int found = -1;
58
56 for(i = 0; i < (sizeof(all)/sizeof(struct nand_manufacturer)); i++) 59 for(i = 0; i < (sizeof(all)/sizeof(struct nand_manufacturer)); i++)
57 { 60 {
58 if(data[0] == all[i].id) 61 if(data[0] == all[i].id)
@@ -61,6 +64,7 @@ struct nand_info* nand_identify(unsigned char data[5])
61 break; 64 break;
62 } 65 }
63 } 66 }
67
64 if(found < 0) 68 if(found < 0)
65 return NULL; 69 return NULL;
66 70