diff options
author | Roman Tereshonkov <roman.tereshonkov@nokia.com> | 2010-10-11 07:47:32 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-10-24 20:13:20 -0400 |
commit | edb44b9b9cbff71f6aa9bebc384ee1896c8bfc2c (patch) | |
tree | 23d83d602e18de7c062198cc45e549f5380850cd /drivers | |
parent | 940fe282aeda984d32ca9e3d2be7df1b4c5161b1 (diff) |
mtd: onenand: fix 4KiB page onenand chip recognition
For 4Gib non-DDP chip it does not follow that it is always 4KiB page chip.
The number of data buffers is checked and if it is equal to 1
we suppose that it is 4KiB page onenand chip.
Signed-off-by: Roman Tereshonkov <roman.tereshonkov@nokia.com>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 33e0dbb0a96d..6b3a875647c9 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
@@ -3365,18 +3365,19 @@ static int onenand_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, | |||
3365 | static void onenand_check_features(struct mtd_info *mtd) | 3365 | static void onenand_check_features(struct mtd_info *mtd) |
3366 | { | 3366 | { |
3367 | struct onenand_chip *this = mtd->priv; | 3367 | struct onenand_chip *this = mtd->priv; |
3368 | unsigned int density, process; | 3368 | unsigned int density, process, numbufs; |
3369 | 3369 | ||
3370 | /* Lock scheme depends on density and process */ | 3370 | /* Lock scheme depends on density and process */ |
3371 | density = onenand_get_density(this->device_id); | 3371 | density = onenand_get_density(this->device_id); |
3372 | process = this->version_id >> ONENAND_VERSION_PROCESS_SHIFT; | 3372 | process = this->version_id >> ONENAND_VERSION_PROCESS_SHIFT; |
3373 | numbufs = this->read_word(this->base + ONENAND_REG_NUM_BUFFERS) >> 8; | ||
3373 | 3374 | ||
3374 | /* Lock scheme */ | 3375 | /* Lock scheme */ |
3375 | switch (density) { | 3376 | switch (density) { |
3376 | case ONENAND_DEVICE_DENSITY_4Gb: | 3377 | case ONENAND_DEVICE_DENSITY_4Gb: |
3377 | if (ONENAND_IS_DDP(this)) | 3378 | if (ONENAND_IS_DDP(this)) |
3378 | this->options |= ONENAND_HAS_2PLANE; | 3379 | this->options |= ONENAND_HAS_2PLANE; |
3379 | else | 3380 | else if (numbufs == 1) |
3380 | this->options |= ONENAND_HAS_4KB_PAGE; | 3381 | this->options |= ONENAND_HAS_4KB_PAGE; |
3381 | 3382 | ||
3382 | case ONENAND_DEVICE_DENSITY_2Gb: | 3383 | case ONENAND_DEVICE_DENSITY_2Gb: |