1
2
3
4
5
6
7
8
9
10#ifndef LINUX_MMC_HOST_H
11#define LINUX_MMC_HOST_H
12
13#include <linux/leds.h>
14#include <linux/mutex.h>
15#include <linux/sched.h>
16#include <linux/device.h>
17#include <linux/fault-inject.h>
18
19#include <linux/mmc/core.h>
20#include <linux/mmc/pm.h>
21
22struct mmc_ios {
23 unsigned int clock;
24 unsigned short vdd;
25
26
27
28 unsigned char bus_mode;
29
30#define MMC_BUSMODE_OPENDRAIN 1
31#define MMC_BUSMODE_PUSHPULL 2
32
33 unsigned char chip_select;
34
35#define MMC_CS_DONTCARE 0
36#define MMC_CS_HIGH 1
37#define MMC_CS_LOW 2
38
39 unsigned char power_mode;
40
41#define MMC_POWER_OFF 0
42#define MMC_POWER_UP 1
43#define MMC_POWER_ON 2
44
45 unsigned char bus_width;
46
47#define MMC_BUS_WIDTH_1 0
48#define MMC_BUS_WIDTH_4 2
49#define MMC_BUS_WIDTH_8 3
50
51 unsigned char timing;
52
53#define MMC_TIMING_LEGACY 0
54#define MMC_TIMING_MMC_HS 1
55#define MMC_TIMING_SD_HS 2
56#define MMC_TIMING_UHS_SDR12 MMC_TIMING_LEGACY
57#define MMC_TIMING_UHS_SDR25 MMC_TIMING_SD_HS
58#define MMC_TIMING_UHS_SDR50 3
59#define MMC_TIMING_UHS_SDR104 4
60#define MMC_TIMING_UHS_DDR50 5
61#define MMC_TIMING_MMC_HS200 6
62
63#define MMC_SDR_MODE 0
64#define MMC_1_2V_DDR_MODE 1
65#define MMC_1_8V_DDR_MODE 2
66#define MMC_1_2V_SDR_MODE 3
67#define MMC_1_8V_SDR_MODE 4
68
69 unsigned char signal_voltage;
70
71#define MMC_SIGNAL_VOLTAGE_330 0
72#define MMC_SIGNAL_VOLTAGE_180 1
73#define MMC_SIGNAL_VOLTAGE_120 2
74
75 unsigned char drv_type;
76
77#define MMC_SET_DRIVER_TYPE_B 0
78#define MMC_SET_DRIVER_TYPE_A 1
79#define MMC_SET_DRIVER_TYPE_C 2
80#define MMC_SET_DRIVER_TYPE_D 3
81};
82
83struct mmc_host_ops {
84
85
86
87
88 int (*enable)(struct mmc_host *host);
89 int (*disable)(struct mmc_host *host);
90
91
92
93
94
95
96
97
98 void (*post_req)(struct mmc_host *host, struct mmc_request *req,
99 int err);
100 void (*pre_req)(struct mmc_host *host, struct mmc_request *req,
101 bool is_first_req);
102 void (*request)(struct mmc_host *host, struct mmc_request *req);
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
124 int (*get_ro)(struct mmc_host *host);
125 int (*get_cd)(struct mmc_host *host);
126
127 void (*enable_sdio_irq)(struct mmc_host *host, int enable);
128
129
130 void (*init_card)(struct mmc_host *host, struct mmc_card *card);
131
132 int (*start_signal_voltage_switch)(struct mmc_host *host, struct mmc_ios *ios);
133
134
135 int (*execute_tuning)(struct mmc_host *host, u32 opcode);
136 void (*enable_preset_value)(struct mmc_host *host, bool enable);
137 int (*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv);
138 void (*hw_reset)(struct mmc_host *host);
139};
140
141struct mmc_card;
142struct device;
143
144struct mmc_async_req {
145
146 struct mmc_request *mrq;
147
148
149
150
151 int (*err_check) (struct mmc_card *, struct mmc_async_req *);
152};
153
154
155
156
157
158
159
160
161
162
163
164
165
166struct mmc_slot {
167 int cd_irq;
168 struct mutex lock;
169 void *handler_priv;
170};
171
172struct regulator;
173
174struct mmc_supply {
175 struct regulator *vmmc;
176 struct regulator *vqmmc;
177};
178
179struct mmc_host {
180 struct device *parent;
181 struct device class_dev;
182 int index;
183 const struct mmc_host_ops *ops;
184 unsigned int f_min;
185 unsigned int f_max;
186 unsigned int f_init;
187 u32 ocr_avail;
188 u32 ocr_avail_sdio;
189 u32 ocr_avail_sd;
190 u32 ocr_avail_mmc;
191 struct notifier_block pm_notify;
192 u32 max_current_330;
193 u32 max_current_300;
194 u32 max_current_180;
195
196#define MMC_VDD_165_195 0x00000080
197#define MMC_VDD_20_21 0x00000100
198#define MMC_VDD_21_22 0x00000200
199#define MMC_VDD_22_23 0x00000400
200#define MMC_VDD_23_24 0x00000800
201#define MMC_VDD_24_25 0x00001000
202#define MMC_VDD_25_26 0x00002000
203#define MMC_VDD_26_27 0x00004000
204#define MMC_VDD_27_28 0x00008000
205#define MMC_VDD_28_29 0x00010000
206#define MMC_VDD_29_30 0x00020000
207#define MMC_VDD_30_31 0x00040000
208#define MMC_VDD_31_32 0x00080000
209#define MMC_VDD_32_33 0x00100000
210#define MMC_VDD_33_34 0x00200000
211#define MMC_VDD_34_35 0x00400000
212#define MMC_VDD_35_36 0x00800000
213
214 unsigned long caps;
215
216#define MMC_CAP_4_BIT_DATA (1 << 0)
217#define MMC_CAP_MMC_HIGHSPEED (1 << 1)
218#define MMC_CAP_SD_HIGHSPEED (1 << 2)
219#define MMC_CAP_SDIO_IRQ (1 << 3)
220#define MMC_CAP_SPI (1 << 4)
221#define MMC_CAP_NEEDS_POLL (1 << 5)
222#define MMC_CAP_8_BIT_DATA (1 << 6)
223
224#define MMC_CAP_NONREMOVABLE (1 << 8)
225#define MMC_CAP_WAIT_WHILE_BUSY (1 << 9)
226#define MMC_CAP_ERASE (1 << 10)
227#define MMC_CAP_1_8V_DDR (1 << 11)
228
229#define MMC_CAP_1_2V_DDR (1 << 12)
230
231#define MMC_CAP_POWER_OFF_CARD (1 << 13)
232#define MMC_CAP_BUS_WIDTH_TEST (1 << 14)
233#define MMC_CAP_UHS_SDR12 (1 << 15)
234#define MMC_CAP_UHS_SDR25 (1 << 16)
235#define MMC_CAP_UHS_SDR50 (1 << 17)
236#define MMC_CAP_UHS_SDR104 (1 << 18)
237#define MMC_CAP_UHS_DDR50 (1 << 19)
238#define MMC_CAP_DRIVER_TYPE_A (1 << 23)
239#define MMC_CAP_DRIVER_TYPE_C (1 << 24)
240#define MMC_CAP_DRIVER_TYPE_D (1 << 25)
241#define MMC_CAP_CMD23 (1 << 30)
242#define MMC_CAP_HW_RESET (1 << 31)
243
244 unsigned int caps2;
245
246#define MMC_CAP2_BOOTPART_NOACC (1 << 0)
247#define MMC_CAP2_CACHE_CTRL (1 << 1)
248#define MMC_CAP2_POWEROFF_NOTIFY (1 << 2)
249#define MMC_CAP2_NO_MULTI_READ (1 << 3)
250#define MMC_CAP2_NO_SLEEP_CMD (1 << 4)
251#define MMC_CAP2_HS200_1_8V_SDR (1 << 5)
252#define MMC_CAP2_HS200_1_2V_SDR (1 << 6)
253#define MMC_CAP2_HS200 (MMC_CAP2_HS200_1_8V_SDR | \
254 MMC_CAP2_HS200_1_2V_SDR)
255#define MMC_CAP2_BROKEN_VOLTAGE (1 << 7)
256#define MMC_CAP2_DETECT_ON_ERR (1 << 8)
257#define MMC_CAP2_HC_ERASE_SZ (1 << 9)
258#define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10)
259#define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11)
260
261 mmc_pm_flag_t pm_caps;
262 unsigned int power_notify_type;
263#define MMC_HOST_PW_NOTIFY_NONE 0
264#define MMC_HOST_PW_NOTIFY_SHORT 1
265#define MMC_HOST_PW_NOTIFY_LONG 2
266
267#ifdef CONFIG_MMC_CLKGATE
268 int clk_requests;
269 unsigned int clk_delay;
270 bool clk_gated;
271 struct delayed_work clk_gate_work;
272 unsigned int clk_old;
273 spinlock_t clk_lock;
274 struct mutex clk_gate_mutex;
275 struct device_attribute clkgate_delay_attr;
276 unsigned long clkgate_delay;
277#endif
278
279
280 unsigned int max_seg_size;
281 unsigned short max_segs;
282 unsigned short unused;
283 unsigned int max_req_size;
284 unsigned int max_blk_size;
285 unsigned int max_blk_count;
286 unsigned int max_discard_to;
287
288
289 spinlock_t lock;
290
291 struct mmc_ios ios;
292 u32 ocr;
293
294
295 unsigned int use_spi_crc:1;
296 unsigned int claimed:1;
297 unsigned int bus_dead:1;
298#ifdef CONFIG_MMC_DEBUG
299 unsigned int removed:1;
300#endif
301
302 int rescan_disable;
303
304 struct mmc_card *card;
305
306 wait_queue_head_t wq;
307 struct task_struct *claimer;
308 int claim_cnt;
309
310 struct delayed_work detect;
311 int detect_change;
312 struct mmc_slot slot;
313
314 const struct mmc_bus_ops *bus_ops;
315 unsigned int bus_refs;
316
317 unsigned int sdio_irqs;
318 struct task_struct *sdio_irq_thread;
319 bool sdio_irq_pending;
320 atomic_t sdio_irq_thread_abort;
321
322 mmc_pm_flag_t pm_flags;
323
324#ifdef CONFIG_LEDS_TRIGGERS
325 struct led_trigger *led;
326#endif
327
328#ifdef CONFIG_REGULATOR
329 bool regulator_enabled;
330#endif
331 struct mmc_supply supply;
332
333 struct dentry *debugfs_root;
334
335 struct mmc_async_req *areq;
336
337#ifdef CONFIG_FAIL_MMC_REQUEST
338 struct fault_attr fail_mmc_request;
339#endif
340
341 unsigned int actual_clock;
342
343 unsigned long private[0] ____cacheline_aligned;
344};
345
346extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
347extern int mmc_add_host(struct mmc_host *);
348extern void mmc_remove_host(struct mmc_host *);
349extern void mmc_free_host(struct mmc_host *);
350
351static inline void *mmc_priv(struct mmc_host *host)
352{
353 return (void *)host->private;
354}
355
356#define mmc_host_is_spi(host) ((host)->caps & MMC_CAP_SPI)
357
358#define mmc_dev(x) ((x)->parent)
359#define mmc_classdev(x) (&(x)->class_dev)
360#define mmc_hostname(x) (dev_name(&(x)->class_dev))
361
362extern int mmc_suspend_host(struct mmc_host *);
363extern int mmc_resume_host(struct mmc_host *);
364
365extern int mmc_power_save_host(struct mmc_host *host);
366extern int mmc_power_restore_host(struct mmc_host *host);
367
368extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
369extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
370
371extern int mmc_cache_ctrl(struct mmc_host *, u8);
372
373static inline void mmc_signal_sdio_irq(struct mmc_host *host)
374{
375 host->ops->enable_sdio_irq(host, 0);
376 host->sdio_irq_pending = true;
377 wake_up_process(host->sdio_irq_thread);
378}
379
380#ifdef CONFIG_REGULATOR
381int mmc_regulator_get_ocrmask(struct regulator *supply);
382int mmc_regulator_set_ocr(struct mmc_host *mmc,
383 struct regulator *supply,
384 unsigned short vdd_bit);
385int mmc_regulator_get_supply(struct mmc_host *mmc);
386#else
387static inline int mmc_regulator_get_ocrmask(struct regulator *supply)
388{
389 return 0;
390}
391
392static inline int mmc_regulator_set_ocr(struct mmc_host *mmc,
393 struct regulator *supply,
394 unsigned short vdd_bit)
395{
396 return 0;
397}
398
399static inline int mmc_regulator_get_supply(struct mmc_host *mmc)
400{
401 return 0;
402}
403#endif
404
405int mmc_card_awake(struct mmc_host *host);
406int mmc_card_sleep(struct mmc_host *host);
407int mmc_card_can_sleep(struct mmc_host *host);
408
409int mmc_pm_notify(struct notifier_block *notify_block, unsigned long, void *);
410
411
412extern bool mmc_assume_removable;
413
414static inline int mmc_card_is_removable(struct mmc_host *host)
415{
416 return !(host->caps & MMC_CAP_NONREMOVABLE) && mmc_assume_removable;
417}
418
419static inline int mmc_card_keep_power(struct mmc_host *host)
420{
421 return host->pm_flags & MMC_PM_KEEP_POWER;
422}
423
424static inline int mmc_card_wake_sdio_irq(struct mmc_host *host)
425{
426 return host->pm_flags & MMC_PM_WAKE_SDIO_IRQ;
427}
428
429static inline int mmc_host_cmd23(struct mmc_host *host)
430{
431 return host->caps & MMC_CAP_CMD23;
432}
433
434static inline int mmc_boot_partition_access(struct mmc_host *host)
435{
436 return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC);
437}
438
439#ifdef CONFIG_MMC_CLKGATE
440void mmc_host_clk_hold(struct mmc_host *host);
441void mmc_host_clk_release(struct mmc_host *host);
442unsigned int mmc_host_clk_rate(struct mmc_host *host);
443
444#else
445static inline void mmc_host_clk_hold(struct mmc_host *host)
446{
447}
448
449static inline void mmc_host_clk_release(struct mmc_host *host)
450{
451}
452
453static inline unsigned int mmc_host_clk_rate(struct mmc_host *host)
454{
455 return host->ios.clock;
456}
457#endif
458#endif
459