6b13f685e
김민수
BSP 최초 추가
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
#ifndef LINUX_MMC_SDHCI_H
#define LINUX_MMC_SDHCI_H
#include <linux/scatterlist.h>
#include <linux/compiler.h>
#include <linux/types.h>
#include <linux/io.h>
#include <linux/mmc/host.h>
struct sdhci_host_next {
unsigned int sg_count;
s32 cookie;
};
struct sdhci_host {
const char *hw_name;
unsigned int quirks;
#define SDHCI_QUIRK_CLOCK_BEFORE_RESET (1<<0)
#define SDHCI_QUIRK_FORCE_DMA (1<<1)
#define SDHCI_QUIRK_NO_CARD_NO_RESET (1<<2)
#define SDHCI_QUIRK_SINGLE_POWER_WRITE (1<<3)
#define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS (1<<4)
#define SDHCI_QUIRK_BROKEN_DMA (1<<5)
#define SDHCI_QUIRK_BROKEN_ADMA (1<<6)
#define SDHCI_QUIRK_32BIT_DMA_ADDR (1<<7)
#define SDHCI_QUIRK_32BIT_DMA_SIZE (1<<8)
#define SDHCI_QUIRK_32BIT_ADMA_SIZE (1<<9)
#define SDHCI_QUIRK_RESET_AFTER_REQUEST (1<<10)
#define SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER (1<<11)
#define SDHCI_QUIRK_BROKEN_TIMEOUT_VAL (1<<12)
#define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13)
#define SDHCI_QUIRK_NO_BUSY_IRQ (1<<14)
#define SDHCI_QUIRK_BROKEN_CARD_DETECTION (1<<15)
#define SDHCI_QUIRK_INVERTED_WRITE_PROTECT (1<<16)
#define SDHCI_QUIRK_NONSTANDARD_CLOCK (1<<17)
#define SDHCI_QUIRK_PIO_NEEDS_DELAY (1<<18)
#define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET (1<<19)
#define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1<<20)
#define SDHCI_QUIRK_NO_MULTIBLOCK (1<<21)
#define SDHCI_QUIRK_FORCE_1_BIT_DATA (1<<22)
#define SDHCI_QUIRK_DELAY_AFTER_POWER (1<<23)
#define SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK (1<<24)
#define SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN (1<<25)
#define SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC (1<<26)
#define SDHCI_QUIRK_MISSING_CAPS (1<<27)
#define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 (1<<28)
#define SDHCI_QUIRK_NO_HISPD_BIT (1<<29)
#define SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC (1<<30)
#define SDHCI_QUIRK_UNSTABLE_RO_DETECT (1<<31)
unsigned int quirks2;
#define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0)
#define SDHCI_QUIRK2_HOST_NO_CMD23 (1<<1)
#define SDHCI_QUIRK2_NO_1_8_V (1<<2)
#define SDHCI_QUIRK2_PRESET_VALUE_BROKEN (1<<3)
#define SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON (1<<4)
#define SDHCI_QUIRK2_NOSTD_TIMEOUT_COUNTER (1<<5)
#define SDHCI_QUIRK2_BROKEN_HOST_CONTROL (1<<6)
#define SDHCI_QUIRK2_BROKEN_HS200 (1<<7)
#define SDHCI_QUIRK2_VQMMC_1_8_V (1<<8)
int irq;
void __iomem *ioaddr;
const struct sdhci_ops *ops;
struct regulator *vmmc;
struct regulator *vqmmc;
struct mmc_host *mmc;
u64 dma_mask;
#if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE)
struct led_classdev led;
char led_name[32];
#endif
spinlock_t lock;
int flags;
#define SDHCI_USE_SDMA (1<<0) /* Host is SDMA capable */
#define SDHCI_USE_ADMA (1<<1) /* Host is ADMA capable */
#define SDHCI_REQ_USE_DMA (1<<2) /* Use DMA for this req. */
#define SDHCI_DEVICE_DEAD (1<<3) /* Device unresponsive */
#define SDHCI_SDR50_NEEDS_TUNING (1<<4) /* SDR50 needs tuning */
#define SDHCI_NEEDS_RETUNING (1<<5) /* Host needs retuning */
#define SDHCI_AUTO_CMD12 (1<<6) /* Auto CMD12 support */
#define SDHCI_AUTO_CMD23 (1<<7) /* Auto CMD23 support */
#define SDHCI_PV_ENABLED (1<<8) /* Preset value enabled */
#define SDHCI_SDIO_IRQ_ENABLED (1<<9) /* SDIO irq enabled */
#define SDHCI_SDR104_NEEDS_TUNING (1<<10) /* SDR104/HS200 needs tuning */
#define SDHCI_USING_RETUNING_TIMER (1<<11) /* Host is using a retuning timer for the card */
unsigned int version;
unsigned int max_clk;
unsigned int timeout_clk;
unsigned int clk_mul;
unsigned int clock;
u8 pwr;
bool runtime_suspended;
bool bus_on;
struct mmc_request *mrq;
struct mmc_command *cmd;
struct mmc_data *data;
unsigned int data_early:1;
struct sg_mapping_iter sg_miter;
unsigned int blocks;
int sg_count;
u8 *adma_desc;
u8 *align_buffer;
dma_addr_t adma_addr;
dma_addr_t align_addr;
struct tasklet_struct card_tasklet;
struct tasklet_struct finish_tasklet;
struct timer_list timer;
u32 caps;
u32 caps1;
unsigned int ocr_avail_sdio;
unsigned int ocr_avail_sd;
unsigned int ocr_avail_mmc;
u32 ocr_mask;
wait_queue_head_t buf_ready_int;
unsigned int tuning_done;
unsigned int tuning_count;
unsigned int tuning_mode;
#define SDHCI_TUNING_MODE_1 0
struct timer_list tuning_timer;
struct sdhci_host_next next_data;
unsigned long private[0] ____cacheline_aligned;
};
#endif /* LINUX_MMC_SDHCI_H */
|