[U-Boot] [PATCH 2/2] SDHC/MMC: remove the member has_init

Chang-Ming.Huang at freescale.com Chang-Ming.Huang at freescale.com
Tue Mar 27 12:25:01 CEST 2012


From: Jerry Huang <Chang-Ming.Huang at freescale.com>

When first inserting the SD card to slot, the command "mmcinfo" can
display the card information correctly.
But, then removing the SD card or inserting another SD card to slot,
the command "mmcinfo" can't display the information correctly.

Therefore remove this member 'has_init' from 'structure mmc',
and add the codes to check the mmc_init, only when mmc_init return
the right value, driver will print the information.

Below is the error log SD card removed:
=> mmcinfo
MMC: no card present
Device: FSL_SDHC
Manufacturer ID: 3
OEM: 5344
Name: SD02G
Tran Speed: 25000000
Rd Block Len: 512
SD version 2.0
High Capacity: No
Capacity: 1.8 GiB
Bus Width: 4-bit

Signed-off-by: Jerry Huang <Chang-Ming.Huang at freescale.com>
CC: Andy Fleming <afleming at gmail.com>
---
 common/cmd_mmc.c  |    7 ++-----
 drivers/mmc/mmc.c |    9 +--------
 include/mmc.h     |    1 -
 3 files changed, 3 insertions(+), 14 deletions(-)

diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index 8f13c22..382ea4e 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -131,9 +131,8 @@ int do_mmcinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	mmc = find_mmc_device(curr_device);
 
 	if (mmc) {
-		mmc_init(mmc);
-
-		print_mmcinfo(mmc);
+		if (!mmc_init(mmc))
+			print_mmcinfo(mmc);
 		return 0;
 	} else {
 		printf("no mmc device at slot %x\n", curr_device);
@@ -172,8 +171,6 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			return 1;
 		}
 
-		mmc->has_init = 0;
-
 		if (mmc_init(mmc))
 			return 1;
 		else
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 9055b01..ad0ebc3 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1235,14 +1235,10 @@ int mmc_init(struct mmc *mmc)
 	int err;
 
 	if (mmc_getcd(mmc) == 0) {
-		mmc->has_init = 0;
 		printf("MMC: no card present\n");
 		return NO_CARD_ERR;
 	}
 
-	if (mmc->has_init)
-		return 0;
-
 	err = mmc->init(mmc);
 
 	if (err)
@@ -1277,10 +1273,7 @@ int mmc_init(struct mmc *mmc)
 	}
 
 	err = mmc_startup(mmc);
-	if (err)
-		mmc->has_init = 0;
-	else
-		mmc->has_init = 1;
+
 	return err;
 }
 
diff --git a/include/mmc.h b/include/mmc.h
index 8744604..8e37504 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -277,7 +277,6 @@ struct mmc {
 	void *priv;
 	uint voltages;
 	uint version;
-	uint has_init;
 	uint f_min;
 	uint f_max;
 	int high_capacity;
-- 
1.7.5.4




More information about the U-Boot mailing list