diff options
author | Adrian Hunter <adrian.hunter@nokia.com> | 2010-08-24 06:20:26 -0400 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2010-10-23 09:11:16 -0400 |
commit | 0f8d8ea64ec7c77ca5beb59534d386fe0235961a (patch) | |
tree | 8d6aebd250897aa33cb166994720497f40a9aaa6 /include/linux/mmc | |
parent | dfc13e8402c75e7c2e0a52e123c0500a3259866b (diff) |
mmc: Fixes for Dual Data Rate (DDR) support
The DDR support patch needs the following fixes:
- The block driver does not need to know about DDR, any more
than it needs to know about bus width.
- Not only the card must be switched to DDR mode. The host
controller must also be configured, which is done through
the 'set_ios()' function.
- Do not set the DDR mode state until after the switch command
is successful.
- Setting block length is not supported in DDR mode. Make that
a core function and change the other place it is used (mmc_test)
also.
Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'include/linux/mmc')
-rw-r--r-- | include/linux/mmc/core.h | 3 | ||||
-rw-r--r-- | include/linux/mmc/host.h | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index d0fbcacab52c..64e013f1cfb8 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
@@ -109,7 +109,6 @@ struct mmc_data { | |||
109 | #define MMC_DATA_WRITE (1 << 8) | 109 | #define MMC_DATA_WRITE (1 << 8) |
110 | #define MMC_DATA_READ (1 << 9) | 110 | #define MMC_DATA_READ (1 << 9) |
111 | #define MMC_DATA_STREAM (1 << 10) | 111 | #define MMC_DATA_STREAM (1 << 10) |
112 | #define MMC_DDR_MODE (1 << 11) | ||
113 | 112 | ||
114 | unsigned int bytes_xfered; | 113 | unsigned int bytes_xfered; |
115 | 114 | ||
@@ -154,6 +153,8 @@ extern int mmc_can_secure_erase_trim(struct mmc_card *card); | |||
154 | extern int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from, | 153 | extern int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from, |
155 | unsigned int nr); | 154 | unsigned int nr); |
156 | 155 | ||
156 | extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen); | ||
157 | |||
157 | extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *); | 158 | extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *); |
158 | extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int); | 159 | extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int); |
159 | 160 | ||
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 6711eb8715ba..c4fb1c5efc44 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -50,6 +50,11 @@ struct mmc_ios { | |||
50 | #define MMC_TIMING_LEGACY 0 | 50 | #define MMC_TIMING_LEGACY 0 |
51 | #define MMC_TIMING_MMC_HS 1 | 51 | #define MMC_TIMING_MMC_HS 1 |
52 | #define MMC_TIMING_SD_HS 2 | 52 | #define MMC_TIMING_SD_HS 2 |
53 | |||
54 | unsigned char ddr; /* dual data rate used */ | ||
55 | |||
56 | #define MMC_SDR_MODE 0 | ||
57 | #define MMC_DDR_MODE 1 | ||
53 | }; | 58 | }; |
54 | 59 | ||
55 | struct mmc_host_ops { | 60 | struct mmc_host_ops { |