diff options
Diffstat (limited to 'include/linux/mmc/host.h')
-rw-r--r-- | include/linux/mmc/host.h | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 1575b52c3bfa..6d87f68ce4b6 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -50,6 +50,12 @@ 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_1_2V_DDR_MODE 1 | ||
58 | #define MMC_1_8V_DDR_MODE 2 | ||
53 | }; | 59 | }; |
54 | 60 | ||
55 | struct mmc_host_ops { | 61 | struct mmc_host_ops { |
@@ -123,6 +129,7 @@ struct mmc_host { | |||
123 | const struct mmc_host_ops *ops; | 129 | const struct mmc_host_ops *ops; |
124 | unsigned int f_min; | 130 | unsigned int f_min; |
125 | unsigned int f_max; | 131 | unsigned int f_max; |
132 | unsigned int f_init; | ||
126 | u32 ocr_avail; | 133 | u32 ocr_avail; |
127 | struct notifier_block pm_notify; | 134 | struct notifier_block pm_notify; |
128 | 135 | ||
@@ -157,13 +164,16 @@ struct mmc_host { | |||
157 | #define MMC_CAP_NONREMOVABLE (1 << 8) /* Nonremovable e.g. eMMC */ | 164 | #define MMC_CAP_NONREMOVABLE (1 << 8) /* Nonremovable e.g. eMMC */ |
158 | #define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */ | 165 | #define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */ |
159 | #define MMC_CAP_ERASE (1 << 10) /* Allow erase/trim commands */ | 166 | #define MMC_CAP_ERASE (1 << 10) /* Allow erase/trim commands */ |
167 | #define MMC_CAP_1_8V_DDR (1 << 11) /* can support */ | ||
168 | /* DDR mode at 1.8V */ | ||
169 | #define MMC_CAP_1_2V_DDR (1 << 12) /* can support */ | ||
170 | /* DDR mode at 1.2V */ | ||
160 | 171 | ||
161 | mmc_pm_flag_t pm_caps; /* supported pm features */ | 172 | mmc_pm_flag_t pm_caps; /* supported pm features */ |
162 | 173 | ||
163 | /* host specific block data */ | 174 | /* host specific block data */ |
164 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ | 175 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ |
165 | unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */ | 176 | unsigned short max_segs; /* see blk_queue_max_segments */ |
166 | unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */ | ||
167 | unsigned short unused; | 177 | unsigned short unused; |
168 | unsigned int max_req_size; /* maximum number of bytes in one req */ | 178 | unsigned int max_req_size; /* maximum number of bytes in one req */ |
169 | unsigned int max_blk_size; /* maximum size of one mmc block */ | 179 | unsigned int max_blk_size; /* maximum size of one mmc block */ |
@@ -212,6 +222,10 @@ struct mmc_host { | |||
212 | struct led_trigger *led; /* activity led */ | 222 | struct led_trigger *led; /* activity led */ |
213 | #endif | 223 | #endif |
214 | 224 | ||
225 | #ifdef CONFIG_REGULATOR | ||
226 | bool regulator_enabled; /* regulator state */ | ||
227 | #endif | ||
228 | |||
215 | struct dentry *debugfs_root; | 229 | struct dentry *debugfs_root; |
216 | 230 | ||
217 | unsigned long private[0] ____cacheline_aligned; | 231 | unsigned long private[0] ____cacheline_aligned; |
@@ -236,8 +250,8 @@ static inline void *mmc_priv(struct mmc_host *host) | |||
236 | extern int mmc_suspend_host(struct mmc_host *); | 250 | extern int mmc_suspend_host(struct mmc_host *); |
237 | extern int mmc_resume_host(struct mmc_host *); | 251 | extern int mmc_resume_host(struct mmc_host *); |
238 | 252 | ||
239 | extern void mmc_power_save_host(struct mmc_host *host); | 253 | extern int mmc_power_save_host(struct mmc_host *host); |
240 | extern void mmc_power_restore_host(struct mmc_host *host); | 254 | extern int mmc_power_restore_host(struct mmc_host *host); |
241 | 255 | ||
242 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); | 256 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); |
243 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); | 257 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); |
@@ -250,8 +264,24 @@ static inline void mmc_signal_sdio_irq(struct mmc_host *host) | |||
250 | 264 | ||
251 | struct regulator; | 265 | struct regulator; |
252 | 266 | ||
267 | #ifdef CONFIG_REGULATOR | ||
253 | int mmc_regulator_get_ocrmask(struct regulator *supply); | 268 | int mmc_regulator_get_ocrmask(struct regulator *supply); |
254 | int mmc_regulator_set_ocr(struct regulator *supply, unsigned short vdd_bit); | 269 | int mmc_regulator_set_ocr(struct mmc_host *mmc, |
270 | struct regulator *supply, | ||
271 | unsigned short vdd_bit); | ||
272 | #else | ||
273 | static inline int mmc_regulator_get_ocrmask(struct regulator *supply) | ||
274 | { | ||
275 | return 0; | ||
276 | } | ||
277 | |||
278 | static inline int mmc_regulator_set_ocr(struct mmc_host *mmc, | ||
279 | struct regulator *supply, | ||
280 | unsigned short vdd_bit) | ||
281 | { | ||
282 | return 0; | ||
283 | } | ||
284 | #endif | ||
255 | 285 | ||
256 | int mmc_card_awake(struct mmc_host *host); | 286 | int mmc_card_awake(struct mmc_host *host); |
257 | int mmc_card_sleep(struct mmc_host *host); | 287 | int mmc_card_sleep(struct mmc_host *host); |
@@ -268,5 +298,13 @@ static inline void mmc_set_disable_delay(struct mmc_host *host, | |||
268 | host->disable_delay = disable_delay; | 298 | host->disable_delay = disable_delay; |
269 | } | 299 | } |
270 | 300 | ||
301 | /* Module parameter */ | ||
302 | extern int mmc_assume_removable; | ||
303 | |||
304 | static inline int mmc_card_is_removable(struct mmc_host *host) | ||
305 | { | ||
306 | return !(host->caps & MMC_CAP_NONREMOVABLE) && mmc_assume_removable; | ||
307 | } | ||
308 | |||
271 | #endif | 309 | #endif |
272 | 310 | ||