summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorPavan Kunapuli <pkunapuli@nvidia.com>2010-12-20 15:48:45 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-04-26 15:48:42 -0700
commitfd4a3d3c3e8c745e448257601e06c999dd02d6e7 (patch)
treea9491e51ae65fa5afc26af19c696778e0a1d7a03 /include/linux
parent7c5e1d658e6ddae99ad8d1af971cc4477a3dd314 (diff)
mmc:Add ddr mode support for eMMC v4.4
Adding ddr mode support for eMMC v4.4 cards. If the card and host controller support ddr mode, configuring it. Setting clock divisor as 1 in case ddr mode is configured. Original-Change-Id: I94c7f2c4d23e856a67ccf312672e5f1eaee04a91 Reviewed-on: http://git-master/r/13798 Tested-by: Pavan Kunapuli <pkunapuli@nvidia.com> Reviewed-by: Scott Williams <scwilliams@nvidia.com> Change-Id: I79cd2f6a5ca1e8e00e4bceed5fdf61b4543aa1e4
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mmc/card.h2
-rw-r--r--include/linux/mmc/host.h6
-rw-r--r--include/linux/mmc/mmc.h5
3 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 13fe335fe653..832e494296c3 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -54,6 +54,7 @@ struct mmc_ext_csd {
unsigned int sec_trim_mult; /* Secure trim multiplier */
unsigned int sec_erase_mult; /* Secure erase multiplier */
unsigned int trim_timeout; /* In milliseconds */
+ unsigned int card_type;
};
struct sd_scr {
@@ -122,6 +123,7 @@ struct mmc_card {
/* (missing CIA registers) */
#define MMC_QUIRK_INAND_CMD38 (1<<3) /* iNAND devices have broken CMD38 */
+ unsigned char bus_speed; /* bus speed mode */
unsigned int erase_size; /* erase size in sectors */
unsigned int erase_shift; /* if erase unit is power 2 */
unsigned int pref_erase; /* in sectors */
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 8187e32d917d..29ddcb71c635 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -50,6 +50,11 @@ struct mmc_ios {
#define MMC_TIMING_LEGACY 0
#define MMC_TIMING_MMC_HS 1
#define MMC_TIMING_SD_HS 2
+
+ unsigned char bus_speed_mode; /* bus speed mode */
+
+#define MMC_BUS_SPEED_MODE_DDR50 4
+
};
struct mmc_host_ops {
@@ -158,6 +163,7 @@ struct mmc_host {
#define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */
#define MMC_CAP_ERASE (1 << 10) /* Allow erase/trim commands */
#define MMC_CAP_FORCE_HS (1 << 11) /* Must enable highspeed mode */
+#define MMC_CAP_DDR50 (1 << 12) /* Can support DDR mode at 50 MHz */
mmc_pm_flag_t pm_caps; /* supported pm features */
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index 5b35987e691b..feaff8f1bcce 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -278,11 +278,14 @@ struct _mmc_csd {
#define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */
#define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */
-#define EXT_CSD_CARD_TYPE_MASK 0x3 /* Mask out reserved and DDR bits */
+#define EXT_CSD_CARD_TYPE_DDR_50 (1<<2) /* Card can run at 50MHz in DDR mode*/
+#define EXT_CSD_CARD_TYPE_MASK 0x7 /* Mask out reserved and DDR bits */
#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */
#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
+#define EXT_CSD_DDR_BUS_WIDTH_4 5 /* Card is in ddr 4 bit mode */
+#define EXT_CSD_DDR_BUS_WIDTH_8 6 /* Card is in ddr 8 bit mode */
#define EXT_CSD_SEC_ER_EN BIT(0)
#define EXT_CSD_SEC_BD_BLK_EN BIT(2)