diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2006-09-28 09:38:36 -0400 |
|---|---|---|
| committer | Artem Bityutskiy <dedekind@infradead.org> | 2006-11-29 10:03:52 -0500 |
| commit | 29072b96078ffde36f03d51e6b5d0cff1ba8c7df (patch) | |
| tree | 1353a27ae7e594044c521e28abf558e3796f98c9 /include/linux | |
| parent | f6a7ecb18dabd88bd9f28e7bece564cabe8ffe82 (diff) | |
[MTD] NAND: add subpage write support
Many SLC NANDs support up to 4 writes at one NAND page. Add support
of this feature.
Signed-off-by: Artem Bityutskiy <dedekind@infradead.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mtd/mtd.h | 2 | ||||
| -rw-r--r-- | include/linux/mtd/nand.h | 9 |
2 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index e34bbc98d4fe..18acb6d0033b 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
| @@ -200,6 +200,8 @@ struct mtd_info { | |||
| 200 | 200 | ||
| 201 | /* ECC status information */ | 201 | /* ECC status information */ |
| 202 | struct mtd_ecc_stats ecc_stats; | 202 | struct mtd_ecc_stats ecc_stats; |
| 203 | /* Subpage shift (NAND) */ | ||
| 204 | int subpage_sft; | ||
| 203 | 205 | ||
| 204 | void *priv; | 206 | void *priv; |
| 205 | 207 | ||
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 6fc3e07497e0..1aeedf27a1ff 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
| @@ -166,6 +166,9 @@ typedef enum { | |||
| 166 | * for all large page devices, as they do not support | 166 | * for all large page devices, as they do not support |
| 167 | * autoincrement.*/ | 167 | * autoincrement.*/ |
| 168 | #define NAND_NO_READRDY 0x00000100 | 168 | #define NAND_NO_READRDY 0x00000100 |
| 169 | /* Chip does not allow subpage writes */ | ||
| 170 | #define NAND_NO_SUBPAGE_WRITE 0x00000200 | ||
| 171 | |||
| 169 | 172 | ||
| 170 | /* Options valid for Samsung large page devices */ | 173 | /* Options valid for Samsung large page devices */ |
| 171 | #define NAND_SAMSUNG_LP_OPTIONS \ | 174 | #define NAND_SAMSUNG_LP_OPTIONS \ |
| @@ -193,6 +196,9 @@ typedef enum { | |||
| 193 | /* Nand scan has allocated controller struct */ | 196 | /* Nand scan has allocated controller struct */ |
| 194 | #define NAND_CONTROLLER_ALLOC 0x80000000 | 197 | #define NAND_CONTROLLER_ALLOC 0x80000000 |
| 195 | 198 | ||
| 199 | /* Cell info constants */ | ||
| 200 | #define NAND_CI_CHIPNR_MSK 0x03 | ||
| 201 | #define NAND_CI_CELLTYPE_MSK 0x0C | ||
| 196 | 202 | ||
| 197 | /* | 203 | /* |
| 198 | * nand_state_t - chip states | 204 | * nand_state_t - chip states |
| @@ -341,6 +347,7 @@ struct nand_buffers { | |||
| 341 | * @chipsize: [INTERN] the size of one chip for multichip arrays | 347 | * @chipsize: [INTERN] the size of one chip for multichip arrays |
| 342 | * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 | 348 | * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 |
| 343 | * @pagebuf: [INTERN] holds the pagenumber which is currently in data_buf | 349 | * @pagebuf: [INTERN] holds the pagenumber which is currently in data_buf |
| 350 | * @subpagesize: [INTERN] holds the subpagesize | ||
| 344 | * @ecclayout: [REPLACEABLE] the default ecc placement scheme | 351 | * @ecclayout: [REPLACEABLE] the default ecc placement scheme |
| 345 | * @bbt: [INTERN] bad block table pointer | 352 | * @bbt: [INTERN] bad block table pointer |
| 346 | * @bbt_td: [REPLACEABLE] bad block table descriptor for flash lookup | 353 | * @bbt_td: [REPLACEABLE] bad block table descriptor for flash lookup |
| @@ -388,6 +395,8 @@ struct nand_chip { | |||
| 388 | unsigned long chipsize; | 395 | unsigned long chipsize; |
| 389 | int pagemask; | 396 | int pagemask; |
| 390 | int pagebuf; | 397 | int pagebuf; |
| 398 | int subpagesize; | ||
| 399 | uint8_t cellinfo; | ||
| 391 | int badblockpos; | 400 | int badblockpos; |
| 392 | 401 | ||
| 393 | nand_state_t state; | 402 | nand_state_t state; |
