aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mmc/sdhci.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/mmc/sdhci.h')
-rw-r--r--include/linux/mmc/sdhci.h79
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 */