diff options
Diffstat (limited to 'drivers/mmc/core/core.h')
-rw-r--r-- | drivers/mmc/core/core.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h new file mode 100644 index 000000000000..177264d090ac --- /dev/null +++ b/drivers/mmc/core/core.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * linux/drivers/mmc/core/core.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Russell King, All Rights Reserved. | ||
5 | * Copyright 2007 Pierre Ossman | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef _MMC_CORE_CORE_H | ||
12 | #define _MMC_CORE_CORE_H | ||
13 | |||
14 | #include <linux/delay.h> | ||
15 | |||
16 | #define MMC_CMD_RETRIES 3 | ||
17 | |||
18 | struct mmc_bus_ops { | ||
19 | void (*remove)(struct mmc_host *); | ||
20 | void (*detect)(struct mmc_host *); | ||
21 | void (*suspend)(struct mmc_host *); | ||
22 | void (*resume)(struct mmc_host *); | ||
23 | }; | ||
24 | |||
25 | void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops); | ||
26 | void mmc_detach_bus(struct mmc_host *host); | ||
27 | |||
28 | void __mmc_release_bus(struct mmc_host *host); | ||
29 | |||
30 | static inline void mmc_bus_get(struct mmc_host *host) | ||
31 | { | ||
32 | unsigned long flags; | ||
33 | |||
34 | spin_lock_irqsave(&host->lock, flags); | ||
35 | host->bus_refs++; | ||
36 | spin_unlock_irqrestore(&host->lock, flags); | ||
37 | } | ||
38 | |||
39 | static inline void mmc_bus_put(struct mmc_host *host) | ||
40 | { | ||
41 | unsigned long flags; | ||
42 | |||
43 | spin_lock_irqsave(&host->lock, flags); | ||
44 | host->bus_refs--; | ||
45 | if ((host->bus_refs == 0) && host->bus_ops) | ||
46 | __mmc_release_bus(host); | ||
47 | spin_unlock_irqrestore(&host->lock, flags); | ||
48 | } | ||
49 | |||
50 | void mmc_set_chip_select(struct mmc_host *host, int mode); | ||
51 | void mmc_set_clock(struct mmc_host *host, unsigned int hz); | ||
52 | void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode); | ||
53 | void mmc_set_bus_width(struct mmc_host *host, unsigned int width); | ||
54 | u32 mmc_select_voltage(struct mmc_host *host, u32 ocr); | ||
55 | void mmc_set_timing(struct mmc_host *host, unsigned int timing); | ||
56 | |||
57 | struct mmc_card *mmc_alloc_card(struct mmc_host *host); | ||
58 | |||
59 | static inline void mmc_delay(unsigned int ms) | ||
60 | { | ||
61 | if (ms < 1000 / HZ) { | ||
62 | cond_resched(); | ||
63 | mdelay(ms); | ||
64 | } else { | ||
65 | msleep(ms); | ||
66 | } | ||
67 | } | ||
68 | |||
69 | #endif | ||
70 | |||