diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-26 12:31:09 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-26 12:31:09 -0500 |
commit | ed5dc2372dba46e0ecd08791b1a0399d313e5cff (patch) | |
tree | 571319985b59a2963fb7580c24ee2aa1696359e2 /include | |
parent | 0512c04a2b5d29a33d96d315e1d14c55f5148aa7 (diff) | |
parent | 0e786102949d7461859c6ce9f39c2c8d28e42db3 (diff) |
Merge tag 'mmc-updates-for-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
Pull MMC update from Chris Ball:
"MMC highlights for 3.9:
Core:
- Support for packed commands in eMMC 4.5. (This requires a host
capability to be turned on. It increases write throughput by 20%+,
but may also increase average write latency; more testing needed.)
- Add DT bindings for capability flags.
- Add mmc_of_parse() for shared DT parsing between drivers.
Drivers:
- android-goldfish: New MMC driver for the Android Goldfish emulator.
- mvsdio: Add DT bindings, pinctrl, use slot-gpio for card detection.
- omap_hsmmc: Fix boot hangs with RPMB partitions.
- sdhci-bcm2835: New driver for controller used by Raspberry Pi.
- sdhci-esdhc-imx: Add 8-bit data, auto CMD23 support, use slot-gpio.
- sh_mmcif: Add support for eMMC DDR, bundled MMCIF IRQs.
- tmio_mmc: Add DT bindings, support for vccq regulator"
* tag 'mmc-updates-for-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc: (92 commits)
mmc: tegra: assume CONFIG_OF, remove platform data
mmc: add DT bindings for more MMC capability flags
mmc: tmio: add support for the VccQ regulator
mmc: tmio: remove unused and deprecated symbols
mmc: sh_mobile_sdhi: use managed resource allocations
mmc: sh_mobile_sdhi: remove unused .pdata field
mmc: tmio-mmc: parse device-tree bindings
mmc: tmio-mmc: define device-tree bindings
mmc: sh_mmcif: use mmc_of_parse() to parse standard MMC DT bindings
mmc: (cosmetic) remove "extern" from function declarations
mmc: provide a standard MMC device-tree binding parser centrally
mmc: detailed definition of CD and WP MMC line polarities in DT
mmc: sdhi, tmio: only check flags in tmio-mmc driver proper
mmc: sdhci: Fix parameter of sdhci_do_start_signal_voltage_switch()
mmc: sdhci: check voltage range only on regulators aware of voltage value
mmc: bcm2835: set SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK
mmc: support packed write command for eMMC4.5 devices
mmc: add packed command feature of eMMC4.5
mmc: rtsx: remove driving adjustment
mmc: use regulator_can_change_voltage() instead of regulator_count_voltages
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mfd/tmio.h | 18 | ||||
-rw-r--r-- | include/linux/mmc/card.h | 22 | ||||
-rw-r--r-- | include/linux/mmc/core.h | 7 | ||||
-rw-r--r-- | include/linux/mmc/dw_mmc.h | 6 | ||||
-rw-r--r-- | include/linux/mmc/host.h | 61 | ||||
-rw-r--r-- | include/linux/mmc/mmc.h | 15 | ||||
-rw-r--r-- | include/linux/mmc/sdhci.h | 1 | ||||
-rw-r--r-- | include/linux/mmc/sh_mobile_sdhi.h | 2 | ||||
-rw-r--r-- | include/linux/platform_data/mmc-esdhc-imx.h | 1 | ||||
-rw-r--r-- | include/linux/platform_data/mmc-sdhci-tegra.h | 28 |
10 files changed, 95 insertions, 66 deletions
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index d83af39815ab..99bf3e665997 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
@@ -65,12 +65,6 @@ | |||
65 | */ | 65 | */ |
66 | #define TMIO_MMC_SDIO_IRQ (1 << 2) | 66 | #define TMIO_MMC_SDIO_IRQ (1 << 2) |
67 | /* | 67 | /* |
68 | * Some platforms can detect card insertion events with controller powered | ||
69 | * down, using a GPIO IRQ, in which case they have to fill in cd_irq, cd_gpio, | ||
70 | * and cd_flags fields of struct tmio_mmc_data. | ||
71 | */ | ||
72 | #define TMIO_MMC_HAS_COLD_CD (1 << 3) | ||
73 | /* | ||
74 | * Some controllers require waiting for the SD bus to become | 68 | * Some controllers require waiting for the SD bus to become |
75 | * idle before writing to some registers. | 69 | * idle before writing to some registers. |
76 | */ | 70 | */ |
@@ -117,18 +111,6 @@ struct tmio_mmc_data { | |||
117 | }; | 111 | }; |
118 | 112 | ||
119 | /* | 113 | /* |
120 | * This function is deprecated and will be removed soon. Please, convert your | ||
121 | * platform to use drivers/mmc/core/cd-gpio.c | ||
122 | */ | ||
123 | #include <linux/mmc/host.h> | ||
124 | static inline void tmio_mmc_cd_wakeup(struct tmio_mmc_data *pdata) | ||
125 | { | ||
126 | if (pdata) | ||
127 | mmc_detect_change(dev_get_drvdata(pdata->dev), | ||
128 | msecs_to_jiffies(100)); | ||
129 | } | ||
130 | |||
131 | /* | ||
132 | * data for the NAND controller | 114 | * data for the NAND controller |
133 | */ | 115 | */ |
134 | struct tmio_nand_data { | 116 | struct tmio_nand_data { |
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 5c69315d60cc..61b2c30c903b 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
@@ -53,6 +53,9 @@ struct mmc_ext_csd { | |||
53 | u8 part_config; | 53 | u8 part_config; |
54 | u8 cache_ctrl; | 54 | u8 cache_ctrl; |
55 | u8 rst_n_function; | 55 | u8 rst_n_function; |
56 | u8 max_packed_writes; | ||
57 | u8 max_packed_reads; | ||
58 | u8 packed_event_en; | ||
56 | unsigned int part_time; /* Units: ms */ | 59 | unsigned int part_time; /* Units: ms */ |
57 | unsigned int sa_timeout; /* Units: 100ns */ | 60 | unsigned int sa_timeout; /* Units: 100ns */ |
58 | unsigned int generic_cmd6_time; /* Units: 10ms */ | 61 | unsigned int generic_cmd6_time; /* Units: 10ms */ |
@@ -83,7 +86,7 @@ struct mmc_ext_csd { | |||
83 | unsigned int data_tag_unit_size; /* DATA TAG UNIT size */ | 86 | unsigned int data_tag_unit_size; /* DATA TAG UNIT size */ |
84 | unsigned int boot_ro_lock; /* ro lock support */ | 87 | unsigned int boot_ro_lock; /* ro lock support */ |
85 | bool boot_ro_lockable; | 88 | bool boot_ro_lockable; |
86 | u8 raw_exception_status; /* 53 */ | 89 | u8 raw_exception_status; /* 54 */ |
87 | u8 raw_partition_support; /* 160 */ | 90 | u8 raw_partition_support; /* 160 */ |
88 | u8 raw_rpmb_size_mult; /* 168 */ | 91 | u8 raw_rpmb_size_mult; /* 168 */ |
89 | u8 raw_erased_mem_count; /* 181 */ | 92 | u8 raw_erased_mem_count; /* 181 */ |
@@ -187,6 +190,18 @@ struct sdio_func_tuple; | |||
187 | 190 | ||
188 | #define SDIO_MAX_FUNCS 7 | 191 | #define SDIO_MAX_FUNCS 7 |
189 | 192 | ||
193 | enum mmc_blk_status { | ||
194 | MMC_BLK_SUCCESS = 0, | ||
195 | MMC_BLK_PARTIAL, | ||
196 | MMC_BLK_CMD_ERR, | ||
197 | MMC_BLK_RETRY, | ||
198 | MMC_BLK_ABORT, | ||
199 | MMC_BLK_DATA_ERR, | ||
200 | MMC_BLK_ECC_ERR, | ||
201 | MMC_BLK_NOMEDIUM, | ||
202 | MMC_BLK_NEW_REQUEST, | ||
203 | }; | ||
204 | |||
190 | /* The number of MMC physical partitions. These consist of: | 205 | /* The number of MMC physical partitions. These consist of: |
191 | * boot partitions (2), general purpose partitions (4) in MMC v4.4. | 206 | * boot partitions (2), general purpose partitions (4) in MMC v4.4. |
192 | */ | 207 | */ |
@@ -295,6 +310,11 @@ static inline void mmc_part_add(struct mmc_card *card, unsigned int size, | |||
295 | card->nr_parts++; | 310 | card->nr_parts++; |
296 | } | 311 | } |
297 | 312 | ||
313 | static inline bool mmc_large_sector(struct mmc_card *card) | ||
314 | { | ||
315 | return card->ext_csd.data_sector_size == 4096; | ||
316 | } | ||
317 | |||
298 | /* | 318 | /* |
299 | * The world is not perfect and supplies us with broken mmc/sdio devices. | 319 | * The world is not perfect and supplies us with broken mmc/sdio devices. |
300 | * For at least some of these bugs we need a work-around. | 320 | * For at least some of these bugs we need a work-around. |
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index 5bf7c2274fcb..39613b9a6fc5 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
@@ -18,6 +18,9 @@ struct mmc_request; | |||
18 | struct mmc_command { | 18 | struct mmc_command { |
19 | u32 opcode; | 19 | u32 opcode; |
20 | u32 arg; | 20 | u32 arg; |
21 | #define MMC_CMD23_ARG_REL_WR (1 << 31) | ||
22 | #define MMC_CMD23_ARG_PACKED ((0 << 31) | (1 << 30)) | ||
23 | #define MMC_CMD23_ARG_TAG_REQ (1 << 29) | ||
21 | u32 resp[4]; | 24 | u32 resp[4]; |
22 | unsigned int flags; /* expected response type */ | 25 | unsigned int flags; /* expected response type */ |
23 | #define MMC_RSP_PRESENT (1 << 0) | 26 | #define MMC_RSP_PRESENT (1 << 0) |
@@ -120,6 +123,7 @@ struct mmc_data { | |||
120 | s32 host_cookie; /* host private data */ | 123 | s32 host_cookie; /* host private data */ |
121 | }; | 124 | }; |
122 | 125 | ||
126 | struct mmc_host; | ||
123 | struct mmc_request { | 127 | struct mmc_request { |
124 | struct mmc_command *sbc; /* SET_BLOCK_COUNT for multiblock */ | 128 | struct mmc_command *sbc; /* SET_BLOCK_COUNT for multiblock */ |
125 | struct mmc_command *cmd; | 129 | struct mmc_command *cmd; |
@@ -128,9 +132,9 @@ struct mmc_request { | |||
128 | 132 | ||
129 | struct completion completion; | 133 | struct completion completion; |
130 | void (*done)(struct mmc_request *);/* completion function */ | 134 | void (*done)(struct mmc_request *);/* completion function */ |
135 | struct mmc_host *host; | ||
131 | }; | 136 | }; |
132 | 137 | ||
133 | struct mmc_host; | ||
134 | struct mmc_card; | 138 | struct mmc_card; |
135 | struct mmc_async_req; | 139 | struct mmc_async_req; |
136 | 140 | ||
@@ -147,6 +151,7 @@ extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *, | |||
147 | extern void mmc_start_bkops(struct mmc_card *card, bool from_exception); | 151 | extern void mmc_start_bkops(struct mmc_card *card, bool from_exception); |
148 | extern int __mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int, bool); | 152 | extern int __mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int, bool); |
149 | extern int mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int); | 153 | extern int mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int); |
154 | extern int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd); | ||
150 | 155 | ||
151 | #define MMC_ERASE_ARG 0x00000000 | 156 | #define MMC_ERASE_ARG 0x00000000 |
152 | #define MMC_SECURE_ERASE_ARG 0x80000000 | 157 | #define MMC_SECURE_ERASE_ARG 0x80000000 |
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 34be4f47293c..198f0fa44e9f 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h | |||
@@ -209,8 +209,10 @@ struct dw_mci_dma_ops { | |||
209 | #define DW_MCI_QUIRK_HIGHSPEED BIT(2) | 209 | #define DW_MCI_QUIRK_HIGHSPEED BIT(2) |
210 | /* Unreliable card detection */ | 210 | /* Unreliable card detection */ |
211 | #define DW_MCI_QUIRK_BROKEN_CARD_DETECTION BIT(3) | 211 | #define DW_MCI_QUIRK_BROKEN_CARD_DETECTION BIT(3) |
212 | /* Write Protect detection not available */ | 212 | |
213 | #define DW_MCI_QUIRK_NO_WRITE_PROTECT BIT(4) | 213 | /* Slot level quirks */ |
214 | /* This slot has no write protect */ | ||
215 | #define DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT BIT(0) | ||
214 | 216 | ||
215 | struct dma_pdata; | 217 | struct dma_pdata; |
216 | 218 | ||
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 61a10c17aabd..d6f20cc6415e 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -131,9 +131,11 @@ struct mmc_host_ops { | |||
131 | 131 | ||
132 | int (*start_signal_voltage_switch)(struct mmc_host *host, struct mmc_ios *ios); | 132 | int (*start_signal_voltage_switch)(struct mmc_host *host, struct mmc_ios *ios); |
133 | 133 | ||
134 | /* Check if the card is pulling dat[0:3] low */ | ||
135 | int (*card_busy)(struct mmc_host *host); | ||
136 | |||
134 | /* The tuning command opcode value is different for SD and eMMC cards */ | 137 | /* The tuning command opcode value is different for SD and eMMC cards */ |
135 | int (*execute_tuning)(struct mmc_host *host, u32 opcode); | 138 | int (*execute_tuning)(struct mmc_host *host, u32 opcode); |
136 | void (*enable_preset_value)(struct mmc_host *host, bool enable); | ||
137 | int (*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv); | 139 | int (*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv); |
138 | void (*hw_reset)(struct mmc_host *host); | 140 | void (*hw_reset)(struct mmc_host *host); |
139 | void (*card_event)(struct mmc_host *host); | 141 | void (*card_event)(struct mmc_host *host); |
@@ -170,6 +172,22 @@ struct mmc_slot { | |||
170 | void *handler_priv; | 172 | void *handler_priv; |
171 | }; | 173 | }; |
172 | 174 | ||
175 | /** | ||
176 | * mmc_context_info - synchronization details for mmc context | ||
177 | * @is_done_rcv wake up reason was done request | ||
178 | * @is_new_req wake up reason was new request | ||
179 | * @is_waiting_last_req mmc context waiting for single running request | ||
180 | * @wait wait queue | ||
181 | * @lock lock to protect data fields | ||
182 | */ | ||
183 | struct mmc_context_info { | ||
184 | bool is_done_rcv; | ||
185 | bool is_new_req; | ||
186 | bool is_waiting_last_req; | ||
187 | wait_queue_head_t wait; | ||
188 | spinlock_t lock; | ||
189 | }; | ||
190 | |||
173 | struct regulator; | 191 | struct regulator; |
174 | 192 | ||
175 | struct mmc_supply { | 193 | struct mmc_supply { |
@@ -258,6 +276,10 @@ struct mmc_host { | |||
258 | #define MMC_CAP2_HC_ERASE_SZ (1 << 9) /* High-capacity erase size */ | 276 | #define MMC_CAP2_HC_ERASE_SZ (1 << 9) /* High-capacity erase size */ |
259 | #define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10) /* Card-detect signal active high */ | 277 | #define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10) /* Card-detect signal active high */ |
260 | #define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11) /* Write-protect signal active high */ | 278 | #define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11) /* Write-protect signal active high */ |
279 | #define MMC_CAP2_PACKED_RD (1 << 12) /* Allow packed read */ | ||
280 | #define MMC_CAP2_PACKED_WR (1 << 13) /* Allow packed write */ | ||
281 | #define MMC_CAP2_PACKED_CMD (MMC_CAP2_PACKED_RD | \ | ||
282 | MMC_CAP2_PACKED_WR) | ||
261 | 283 | ||
262 | mmc_pm_flag_t pm_caps; /* supported pm features */ | 284 | mmc_pm_flag_t pm_caps; /* supported pm features */ |
263 | 285 | ||
@@ -331,6 +353,7 @@ struct mmc_host { | |||
331 | struct dentry *debugfs_root; | 353 | struct dentry *debugfs_root; |
332 | 354 | ||
333 | struct mmc_async_req *areq; /* active async req */ | 355 | struct mmc_async_req *areq; /* active async req */ |
356 | struct mmc_context_info context_info; /* async synchronization info */ | ||
334 | 357 | ||
335 | #ifdef CONFIG_FAIL_MMC_REQUEST | 358 | #ifdef CONFIG_FAIL_MMC_REQUEST |
336 | struct fault_attr fail_mmc_request; | 359 | struct fault_attr fail_mmc_request; |
@@ -341,10 +364,11 @@ struct mmc_host { | |||
341 | unsigned long private[0] ____cacheline_aligned; | 364 | unsigned long private[0] ____cacheline_aligned; |
342 | }; | 365 | }; |
343 | 366 | ||
344 | extern struct mmc_host *mmc_alloc_host(int extra, struct device *); | 367 | struct mmc_host *mmc_alloc_host(int extra, struct device *); |
345 | extern int mmc_add_host(struct mmc_host *); | 368 | int mmc_add_host(struct mmc_host *); |
346 | extern void mmc_remove_host(struct mmc_host *); | 369 | void mmc_remove_host(struct mmc_host *); |
347 | extern void mmc_free_host(struct mmc_host *); | 370 | void mmc_free_host(struct mmc_host *); |
371 | void mmc_of_parse(struct mmc_host *host); | ||
348 | 372 | ||
349 | static inline void *mmc_priv(struct mmc_host *host) | 373 | static inline void *mmc_priv(struct mmc_host *host) |
350 | { | 374 | { |
@@ -357,16 +381,16 @@ static inline void *mmc_priv(struct mmc_host *host) | |||
357 | #define mmc_classdev(x) (&(x)->class_dev) | 381 | #define mmc_classdev(x) (&(x)->class_dev) |
358 | #define mmc_hostname(x) (dev_name(&(x)->class_dev)) | 382 | #define mmc_hostname(x) (dev_name(&(x)->class_dev)) |
359 | 383 | ||
360 | extern int mmc_suspend_host(struct mmc_host *); | 384 | int mmc_suspend_host(struct mmc_host *); |
361 | extern int mmc_resume_host(struct mmc_host *); | 385 | int mmc_resume_host(struct mmc_host *); |
362 | 386 | ||
363 | extern int mmc_power_save_host(struct mmc_host *host); | 387 | int mmc_power_save_host(struct mmc_host *host); |
364 | extern int mmc_power_restore_host(struct mmc_host *host); | 388 | int mmc_power_restore_host(struct mmc_host *host); |
365 | 389 | ||
366 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); | 390 | void mmc_detect_change(struct mmc_host *, unsigned long delay); |
367 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); | 391 | void mmc_request_done(struct mmc_host *, struct mmc_request *); |
368 | 392 | ||
369 | extern int mmc_cache_ctrl(struct mmc_host *, u8); | 393 | int mmc_cache_ctrl(struct mmc_host *, u8); |
370 | 394 | ||
371 | static inline void mmc_signal_sdio_irq(struct mmc_host *host) | 395 | static inline void mmc_signal_sdio_irq(struct mmc_host *host) |
372 | { | 396 | { |
@@ -434,6 +458,19 @@ static inline int mmc_boot_partition_access(struct mmc_host *host) | |||
434 | return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC); | 458 | return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC); |
435 | } | 459 | } |
436 | 460 | ||
461 | static inline int mmc_host_uhs(struct mmc_host *host) | ||
462 | { | ||
463 | return host->caps & | ||
464 | (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | | ||
465 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | | ||
466 | MMC_CAP_UHS_DDR50); | ||
467 | } | ||
468 | |||
469 | static inline int mmc_host_packed_wr(struct mmc_host *host) | ||
470 | { | ||
471 | return host->caps2 & MMC_CAP2_PACKED_WR; | ||
472 | } | ||
473 | |||
437 | #ifdef CONFIG_MMC_CLKGATE | 474 | #ifdef CONFIG_MMC_CLKGATE |
438 | void mmc_host_clk_hold(struct mmc_host *host); | 475 | void mmc_host_clk_hold(struct mmc_host *host); |
439 | void mmc_host_clk_release(struct mmc_host *host); | 476 | void mmc_host_clk_release(struct mmc_host *host); |
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 94d532e41c61..50bcde3677ca 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
@@ -139,7 +139,7 @@ static inline bool mmc_op_multi(u32 opcode) | |||
139 | #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ | 139 | #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ |
140 | #define R1_READY_FOR_DATA (1 << 8) /* sx, a */ | 140 | #define R1_READY_FOR_DATA (1 << 8) /* sx, a */ |
141 | #define R1_SWITCH_ERROR (1 << 7) /* sx, c */ | 141 | #define R1_SWITCH_ERROR (1 << 7) /* sx, c */ |
142 | #define R1_EXCEPTION_EVENT (1 << 6) /* sx, a */ | 142 | #define R1_EXCEPTION_EVENT (1 << 6) /* sr, a */ |
143 | #define R1_APP_CMD (1 << 5) /* sr, c */ | 143 | #define R1_APP_CMD (1 << 5) /* sr, c */ |
144 | 144 | ||
145 | #define R1_STATE_IDLE 0 | 145 | #define R1_STATE_IDLE 0 |
@@ -275,7 +275,10 @@ struct _mmc_csd { | |||
275 | #define EXT_CSD_FLUSH_CACHE 32 /* W */ | 275 | #define EXT_CSD_FLUSH_CACHE 32 /* W */ |
276 | #define EXT_CSD_CACHE_CTRL 33 /* R/W */ | 276 | #define EXT_CSD_CACHE_CTRL 33 /* R/W */ |
277 | #define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */ | 277 | #define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */ |
278 | #define EXT_CSD_EXP_EVENTS_STATUS 54 /* RO */ | 278 | #define EXT_CSD_PACKED_FAILURE_INDEX 35 /* RO */ |
279 | #define EXT_CSD_PACKED_CMD_STATUS 36 /* RO */ | ||
280 | #define EXT_CSD_EXP_EVENTS_STATUS 54 /* RO, 2 bytes */ | ||
281 | #define EXT_CSD_EXP_EVENTS_CTRL 56 /* R/W, 2 bytes */ | ||
279 | #define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */ | 282 | #define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */ |
280 | #define EXT_CSD_GP_SIZE_MULT 143 /* R/W */ | 283 | #define EXT_CSD_GP_SIZE_MULT 143 /* R/W */ |
281 | #define EXT_CSD_PARTITION_ATTRIBUTE 156 /* R/W */ | 284 | #define EXT_CSD_PARTITION_ATTRIBUTE 156 /* R/W */ |
@@ -324,6 +327,8 @@ struct _mmc_csd { | |||
324 | #define EXT_CSD_CACHE_SIZE 249 /* RO, 4 bytes */ | 327 | #define EXT_CSD_CACHE_SIZE 249 /* RO, 4 bytes */ |
325 | #define EXT_CSD_TAG_UNIT_SIZE 498 /* RO */ | 328 | #define EXT_CSD_TAG_UNIT_SIZE 498 /* RO */ |
326 | #define EXT_CSD_DATA_TAG_SUPPORT 499 /* RO */ | 329 | #define EXT_CSD_DATA_TAG_SUPPORT 499 /* RO */ |
330 | #define EXT_CSD_MAX_PACKED_WRITES 500 /* RO */ | ||
331 | #define EXT_CSD_MAX_PACKED_READS 501 /* RO */ | ||
327 | #define EXT_CSD_BKOPS_SUPPORT 502 /* RO */ | 332 | #define EXT_CSD_BKOPS_SUPPORT 502 /* RO */ |
328 | #define EXT_CSD_HPI_FEATURES 503 /* RO */ | 333 | #define EXT_CSD_HPI_FEATURES 503 /* RO */ |
329 | 334 | ||
@@ -385,6 +390,9 @@ struct _mmc_csd { | |||
385 | #define EXT_CSD_PWR_CL_4BIT_MASK 0x0F /* 8 bit PWR CLS */ | 390 | #define EXT_CSD_PWR_CL_4BIT_MASK 0x0F /* 8 bit PWR CLS */ |
386 | #define EXT_CSD_PWR_CL_8BIT_SHIFT 4 | 391 | #define EXT_CSD_PWR_CL_8BIT_SHIFT 4 |
387 | #define EXT_CSD_PWR_CL_4BIT_SHIFT 0 | 392 | #define EXT_CSD_PWR_CL_4BIT_SHIFT 0 |
393 | |||
394 | #define EXT_CSD_PACKED_EVENT_EN BIT(3) | ||
395 | |||
388 | /* | 396 | /* |
389 | * EXCEPTION_EVENT_STATUS field | 397 | * EXCEPTION_EVENT_STATUS field |
390 | */ | 398 | */ |
@@ -393,6 +401,9 @@ struct _mmc_csd { | |||
393 | #define EXT_CSD_SYSPOOL_EXHAUSTED BIT(2) | 401 | #define EXT_CSD_SYSPOOL_EXHAUSTED BIT(2) |
394 | #define EXT_CSD_PACKED_FAILURE BIT(3) | 402 | #define EXT_CSD_PACKED_FAILURE BIT(3) |
395 | 403 | ||
404 | #define EXT_CSD_PACKED_GENERIC_ERROR BIT(0) | ||
405 | #define EXT_CSD_PACKED_INDEXED_ERROR BIT(1) | ||
406 | |||
396 | /* | 407 | /* |
397 | * BKOPS status level | 408 | * BKOPS status level |
398 | */ | 409 | */ |
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index 4bbc3301fbbf..b838ffc49e4a 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h | |||
@@ -94,6 +94,7 @@ struct sdhci_host { | |||
94 | #define SDHCI_QUIRK2_HOST_NO_CMD23 (1<<1) | 94 | #define SDHCI_QUIRK2_HOST_NO_CMD23 (1<<1) |
95 | /* The system physically doesn't support 1.8v, even if the host does */ | 95 | /* The system physically doesn't support 1.8v, even if the host does */ |
96 | #define SDHCI_QUIRK2_NO_1_8_V (1<<2) | 96 | #define SDHCI_QUIRK2_NO_1_8_V (1<<2) |
97 | #define SDHCI_QUIRK2_PRESET_VALUE_BROKEN (1<<3) | ||
97 | 98 | ||
98 | int irq; /* Device IRQ */ | 99 | int irq; /* Device IRQ */ |
99 | void __iomem *ioaddr; /* Mapped address */ | 100 | void __iomem *ioaddr; /* Mapped address */ |
diff --git a/include/linux/mmc/sh_mobile_sdhi.h b/include/linux/mmc/sh_mobile_sdhi.h index b65679ffa880..b76bcf0621f6 100644 --- a/include/linux/mmc/sh_mobile_sdhi.h +++ b/include/linux/mmc/sh_mobile_sdhi.h | |||
@@ -4,7 +4,6 @@ | |||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | struct platform_device; | 6 | struct platform_device; |
7 | struct tmio_mmc_data; | ||
8 | 7 | ||
9 | #define SH_MOBILE_SDHI_IRQ_CARD_DETECT "card_detect" | 8 | #define SH_MOBILE_SDHI_IRQ_CARD_DETECT "card_detect" |
10 | #define SH_MOBILE_SDHI_IRQ_SDCARD "sdcard" | 9 | #define SH_MOBILE_SDHI_IRQ_SDCARD "sdcard" |
@@ -26,7 +25,6 @@ struct sh_mobile_sdhi_info { | |||
26 | unsigned long tmio_caps2; | 25 | unsigned long tmio_caps2; |
27 | u32 tmio_ocr_mask; /* available MMC voltages */ | 26 | u32 tmio_ocr_mask; /* available MMC voltages */ |
28 | unsigned int cd_gpio; | 27 | unsigned int cd_gpio; |
29 | struct tmio_mmc_data *pdata; | ||
30 | void (*set_pwr)(struct platform_device *pdev, int state); | 28 | void (*set_pwr)(struct platform_device *pdev, int state); |
31 | int (*get_cd)(struct platform_device *pdev); | 29 | int (*get_cd)(struct platform_device *pdev); |
32 | 30 | ||
diff --git a/include/linux/platform_data/mmc-esdhc-imx.h b/include/linux/platform_data/mmc-esdhc-imx.h index aaf97481f413..b4a0521ce411 100644 --- a/include/linux/platform_data/mmc-esdhc-imx.h +++ b/include/linux/platform_data/mmc-esdhc-imx.h | |||
@@ -39,5 +39,6 @@ struct esdhc_platform_data { | |||
39 | unsigned int cd_gpio; | 39 | unsigned int cd_gpio; |
40 | enum wp_types wp_type; | 40 | enum wp_types wp_type; |
41 | enum cd_types cd_type; | 41 | enum cd_types cd_type; |
42 | int max_bus_width; | ||
42 | }; | 43 | }; |
43 | #endif /* __ASM_ARCH_IMX_ESDHC_H */ | 44 | #endif /* __ASM_ARCH_IMX_ESDHC_H */ |
diff --git a/include/linux/platform_data/mmc-sdhci-tegra.h b/include/linux/platform_data/mmc-sdhci-tegra.h deleted file mode 100644 index 8f8430697686..000000000000 --- a/include/linux/platform_data/mmc-sdhci-tegra.h +++ /dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 Palm, Inc. | ||
3 | * Author: Yvonne Yip <y@palm.com> | ||
4 | * | ||
5 | * This software is licensed under the terms of the GNU General Public | ||
6 | * License version 2, as published by the Free Software Foundation, and | ||
7 | * may be copied, distributed, and modified under those terms. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | */ | ||
15 | #ifndef __PLATFORM_DATA_TEGRA_SDHCI_H | ||
16 | #define __PLATFORM_DATA_TEGRA_SDHCI_H | ||
17 | |||
18 | #include <linux/mmc/host.h> | ||
19 | |||
20 | struct tegra_sdhci_platform_data { | ||
21 | int cd_gpio; | ||
22 | int wp_gpio; | ||
23 | int power_gpio; | ||
24 | int is_8bit; | ||
25 | int pm_flags; | ||
26 | }; | ||
27 | |||
28 | #endif | ||