2012-11-09 09:17:08

by Huang Shijie

[permalink] [raw]
Subject: [PATCH] mtd: de-select the chip when it is not used

When we scan several nand chips with nand_scan(), such as
.......................
nand_scan(*, 2);
.......................

In nand_scan_ident(), the maxchips will become 2, so the current code
will select chip 1 to read the device ID. But the chip 0 is still
selected in this case.

To make the logic clear, we'd better de-select the chip when it is not used.

This patch de-select the nand chip if it is not used any more.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/mtd/nand/nand_base.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index ec6841d..fd5fa3b 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3325,6 +3325,8 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
return PTR_ERR(type);
}

+ chip->select_chip(mtd, -1);
+
/* Check for a chip array */
for (i = 1; i < maxchips; i++) {
chip->select_chip(mtd, i);
@@ -3334,8 +3336,11 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
/* Read manufacturer and device IDs */
if (nand_maf_id != chip->read_byte(mtd) ||
- nand_dev_id != chip->read_byte(mtd))
+ nand_dev_id != chip->read_byte(mtd)) {
+ chip->select_chip(mtd, -1);
break;
+ }
+ chip->select_chip(mtd, -1);
}
if (i > 1)
pr_info("%d NAND chips detected\n", i);
@@ -3594,9 +3599,6 @@ int nand_scan_tail(struct mtd_info *mtd)
/* Initialize state */
chip->state = FL_READY;

- /* De-select the device */
- chip->select_chip(mtd, -1);
-
/* Invalidate the pagebuffer reference */
chip->pagebuf = -1;

--
1.7.0.4


2012-11-18 14:05:16

by Artem Bityutskiy

[permalink] [raw]
Subject: Re: [PATCH] mtd: de-select the chip when it is not used

On Fri, 2012-11-09 at 16:23 +0800, Huang Shijie wrote:
> When we scan several nand chips with nand_scan(), such as
> .......................
> nand_scan(*, 2);
> .......................
>
> In nand_scan_ident(), the maxchips will become 2, so the current code
> will select chip 1 to read the device ID. But the chip 0 is still
> selected in this case.
>
> To make the logic clear, we'd better de-select the chip when it is not used.
>
> This patch de-select the nand chip if it is not used any more.
>
> Signed-off-by: Huang Shijie <[email protected]>

Pushed to l2-mtd.git, thanks!

--
Best Regards,
Artem Bityutskiy


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part