Skip to contentSkip to conversation

mmc: implement SD-combo (IO+mem) support

PATCH In review [email protected] 1 participant 1 message Aug 11, 2010 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

PATCH 33/177 mmc: implement SD-combo (IO+mem) support

From: Michal Miroslaw <[email protected]>

---

 drivers/mmc/core/bus.c   |    9 ++
 drivers/mmc/core/core.c  |   12 ++-
 drivers/mmc/core/sdio.c  |  135 +++++++++++++++++++++++++++++++------
 include/linux/mmc/card.h |    1 
 4 files changed, 134 insertions(+), 23 deletions(-)
drivers/mmc/core/bus.c renamed from drivers/mmc/core/bus.c~mmc-implement-sd-combo-iomem-support +9 -0
diff -puN drivers/mmc/core/bus.c~mmc-implement-sd-combo-iomem-support drivers/mmc/core/bus.c
@@ -37,6 +37,8 @@ static ssize_t mmc_type_show(struct devi
 		return sprintf(buf, "SD\n");
 	case MMC_TYPE_SDIO:
 		return sprintf(buf, "SDIO\n");
+	case MMC_TYPE_SD_COMBO:
+		return sprintf(buf, "SDcombo\n");
 	default:
 		return -EFAULT;
 	}
@@ -74,6 +76,9 @@ mmc_bus_uevent(struct device *dev, struc
 	case MMC_TYPE_SDIO:
 		type = "SDIO";
 		break;
+	case MMC_TYPE_SD_COMBO:
+		type = "SDcombo";
+		break;
 	default:
 		type = NULL;
 	}
@@ -239,6 +244,10 @@ int mmc_add_card(struct mmc_card *card)
 	case MMC_TYPE_SDIO:
 		type = "SDIO";
 		break;
+	case MMC_TYPE_SD_COMBO:
+		type = "SD-combo";
+		if (mmc_card_blockaddr(card))
+			type = "SDHC-combo";
 	default:
 		type = "?";
 		break;
drivers/mmc/core/core.c renamed from drivers/mmc/core/core.c~mmc-implement-sd-combo-iomem-support +10 -2
diff -puN drivers/mmc/core/core.c~mmc-implement-sd-combo-iomem-support drivers/mmc/core/core.c
@@ -1099,8 +1099,15 @@ void mmc_rescan(struct work_struct *work
 	 */
 	err = mmc_send_io_op_cond(host, 0, &ocr);
 	if (!err) {
-		if (mmc_attach_sdio(host, ocr))
-			mmc_power_off(host);
+		if (mmc_attach_sdio(host, ocr)) {
+			mmc_claim_host(host);
+			/* try SDMEM (but not MMC) even if SDIO is broken */
+			if (mmc_send_app_op_cond(host, 0, &ocr))
+				goto out_fail;
+
+			if (mmc_attach_sd(host, ocr))
+				mmc_power_off(host);
+		}
 		goto out;
 	}
 
@@ -1124,6 +1131,7 @@ void mmc_rescan(struct work_struct *work
 		goto out;
 	}
 
+out_fail:
 	mmc_release_host(host);
 	mmc_power_off(host);
 
drivers/mmc/core/sdio.c renamed from drivers/mmc/core/sdio.c~mmc-implement-sd-combo-iomem-support +114 -21

209 lines not on this page · raw message

include/linux/mmc/card.h renamed from include/linux/mmc/card.h~mmc-implement-sd-combo-iomem-support +1 -0
diff -puN include/linux/mmc/card.h~mmc-implement-sd-combo-iomem-support include/linux/mmc/card.h
@@ -93,6 +93,7 @@ struct mmc_card {
 #define MMC_TYPE_MMC		0		/* MMC card */
 #define MMC_TYPE_SD		1		/* SD card */
 #define MMC_TYPE_SDIO		2		/* SDIO card */
+#define MMC_TYPE_SD_COMBO	3		/* SD combo (IO+mem) card */
 	unsigned int		state;		/* (our) card state */
 #define MMC_STATE_PRESENT	(1<<0)		/* present in sysfs */
 #define MMC_STATE_READONLY	(1<<1)		/* card is read-only */

_