mtd-physmap: add support users can assign the probe type in board files

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Sun Aug 8 07:59:01 EDT 2010


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=78ef7fab0eb0a5b159842bac89aed74bb0aa7bfe
Commit:     78ef7fab0eb0a5b159842bac89aed74bb0aa7bfe
Parent:     73ee5760253dc8893502e19a9cb118d25dab21ec
Author:     Barry Song <21cnbao at gmail.com>
AuthorDate: Fri Jan 15 15:50:14 2010 +0800
Committer:  David Woodhouse <David.Woodhouse at intel.com>
CommitDate: Sun Aug 8 12:28:15 2010 +0100

    mtd-physmap: add support users can assign the probe type in board files
    
    There are three reasons to add this support:
    1. users probably know the interface type of their flashs, then probe
    can be faster if they give the right type in platform data since wrong
    types will not be detected.
    2. sometimes, detecting can cause destory to system. For example, for
    kernel XIP, detecting can cause NOR enter a mode instructions can not
    be fetched right, which will make kernel crash.
    3. For a new probe which is not listed in the rom_probe_types, if users
    assign it in board files, physmap can still probe it.
    
    Signed-off-by: Barry Song <21cnbao at gmail.com>
    Signed-off-by: Mike Frysinger <vapier.adi at gmail.com>
    Signed-off-by: David Woodhouse <David.Woodhouse at intel.com>
---
 drivers/mtd/maps/physmap.c  |    8 ++++++--
 include/linux/mtd/physmap.h |    1 +
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/maps/physmap.c b/drivers/mtd/maps/physmap.c
index 829aa4b..4c18b98 100644
--- a/drivers/mtd/maps/physmap.c
+++ b/drivers/mtd/maps/physmap.c
@@ -136,8 +136,12 @@ static int physmap_flash_probe(struct platform_device *dev)
 		simple_map_init(&info->map[i]);
 
 		probe_type = rom_probe_types;
-		for (; info->mtd[i] == NULL && *probe_type != NULL; probe_type++)
-			info->mtd[i] = do_map_probe(*probe_type, &info->map[i]);
+		if (physmap_data->probe_type == NULL) {
+			for (; info->mtd[i] == NULL && *probe_type != NULL; probe_type++)
+				info->mtd[i] = do_map_probe(*probe_type, &info->map[i]);
+		} else
+			info->mtd[i] = do_map_probe(physmap_data->probe_type, &info->map[i]);
+
 		if (info->mtd[i] == NULL) {
 			dev_err(&dev->dev, "map_probe failed\n");
 			err = -ENXIO;
diff --git a/include/linux/mtd/physmap.h b/include/linux/mtd/physmap.h
index 76f7cab..bcfd9f7 100644
--- a/include/linux/mtd/physmap.h
+++ b/include/linux/mtd/physmap.h
@@ -25,6 +25,7 @@ struct physmap_flash_data {
 	void			(*set_vpp)(struct map_info *, int);
 	unsigned int		nr_parts;
 	unsigned int		pfow_base;
+	char                    *probe_type;
 	struct mtd_partition	*parts;
 };
 



More information about the linux-mtd-cvs mailing list