diff options
Diffstat (limited to 'include/linux/mmc/host.h')
-rw-r--r-- | include/linux/mmc/host.h | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index b1350dfd3e91..125eee1407ff 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -10,6 +10,8 @@ | |||
10 | #ifndef LINUX_MMC_HOST_H | 10 | #ifndef LINUX_MMC_HOST_H |
11 | #define LINUX_MMC_HOST_H | 11 | #define LINUX_MMC_HOST_H |
12 | 12 | ||
13 | #include <linux/leds.h> | ||
14 | |||
13 | #include <linux/mmc/core.h> | 15 | #include <linux/mmc/core.h> |
14 | 16 | ||
15 | struct mmc_ios { | 17 | struct mmc_ios { |
@@ -51,6 +53,7 @@ struct mmc_host_ops { | |||
51 | void (*request)(struct mmc_host *host, struct mmc_request *req); | 53 | void (*request)(struct mmc_host *host, struct mmc_request *req); |
52 | void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); | 54 | void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); |
53 | int (*get_ro)(struct mmc_host *host); | 55 | int (*get_ro)(struct mmc_host *host); |
56 | void (*enable_sdio_irq)(struct mmc_host *host, int enable); | ||
54 | }; | 57 | }; |
55 | 58 | ||
56 | struct mmc_card; | 59 | struct mmc_card; |
@@ -87,9 +90,10 @@ struct mmc_host { | |||
87 | 90 | ||
88 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ | 91 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ |
89 | #define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */ | 92 | #define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */ |
90 | #define MMC_CAP_BYTEBLOCK (1 << 2) /* Can do non-log2 block sizes */ | 93 | #define MMC_CAP_MMC_HIGHSPEED (1 << 2) /* Can do MMC high-speed timing */ |
91 | #define MMC_CAP_MMC_HIGHSPEED (1 << 3) /* Can do MMC high-speed timing */ | 94 | #define MMC_CAP_SD_HIGHSPEED (1 << 3) /* Can do SD high-speed timing */ |
92 | #define MMC_CAP_SD_HIGHSPEED (1 << 4) /* Can do SD high-speed timing */ | 95 | #define MMC_CAP_SDIO_IRQ (1 << 4) /* Can signal pending SDIO IRQs */ |
96 | #define MMC_CAP_SPI (1 << 5) /* Talks only SPI protocols */ | ||
93 | 97 | ||
94 | /* host specific block data */ | 98 | /* host specific block data */ |
95 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ | 99 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ |
@@ -106,6 +110,14 @@ struct mmc_host { | |||
106 | struct mmc_ios ios; /* current io bus settings */ | 110 | struct mmc_ios ios; /* current io bus settings */ |
107 | u32 ocr; /* the current OCR setting */ | 111 | u32 ocr; /* the current OCR setting */ |
108 | 112 | ||
113 | /* group bitfields together to minimize padding */ | ||
114 | unsigned int use_spi_crc:1; | ||
115 | unsigned int claimed:1; /* host exclusively claimed */ | ||
116 | unsigned int bus_dead:1; /* bus has been released */ | ||
117 | #ifdef CONFIG_MMC_DEBUG | ||
118 | unsigned int removed:1; /* host is being removed */ | ||
119 | #endif | ||
120 | |||
109 | unsigned int mode; /* current card mode of host */ | 121 | unsigned int mode; /* current card mode of host */ |
110 | #define MMC_MODE_MMC 0 | 122 | #define MMC_MODE_MMC 0 |
111 | #define MMC_MODE_SD 1 | 123 | #define MMC_MODE_SD 1 |
@@ -113,16 +125,19 @@ struct mmc_host { | |||
113 | struct mmc_card *card; /* device attached to this host */ | 125 | struct mmc_card *card; /* device attached to this host */ |
114 | 126 | ||
115 | wait_queue_head_t wq; | 127 | wait_queue_head_t wq; |
116 | unsigned int claimed:1; /* host exclusively claimed */ | ||
117 | 128 | ||
118 | struct delayed_work detect; | 129 | struct delayed_work detect; |
119 | #ifdef CONFIG_MMC_DEBUG | ||
120 | unsigned int removed:1; /* host is being removed */ | ||
121 | #endif | ||
122 | 130 | ||
123 | const struct mmc_bus_ops *bus_ops; /* current bus driver */ | 131 | const struct mmc_bus_ops *bus_ops; /* current bus driver */ |
124 | unsigned int bus_refs; /* reference counter */ | 132 | unsigned int bus_refs; /* reference counter */ |
125 | unsigned int bus_dead:1; /* bus has been released */ | 133 | |
134 | unsigned int sdio_irqs; | ||
135 | struct task_struct *sdio_irq_thread; | ||
136 | atomic_t sdio_irq_thread_abort; | ||
137 | |||
138 | #ifdef CONFIG_LEDS_TRIGGERS | ||
139 | struct led_trigger *led; /* activity led */ | ||
140 | #endif | ||
126 | 141 | ||
127 | unsigned long private[0] ____cacheline_aligned; | 142 | unsigned long private[0] ____cacheline_aligned; |
128 | }; | 143 | }; |
@@ -137,6 +152,8 @@ static inline void *mmc_priv(struct mmc_host *host) | |||
137 | return (void *)host->private; | 152 | return (void *)host->private; |
138 | } | 153 | } |
139 | 154 | ||
155 | #define mmc_host_is_spi(host) ((host)->caps & MMC_CAP_SPI) | ||
156 | |||
140 | #define mmc_dev(x) ((x)->parent) | 157 | #define mmc_dev(x) ((x)->parent) |
141 | #define mmc_classdev(x) (&(x)->class_dev) | 158 | #define mmc_classdev(x) (&(x)->class_dev) |
142 | #define mmc_hostname(x) ((x)->class_dev.bus_id) | 159 | #define mmc_hostname(x) ((x)->class_dev.bus_id) |
@@ -147,5 +164,11 @@ extern int mmc_resume_host(struct mmc_host *); | |||
147 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); | 164 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); |
148 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); | 165 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); |
149 | 166 | ||
167 | static inline void mmc_signal_sdio_irq(struct mmc_host *host) | ||
168 | { | ||
169 | host->ops->enable_sdio_irq(host, 0); | ||
170 | wake_up_process(host->sdio_irq_thread); | ||
171 | } | ||
172 | |||
150 | #endif | 173 | #endif |
151 | 174 | ||