aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-11 13:56:48 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-11 13:56:48 -0500
commitaa7ed01f93ff7e149cad46f13f66b269d59c9bc0 (patch)
treeab46a44f3c83c75e1c81f211acd0d68ffe60dd7c /include/linux
parent7796c11c728ad40ba4151d559a949c002deffb9a (diff)
parent017210d1c0dc2e2d3b142985cb31d90b98dc0f0f (diff)
Merge tag 'mmc-v3.20-1' of git://git.linaro.org/people/ulf.hansson/mmc
Pull MMC updates from Ulf Hansson: "MMC core: - Support for MMC power sequences. - SDIO function devicetree subnode parsing. - Refactor the hardware reset routines and enable it for SD cards. - Various code quality improvements, especially for slot-gpio. MMC host: - dw_mmc: Various fixes and cleanups. - dw_mmc: Convert to mmc_send_tuning(). - moxart: Fix probe logic. - sdhci: Various fixes and cleanups - sdhci: Asynchronous request handling support. - sdhci-pxav3: Various fixes and cleanups. - sdhci-tegra: Fixes for T114, T124 and T132. - rtsx: Various fixes and cleanups. - rtsx: Support for SDIO. - sdhi/tmio: Refactor and cleanup of header files. - omap_hsmmc: Use slot-gpio and common MMC DT parser. - Make all hosts to deal with errors from mmc_of_parse(). - sunxi: Various fixes and cleanups. - sdhci: Support for Fujitsu SDHCI controller f_sdh30" * tag 'mmc-v3.20-1' of git://git.linaro.org/people/ulf.hansson/mmc: (117 commits) mmc: sdhci-s3c: solve problem with sleeping in atomic context mmc: pwrseq: add driver for emmc hardware reset mmc: moxart: fix probe logic mmc: core: Invoke mmc_pwrseq_post_power_on() prior MMC_POWER_ON state mmc: pwrseq_simple: Add optional reference clock support mmc: pwrseq: Document optional clock for the simple power sequence mmc: pwrseq_simple: Extend to support more pins mmc: pwrseq: Document that simple sequence support more than one GPIO mmc: Add hardware dependencies for sdhci-pxav3 and sdhci-pxav2 mmc: sdhci-pxav3: Modify clock settings for the SDR50 and DDR50 modes mmc: sdhci-pxav3: Extend binding with SDIO3 conf reg for the Armada 38x mmc: sdhci-pxav3: Fix Armada 38x controller's caps according to erratum ERR-7878951 mmc: sdhci-pxav3: Fix SDR50 and DDR50 capabilities for the Armada 38x flavor mmc: sdhci: switch voltage before sdhci_set_ios in runtime resume mmc: tegra: Write xfer_mode, CMD regs in together mmc: Resolve BKOPS compatability issue mmc: sdhci-pxav3: fix setting of pdata->clk_delay_cycles mmc: dw_mmc: rockchip: remove incorrect __exit_p() mmc: dw_mmc: exynos: remove incorrect __exit_p() mmc: Fix menuconfig alignment of MMC_SDHCI_* options ...
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mfd/tmio.h28
-rw-r--r--include/linux/mmc/card.h2
-rw-r--r--include/linux/mmc/core.h1
-rw-r--r--include/linux/mmc/dw_mmc.h6
-rw-r--r--include/linux/mmc/host.h4
-rw-r--r--include/linux/mmc/mmc.h10
-rw-r--r--include/linux/mmc/sdhci.h10
-rw-r--r--include/linux/mmc/sh_mobile_sdhi.h15
-rw-r--r--include/linux/mmc/slot-gpio.h5
-rw-r--r--include/linux/platform_data/mmc-omap.h4
10 files changed, 28 insertions, 57 deletions
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h
index 57388171610d..605812820e48 100644
--- a/include/linux/mfd/tmio.h
+++ b/include/linux/mfd/tmio.h
@@ -96,11 +96,6 @@
96#define TMIO_MMC_SDIO_STATUS_QUIRK (1 << 8) 96#define TMIO_MMC_SDIO_STATUS_QUIRK (1 << 8)
97 97
98/* 98/*
99 * Some controllers have DMA enable/disable register
100 */
101#define TMIO_MMC_HAVE_CTL_DMA_REG (1 << 9)
102
103/*
104 * Some controllers allows to set SDx actual clock 99 * Some controllers allows to set SDx actual clock
105 */ 100 */
106#define TMIO_MMC_CLK_ACTUAL (1 << 10) 101#define TMIO_MMC_CLK_ACTUAL (1 << 10)
@@ -112,18 +107,6 @@ void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state);
112 107
113struct dma_chan; 108struct dma_chan;
114 109
115struct tmio_mmc_dma {
116 void *chan_priv_tx;
117 void *chan_priv_rx;
118 int slave_id_tx;
119 int slave_id_rx;
120 int alignment_shift;
121 dma_addr_t dma_rx_offset;
122 bool (*filter)(struct dma_chan *chan, void *arg);
123};
124
125struct tmio_mmc_host;
126
127/* 110/*
128 * data for the MMC controller 111 * data for the MMC controller
129 */ 112 */
@@ -132,19 +115,12 @@ struct tmio_mmc_data {
132 unsigned long capabilities; 115 unsigned long capabilities;
133 unsigned long capabilities2; 116 unsigned long capabilities2;
134 unsigned long flags; 117 unsigned long flags;
135 unsigned long bus_shift;
136 u32 ocr_mask; /* available voltages */ 118 u32 ocr_mask; /* available voltages */
137 struct tmio_mmc_dma *dma;
138 struct device *dev;
139 unsigned int cd_gpio; 119 unsigned int cd_gpio;
120 int alignment_shift;
121 dma_addr_t dma_rx_offset;
140 void (*set_pwr)(struct platform_device *host, int state); 122 void (*set_pwr)(struct platform_device *host, int state);
141 void (*set_clk_div)(struct platform_device *host, int state); 123 void (*set_clk_div)(struct platform_device *host, int state);
142 int (*write16_hook)(struct tmio_mmc_host *host, int addr);
143 /* clock management callbacks */
144 int (*clk_enable)(struct platform_device *pdev, unsigned int *f);
145 void (*clk_disable)(struct platform_device *pdev);
146 int (*multi_io_quirk)(struct mmc_card *card,
147 unsigned int direction, int blk_size);
148}; 124};
149 125
150/* 126/*
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 4d69c00497bd..a6cf4c063e4e 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -83,7 +83,7 @@ struct mmc_ext_csd {
83 bool hpi; /* HPI support bit */ 83 bool hpi; /* HPI support bit */
84 unsigned int hpi_cmd; /* cmd used as HPI */ 84 unsigned int hpi_cmd; /* cmd used as HPI */
85 bool bkops; /* background support bit */ 85 bool bkops; /* background support bit */
86 bool bkops_en; /* background enable bit */ 86 bool man_bkops_en; /* manual bkops enable bit */
87 unsigned int data_sector_size; /* 512 bytes or 4KB */ 87 unsigned int data_sector_size; /* 512 bytes or 4KB */
88 unsigned int data_tag_unit_size; /* DATA TAG UNIT size */ 88 unsigned int data_tag_unit_size; /* DATA TAG UNIT size */
89 unsigned int boot_ro_lock; /* ro lock support */ 89 unsigned int boot_ro_lock; /* ro lock support */
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h
index cb2b0400d284..160448f920ac 100644
--- a/include/linux/mmc/core.h
+++ b/include/linux/mmc/core.h
@@ -182,7 +182,6 @@ extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen);
182extern int mmc_set_blockcount(struct mmc_card *card, unsigned int blockcount, 182extern int mmc_set_blockcount(struct mmc_card *card, unsigned int blockcount,
183 bool is_rel_write); 183 bool is_rel_write);
184extern int mmc_hw_reset(struct mmc_host *host); 184extern int mmc_hw_reset(struct mmc_host *host);
185extern int mmc_hw_reset_check(struct mmc_host *host);
186extern int mmc_can_reset(struct mmc_card *card); 185extern int mmc_can_reset(struct mmc_card *card);
187 186
188extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *); 187extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *);
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h
index 42b724e8d503..471fb3116dbe 100644
--- a/include/linux/mmc/dw_mmc.h
+++ b/include/linux/mmc/dw_mmc.h
@@ -106,6 +106,11 @@ struct mmc_data;
106 * @cur_slot, @mrq and @state. These must always be updated 106 * @cur_slot, @mrq and @state. These must always be updated
107 * at the same time while holding @lock. 107 * at the same time while holding @lock.
108 * 108 *
109 * @irq_lock is an irq-safe spinlock protecting the INTMASK register
110 * to allow the interrupt handler to modify it directly. Held for only long
111 * enough to read-modify-write INTMASK and no other locks are grabbed when
112 * holding this one.
113 *
109 * The @mrq field of struct dw_mci_slot is also protected by @lock, 114 * The @mrq field of struct dw_mci_slot is also protected by @lock,
110 * and must always be written at the same time as the slot is added to 115 * and must always be written at the same time as the slot is added to
111 * @queue. 116 * @queue.
@@ -125,6 +130,7 @@ struct mmc_data;
125 */ 130 */
126struct dw_mci { 131struct dw_mci {
127 spinlock_t lock; 132 spinlock_t lock;
133 spinlock_t irq_lock;
128 void __iomem *regs; 134 void __iomem *regs;
129 135
130 struct scatterlist *sg; 136 struct scatterlist *sg;
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 9f322706f7cb..0c8cbe5d1550 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -166,7 +166,6 @@ struct mmc_async_req {
166 * struct mmc_slot - MMC slot functions 166 * struct mmc_slot - MMC slot functions
167 * 167 *
168 * @cd_irq: MMC/SD-card slot hotplug detection IRQ or -EINVAL 168 * @cd_irq: MMC/SD-card slot hotplug detection IRQ or -EINVAL
169 * @lock: protect the @handler_priv pointer
170 * @handler_priv: MMC/SD-card slot context 169 * @handler_priv: MMC/SD-card slot context
171 * 170 *
172 * Some MMC/SD host controllers implement slot-functions like card and 171 * Some MMC/SD host controllers implement slot-functions like card and
@@ -176,7 +175,6 @@ struct mmc_async_req {
176 */ 175 */
177struct mmc_slot { 176struct mmc_slot {
178 int cd_irq; 177 int cd_irq;
179 struct mutex lock;
180 void *handler_priv; 178 void *handler_priv;
181}; 179};
182 180
@@ -197,6 +195,7 @@ struct mmc_context_info {
197}; 195};
198 196
199struct regulator; 197struct regulator;
198struct mmc_pwrseq;
200 199
201struct mmc_supply { 200struct mmc_supply {
202 struct regulator *vmmc; /* Card power supply */ 201 struct regulator *vmmc; /* Card power supply */
@@ -208,6 +207,7 @@ struct mmc_host {
208 struct device class_dev; 207 struct device class_dev;
209 int index; 208 int index;
210 const struct mmc_host_ops *ops; 209 const struct mmc_host_ops *ops;
210 struct mmc_pwrseq *pwrseq;
211 unsigned int f_min; 211 unsigned int f_min;
212 unsigned int f_max; 212 unsigned int f_max;
213 unsigned int f_init; 213 unsigned int f_init;
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index 49ad7a943638..124f562118b8 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -53,11 +53,6 @@
53#define MMC_SEND_TUNING_BLOCK 19 /* adtc R1 */ 53#define MMC_SEND_TUNING_BLOCK 19 /* adtc R1 */
54#define MMC_SEND_TUNING_BLOCK_HS200 21 /* adtc R1 */ 54#define MMC_SEND_TUNING_BLOCK_HS200 21 /* adtc R1 */
55 55
56#define MMC_TUNING_BLK_PATTERN_4BIT_SIZE 64
57#define MMC_TUNING_BLK_PATTERN_8BIT_SIZE 128
58extern const u8 tuning_blk_pattern_4bit[MMC_TUNING_BLK_PATTERN_4BIT_SIZE];
59extern const u8 tuning_blk_pattern_8bit[MMC_TUNING_BLK_PATTERN_8BIT_SIZE];
60
61 /* class 3 */ 56 /* class 3 */
62#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */ 57#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */
63 58
@@ -433,6 +428,11 @@ struct _mmc_csd {
433#define EXT_CSD_BKOPS_LEVEL_2 0x2 428#define EXT_CSD_BKOPS_LEVEL_2 0x2
434