Fix mistaken changes in r30219
[kugel-rb.git] / firmware / drivers / nand_id.c
blobf2b9861c7cb4f39d1c4fd9628f9149fbe34ec124
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2008 by Maurus Cuelenaere
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include <stdlib.h>
23 #include "nand_id.h"
25 struct nand_manufacturer
27 unsigned char id;
28 struct nand_info* info;
29 unsigned short total;
32 static const struct nand_info samsung[] =
35 id1, id2
36 pages/block, blocks, page_size, spare_size, col_cycles, row_cycles, planes
37 */
38 {0xDC, 0x10, /* K9F4G08UOM */
39 64, 4096, 2048, 64, 2, 3, 1 },
41 {0xD3, 0x51, /* K9K8G08UOM */
42 64, 8192, 2048, 64, 2, 3, 1 },
44 {0xD5, 0x14, /* K9GAG08UOM */
45 128, 4096, 4096, 128, 2, 3, 2 },
47 {0xD5, 0x55, /* K9LAG08UOM, K9HBG08U1M, K9MCG08U5M */
48 128, 8192, 2048, 64, 2, 3, 4 },
50 {0xD7, 0x55, /* K9LBG08UOM */
51 128, 8192, 4096, 128, 2, 3, 4 },
54 #define NI(id, x) {id, (struct nand_info*)x, (sizeof(x)/sizeof(struct nand_info))}
55 static const struct nand_manufacturer all[] =
57 NI(0xEC, samsung),
60 // -----------------------------------------------------------------------------
62 struct nand_info* nand_identify(unsigned char data[5])
64 unsigned int i;
65 int found = -1;
67 for(i = 0; i < (sizeof(all)/sizeof(struct nand_manufacturer)); i++)
69 if(data[0] == all[i].id)
71 found = i;
72 break;
76 if(found < 0)
77 return NULL;
79 for(i = 0; i < all[found].total; i++)
81 if(data[1] == all[found].info[i].dev_id &&
82 data[2] == all[found].info[i].dev_id2)
83 return &all[found].info[i];
86 return NULL;