diff options
Diffstat (limited to 'include/linux/mmc/sdhci.h')
-rw-r--r-- | include/linux/mmc/sdhci.h | 79 |
1 files changed, 43 insertions, 36 deletions
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index 6a68c4eb4e4..5ee48390dec 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * the Free Software Foundation; either version 2 of the License, or (at | 8 | * the Free Software Foundation; either version 2 of the License, or (at |
9 | * your option) any later version. | 9 | * your option) any later version. |
10 | */ | 10 | */ |
11 | #ifndef __SDHCI_H | 11 | #ifndef LINUX_MMC_SDHCI_H |
12 | #define __SDHCI_H | 12 | #define LINUX_MMC_SDHCI_H |
13 | 13 | ||
14 | #include <linux/scatterlist.h> | 14 | #include <linux/scatterlist.h> |
15 | #include <linux/compiler.h> | 15 | #include <linux/compiler.h> |
@@ -21,72 +21,78 @@ struct sdhci_host { | |||
21 | /* Data set by hardware interface driver */ | 21 | /* Data set by hardware interface driver */ |
22 | const char *hw_name; /* Hardware bus name */ | 22 | const char *hw_name; /* Hardware bus name */ |
23 | 23 | ||
24 | unsigned int quirks; /* Deviations from spec. */ | 24 | u64 quirks; /* Deviations from spec. */ |
25 | 25 | ||
26 | /* Controller doesn't honor resets unless we touch the clock register */ | 26 | /* Controller doesn't honor resets unless we touch the clock register */ |
27 | #define SDHCI_QUIRK_CLOCK_BEFORE_RESET (1<<0) | 27 | #define SDHCI_QUIRK_CLOCK_BEFORE_RESET (1ULL<<0) |
28 | /* Controller has bad caps bits, but really supports DMA */ | 28 | /* Controller has bad caps bits, but really supports DMA */ |
29 | #define SDHCI_QUIRK_FORCE_DMA (1<<1) | 29 | #define SDHCI_QUIRK_FORCE_DMA (1ULL<<1) |
30 | /* Controller doesn't like to be reset when there is no card inserted. */ | 30 | /* Controller doesn't like to be reset when there is no card inserted. */ |
31 | #define SDHCI_QUIRK_NO_CARD_NO_RESET (1<<2) | 31 | #define SDHCI_QUIRK_NO_CARD_NO_RESET (1ULL<<2) |
32 | /* Controller doesn't like clearing the power reg before a change */ | 32 | /* Controller doesn't like clearing the power reg before a change */ |
33 | #define SDHCI_QUIRK_SINGLE_POWER_WRITE (1<<3) | 33 | #define SDHCI_QUIRK_SINGLE_POWER_WRITE (1ULL<<3) |
34 | /* Controller has flaky internal state so reset it on each ios change */ | 34 | /* Controller has flaky internal state so reset it on each ios change */ |
35 | #define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS (1<<4) | 35 | #define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS (1ULL<<4) |
36 | /* Controller has an unusable DMA engine */ | 36 | /* Controller has an unusable DMA engine */ |
37 | #define SDHCI_QUIRK_BROKEN_DMA (1<<5) | 37 | #define SDHCI_QUIRK_BROKEN_DMA (1ULL<<5) |
38 | /* Controller has an unusable ADMA engine */ | 38 | /* Controller has an unusable ADMA engine */ |
39 | #define SDHCI_QUIRK_BROKEN_ADMA (1<<6) | 39 | #define SDHCI_QUIRK_BROKEN_ADMA (1ULL<<6) |
40 | /* Controller can only DMA from 32-bit aligned addresses */ | 40 | /* Controller can only DMA from 32-bit aligned addresses */ |
41 | #define SDHCI_QUIRK_32BIT_DMA_ADDR (1<<7) | 41 | #define SDHCI_QUIRK_32BIT_DMA_ADDR (1ULL<<7) |
42 | /* Controller can only DMA chunk sizes that are a multiple of 32 bits */ | 42 | /* Controller can only DMA chunk sizes that are a multiple of 32 bits */ |
43 | #define SDHCI_QUIRK_32BIT_DMA_SIZE (1<<8) | 43 | #define SDHCI_QUIRK_32BIT_DMA_SIZE (1ULL<<8) |
44 | /* Controller can only ADMA chunks that are a multiple of 32 bits */ | 44 | /* Controller can only ADMA chunks that are a multiple of 32 bits */ |
45 | #define SDHCI_QUIRK_32BIT_ADMA_SIZE (1<<9) | 45 | #define SDHCI_QUIRK_32BIT_ADMA_SIZE (1ULL<<9) |
46 | /* Controller needs to be reset after each request to stay stable */ | 46 | /* Controller needs to be reset after each request to stay stable */ |
47 | #define SDHCI_QUIRK_RESET_AFTER_REQUEST (1<<10) | 47 | #define SDHCI_QUIRK_RESET_AFTER_REQUEST (1ULL<<10) |
48 | /* Controller needs voltage and power writes to happen separately */ | 48 | /* Controller needs voltage and power writes to happen separately */ |
49 | #define SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER (1<<11) | 49 | #define SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER (1ULL<<11) |
50 | /* Controller provides an incorrect timeout value for transfers */ | 50 | /* Controller provides an incorrect timeout value for transfers */ |
51 | #define SDHCI_QUIRK_BROKEN_TIMEOUT_VAL (1<<12) | 51 | #define SDHCI_QUIRK_BROKEN_TIMEOUT_VAL (1ULL<<12) |
52 | /* Controller has an issue with buffer bits for small transfers */ | 52 | /* Controller has an issue with buffer bits for small transfers */ |
53 | #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13) | 53 | #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1ULL<<13) |
54 | /* Controller does not provide transfer-complete interrupt when not busy */ | 54 | /* Controller does not provide transfer-complete interrupt when not busy */ |
55 | #define SDHCI_QUIRK_NO_BUSY_IRQ (1<<14) | 55 | #define SDHCI_QUIRK_NO_BUSY_IRQ (1ULL<<14) |
56 | /* Controller has unreliable card detection */ | 56 | /* Controller has unreliable card detection */ |
57 | #define SDHCI_QUIRK_BROKEN_CARD_DETECTION (1<<15) | 57 | #define SDHCI_QUIRK_BROKEN_CARD_DETECTION (1ULL<<15) |
58 | /* Controller reports inverted write-protect state */ | 58 | /* Controller reports inverted write-protect state */ |
59 | #define SDHCI_QUIRK_INVERTED_WRITE_PROTECT (1<<16) | 59 | #define SDHCI_QUIRK_INVERTED_WRITE_PROTECT (1ULL<<16) |
60 | /* Controller has nonstandard clock management */ | 60 | /* Controller has nonstandard clock management */ |
61 | #define SDHCI_QUIRK_NONSTANDARD_CLOCK (1<<17) | 61 | #define SDHCI_QUIRK_NONSTANDARD_CLOCK (1ULL<<17) |
62 | /* Controller does not like fast PIO transfers */ | 62 | /* Controller does not like fast PIO transfers */ |
63 | #define SDHCI_QUIRK_PIO_NEEDS_DELAY (1<<18) | 63 | #define SDHCI_QUIRK_PIO_NEEDS_DELAY (1ULL<<18) |
64 | /* Controller losing signal/interrupt enable states after reset */ | 64 | /* Controller losing signal/interrupt enable states after reset */ |
65 | #define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET (1<<19) | 65 | #define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET (1ULL<<19) |
66 | /* Controller has to be forced to use block size of 2048 bytes */ | 66 | /* Controller has to be forced to use block size of 2048 bytes */ |
67 | #define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1<<20) | 67 | #define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1ULL<<20) |
68 | /* Controller cannot do multi-block transfers */ | 68 | /* Controller cannot do multi-block transfers */ |
69 | #define SDHCI_QUIRK_NO_MULTIBLOCK (1<<21) | 69 | #define SDHCI_QUIRK_NO_MULTIBLOCK (1ULL<<21) |
70 | /* Controller can only handle 1-bit data transfers */ | 70 | /* Controller can only handle 1-bit data transfers */ |
71 | #define SDHCI_QUIRK_FORCE_1_BIT_DATA (1<<22) | 71 | #define SDHCI_QUIRK_FORCE_1_BIT_DATA (1ULL<<22) |
72 | /* Controller needs 10ms delay between applying power and clock */ | 72 | /* Controller needs 10ms delay between applying power and clock */ |
73 | #define SDHCI_QUIRK_DELAY_AFTER_POWER (1<<23) | 73 | #define SDHCI_QUIRK_DELAY_AFTER_POWER (1ULL<<23) |
74 | /* Controller uses SDCLK instead of TMCLK for data timeouts */ | 74 | /* Controller uses SDCLK instead of TMCLK for data timeouts */ |
75 | #define SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK (1<<24) | 75 | #define SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK (1ULL<<24) |
76 | /* Controller reports wrong base clock capability */ | 76 | /* Controller reports wrong base clock capability */ |
77 | #define SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN (1<<25) | 77 | #define SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN (1ULL<<25) |
78 | /* Controller cannot support End Attribute in NOP ADMA descriptor */ | 78 | /* Controller cannot support End Attribute in NOP ADMA descriptor */ |
79 | #define SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC (1<<26) | 79 | #define SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC (1ULL<<26) |
80 | /* Controller is missing device caps. Use caps provided by host */ | 80 | /* Controller is missing device caps. Use caps provided by host */ |
81 | #define SDHCI_QUIRK_MISSING_CAPS (1<<27) | 81 | #define SDHCI_QUIRK_MISSING_CAPS (1ULL<<27) |
82 | /* Controller uses Auto CMD12 command to stop the transfer */ | 82 | /* Controller uses Auto CMD12 command to stop the transfer */ |
83 | #define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 (1<<28) | 83 | #define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 (1ULL<<28) |
84 | /* Controller doesn't have HISPD bit field in HI-SPEED SD card */ | 84 | /* Controller doesn't have HISPD bit field in HI-SPEED SD card */ |
85 | #define SDHCI_QUIRK_NO_HISPD_BIT (1<<29) | 85 | #define SDHCI_QUIRK_NO_HISPD_BIT (1ULL<<29) |
86 | /* Controller treats ADMA descriptors with length 0000h incorrectly */ | 86 | /* Controller treats ADMA descriptors with length 0000h incorrectly */ |
87 | #define SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC (1<<30) | 87 | #define SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC (1ULL<<30) |
88 | /* The read-only detection via SDHCI_PRESENT_STATE register is unstable */ | 88 | /* The read-only detection via SDHCI_PRESENT_STATE register is unstable */ |
89 | #define SDHCI_QUIRK_UNSTABLE_RO_DETECT (1<<31) | 89 | #define SDHCI_QUIRK_UNSTABLE_RO_DETECT (1ULL<<31) |
90 | /* Controller cannot report the line status in present state register */ | ||
91 | #define SDHCI_QUIRK_NON_STD_VOLTAGE_SWITCHING (1ULL<<32) | ||
92 | /* Controller doesn't follow the standard frequency tuning procedure */ | ||
93 | #define SDHCI_QUIRK_NON_STANDARD_TUNING (1ULL<<33) | ||
94 | /* Controller doesn't calculate max_discard_to */ | ||
95 | #define SDHCI_QUIRK_NO_CALC_MAX_DISCARD_TO (1ULL<<34) | ||
90 | 96 | ||
91 | int irq; /* Device IRQ */ | 97 | int irq; /* Device IRQ */ |
92 | void __iomem *ioaddr; /* Mapped address */ | 98 | void __iomem *ioaddr; /* Mapped address */ |
@@ -145,6 +151,7 @@ struct sdhci_host { | |||
145 | struct tasklet_struct finish_tasklet; | 151 | struct tasklet_struct finish_tasklet; |
146 | 152 | ||
147 | struct timer_list timer; /* Timer for timeouts */ | 153 | struct timer_list timer; /* Timer for timeouts */ |
154 | unsigned int card_int_set; /* card int status */ | ||
148 | 155 | ||
149 | unsigned int caps; /* Alternative capabilities */ | 156 | unsigned int caps; /* Alternative capabilities */ |
150 | 157 | ||
@@ -162,4 +169,4 @@ struct sdhci_host { | |||
162 | 169 | ||
163 | unsigned long private[0] ____cacheline_aligned; | 170 | unsigned long private[0] ____cacheline_aligned; |
164 | }; | 171 | }; |
165 | #endif /* __SDHCI_H */ | 172 | #endif /* LINUX_MMC_SDHCI_H */ |