diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-11 14:19:09 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-11 14:19:09 -0500 |
| commit | 11b84c585764155d7cc75f95f1bdc86432e5e3cb (patch) | |
| tree | 2c4718ae6ec42f47d09f8e7649eef5e7a1b00f2b /include/linux/mmc | |
| parent | 29594404d7fe73cd80eaa4ee8c43dcc53970c60e (diff) | |
| parent | 71e69211eac889898dec5a21270347591eb2d001 (diff) | |
Merge tag 'mmc-updates-for-3.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
Pull MMC updates from Chris Ball:
"MMC highlights for 3.8:
Core:
- Expose access to the eMMC RPMB ("Replay Protected Memory Block")
area by extending the existing mmc_block ioctl.
- Add SDIO powered-suspend DT properties to the core MMC DT binding.
- Add no-1-8-v DT flag for boards where the SD controller reports
that it supports 1.8V but the board itself has no way to switch to
1.8V.
- More work on switching to 1.8V UHS support using a vqmmc regulator.
- Fix up a case where the slot-gpio helper may fail to reset the host
controller properly if a card was removed during a transfer.
- Fix several cases where a broken device could cause an infinite
loop while we wait for a register to update.
Drivers:
- at91-mci: Remove obsolete driver, atmel-mci handles these devices
now.
- sdhci-dove: Allow using GPIOs for card-detect notifications.
- sdhci-esdhc: Fix for recovering from ADMA errors on broken silicon.
- sdhci-s3c: Add pinctrl support.
- wmt-sdmmc: New driver for WonderMedia SD/MMC controllers."
* tag 'mmc-updates-for-3.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc: (65 commits)
mmc: sdhci: implement the .card_event() method
mmc: extend the slot-gpio card-detection to use host's .card_event() method
mmc: add a card-event host operation
mmc: sdhci-s3c: Fix compilation warning
mmc: sdhci-pci: Enable SDHCI_CAN_DO_HISPD for Ricoh SDHCI controller
mmc: sdhci-dove: allow GPIOs to be used for card detection on Dove
mmc: sdhci-dove: use two-stage initialization for sdhci-pltfm
mmc: sdhci-dove: use devm_clk_get()
mmc: eSDHC: Recover from ADMA errors
mmc: dw_mmc: remove duplicated buswidth code
mmc: dw_mmc: relocate where dw_mci_setup_bus() is called from
mmc: Limit MMC speed to 52MHz if not HS200
mmc: dw_mmc: use devres functions in dw_mmc
mmc: sh_mmcif: remove unneeded clock connection ID
mmc: sh_mobile_sdhi: remove unneeded clock connection ID
mmc: sh_mobile_sdhi: fix clock frequency printing
mmc: Remove redundant null check before kfree in bus.c
mmc: Remove redundant null check before kfree in sdio_bus.c
mmc: sdhci-imx-esdhc: use more devm_* functions
mmc: dt: add no-1-8-v device tree flag
...
Diffstat (limited to 'include/linux/mmc')
| -rw-r--r-- | include/linux/mmc/card.h | 2 | ||||
| -rw-r--r-- | include/linux/mmc/core.h | 2 | ||||
| -rw-r--r-- | include/linux/mmc/dw_mmc.h | 5 | ||||
| -rw-r--r-- | include/linux/mmc/host.h | 17 | ||||
| -rw-r--r-- | include/linux/mmc/mmc.h | 2 | ||||
| -rw-r--r-- | include/linux/mmc/mxs-mmc.h | 19 | ||||
| -rw-r--r-- | include/linux/mmc/sdhci.h | 6 |
7 files changed, 22 insertions, 31 deletions
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 943550dfe9ea..5c69315d60cc 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
| @@ -85,6 +85,7 @@ struct mmc_ext_csd { | |||
| 85 | bool boot_ro_lockable; | 85 | bool boot_ro_lockable; |
| 86 | u8 raw_exception_status; /* 53 */ | 86 | u8 raw_exception_status; /* 53 */ |
| 87 | u8 raw_partition_support; /* 160 */ | 87 | u8 raw_partition_support; /* 160 */ |
| 88 | u8 raw_rpmb_size_mult; /* 168 */ | ||
| 88 | u8 raw_erased_mem_count; /* 181 */ | 89 | u8 raw_erased_mem_count; /* 181 */ |
| 89 | u8 raw_ext_csd_structure; /* 194 */ | 90 | u8 raw_ext_csd_structure; /* 194 */ |
| 90 | u8 raw_card_type; /* 196 */ | 91 | u8 raw_card_type; /* 196 */ |
| @@ -206,6 +207,7 @@ struct mmc_part { | |||
| 206 | #define MMC_BLK_DATA_AREA_MAIN (1<<0) | 207 | #define MMC_BLK_DATA_AREA_MAIN (1<<0) |
| 207 | #define MMC_BLK_DATA_AREA_BOOT (1<<1) | 208 | #define MMC_BLK_DATA_AREA_BOOT (1<<1) |
| 208 | #define MMC_BLK_DATA_AREA_GP (1<<2) | 209 | #define MMC_BLK_DATA_AREA_GP (1<<2) |
| 210 | #define MMC_BLK_DATA_AREA_RPMB (1<<3) | ||
| 209 | }; | 211 | }; |
| 210 | 212 | ||
| 211 | /* | 213 | /* |
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index 9b9cdafc7737..5bf7c2274fcb 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
| @@ -170,6 +170,8 @@ extern int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from, | |||
| 170 | extern unsigned int mmc_calc_max_discard(struct mmc_card *card); | 170 | extern unsigned int mmc_calc_max_discard(struct mmc_card *card); |
| 171 | 171 | ||
| 172 | extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen); | 172 | extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen); |
| 173 | extern int mmc_set_blockcount(struct mmc_card *card, unsigned int blockcount, | ||
| 174 | bool is_rel_write); | ||
| 173 | extern int mmc_hw_reset(struct mmc_host *host); | 175 | extern int mmc_hw_reset(struct mmc_host *host); |
| 174 | extern int mmc_hw_reset_check(struct mmc_host *host); | 176 | extern int mmc_hw_reset_check(struct mmc_host *host); |
| 175 | extern int mmc_can_reset(struct mmc_card *card); | 177 | extern int mmc_can_reset(struct mmc_card *card); |
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 96531664a061..34be4f47293c 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h | |||
| @@ -229,8 +229,9 @@ struct dw_mci_board { | |||
| 229 | u32 quirks; /* Workaround / Quirk flags */ | 229 | u32 quirks; /* Workaround / Quirk flags */ |
| 230 | unsigned int bus_hz; /* Clock speed at the cclk_in pad */ | 230 | unsigned int bus_hz; /* Clock speed at the cclk_in pad */ |
| 231 | 231 | ||
| 232 | unsigned int caps; /* Capabilities */ | 232 | u32 caps; /* Capabilities */ |
| 233 | unsigned int caps2; /* More capabilities */ | 233 | u32 caps2; /* More capabilities */ |
| 234 | u32 pm_caps; /* PM capabilities */ | ||
| 234 | /* | 235 | /* |
| 235 | * Override fifo depth. If 0, autodetect it from the FIFOTH register, | 236 | * Override fifo depth. If 0, autodetect it from the FIFOTH register, |
| 236 | * but note that this may not be reliable after a bootloader has used | 237 | * but note that this may not be reliable after a bootloader has used |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 7abb0e1f7bda..61a10c17aabd 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
| @@ -53,12 +53,12 @@ struct mmc_ios { | |||
| 53 | #define MMC_TIMING_LEGACY 0 | 53 | #define MMC_TIMING_LEGACY 0 |
| 54 | #define MMC_TIMING_MMC_HS 1 | 54 | #define MMC_TIMING_MMC_HS 1 |
| 55 | #define MMC_TIMING_SD_HS 2 | 55 | #define MMC_TIMING_SD_HS 2 |
| 56 | #define MMC_TIMING_UHS_SDR12 MMC_TIMING_LEGACY | 56 | #define MMC_TIMING_UHS_SDR12 3 |
| 57 | #define MMC_TIMING_UHS_SDR25 MMC_TIMING_SD_HS | 57 | #define MMC_TIMING_UHS_SDR25 4 |
| 58 | #define MMC_TIMING_UHS_SDR50 3 | 58 | #define MMC_TIMING_UHS_SDR50 5 |
| 59 | #define MMC_TIMING_UHS_SDR104 4 | 59 | #define MMC_TIMING_UHS_SDR104 6 |
| 60 | #define MMC_TIMING_UHS_DDR50 5 | 60 | #define MMC_TIMING_UHS_DDR50 7 |
| 61 | #define MMC_TIMING_MMC_HS200 6 | 61 | #define MMC_TIMING_MMC_HS200 8 |
| 62 | 62 | ||
| 63 | #define MMC_SDR_MODE 0 | 63 | #define MMC_SDR_MODE 0 |
| 64 | #define MMC_1_2V_DDR_MODE 1 | 64 | #define MMC_1_2V_DDR_MODE 1 |
| @@ -136,6 +136,7 @@ struct mmc_host_ops { | |||
| 136 | void (*enable_preset_value)(struct mmc_host *host, bool enable); | 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); | 137 | int (*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv); |
| 138 | void (*hw_reset)(struct mmc_host *host); | 138 | void (*hw_reset)(struct mmc_host *host); |
| 139 | void (*card_event)(struct mmc_host *host); | ||
| 139 | }; | 140 | }; |
| 140 | 141 | ||
| 141 | struct mmc_card; | 142 | struct mmc_card; |
| @@ -211,7 +212,7 @@ struct mmc_host { | |||
| 211 | #define MMC_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */ | 212 | #define MMC_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */ |
| 212 | #define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */ | 213 | #define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */ |
| 213 | 214 | ||
| 214 | unsigned long caps; /* Host capabilities */ | 215 | u32 caps; /* Host capabilities */ |
| 215 | 216 | ||
| 216 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ | 217 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ |
| 217 | #define MMC_CAP_MMC_HIGHSPEED (1 << 1) /* Can do MMC high-speed timing */ | 218 | #define MMC_CAP_MMC_HIGHSPEED (1 << 1) /* Can do MMC high-speed timing */ |
| @@ -241,7 +242,7 @@ struct mmc_host { | |||
| 241 | #define MMC_CAP_CMD23 (1 << 30) /* CMD23 supported. */ | 242 | #define MMC_CAP_CMD23 (1 << 30) /* CMD23 supported. */ |
| 242 | #define MMC_CAP_HW_RESET (1 << 31) /* Hardware reset */ | 243 | #define MMC_CAP_HW_RESET (1 << 31) /* Hardware reset */ |
| 243 | 244 | ||
| 244 | unsigned int caps2; /* More host capabilities */ | 245 | u32 caps2; /* More host capabilities */ |
| 245 | 246 | ||
| 246 | #define MMC_CAP2_BOOTPART_NOACC (1 << 0) /* Boot partition no access */ | 247 | #define MMC_CAP2_BOOTPART_NOACC (1 << 0) /* Boot partition no access */ |
| 247 | #define MMC_CAP2_CACHE_CTRL (1 << 1) /* Allow cache control */ | 248 | #define MMC_CAP2_CACHE_CTRL (1 << 1) /* Allow cache control */ |
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 01e4b394029b..94d532e41c61 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
| @@ -286,6 +286,7 @@ struct _mmc_csd { | |||
| 286 | #define EXT_CSD_BKOPS_START 164 /* W */ | 286 | #define EXT_CSD_BKOPS_START 164 /* W */ |
| 287 | #define EXT_CSD_SANITIZE_START 165 /* W */ | 287 | #define EXT_CSD_SANITIZE_START 165 /* W */ |
| 288 | #define EXT_CSD_WR_REL_PARAM 166 /* RO */ | 288 | #define EXT_CSD_WR_REL_PARAM 166 /* RO */ |
| 289 | #define EXT_CSD_RPMB_MULT 168 /* RO */ | ||
| 289 | #define EXT_CSD_BOOT_WP 173 /* R/W */ | 290 | #define EXT_CSD_BOOT_WP 173 /* R/W */ |
| 290 | #define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */ | 291 | #define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */ |
| 291 | #define EXT_CSD_PART_CONFIG 179 /* R/W */ | 292 | #define EXT_CSD_PART_CONFIG 179 /* R/W */ |
| @@ -339,6 +340,7 @@ struct _mmc_csd { | |||
| 339 | 340 | ||
| 340 | #define EXT_CSD_PART_CONFIG_ACC_MASK (0x7) | 341 | #define EXT_CSD_PART_CONFIG_ACC_MASK (0x7) |
| 341 | #define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1) | 342 | #define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1) |
| 343 | #define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3) | ||
| 342 | #define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4) | 344 | #define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4) |
| 343 | 345 | ||
| 344 | #define EXT_CSD_PART_SUPPORT_PART_EN (0x1) | 346 | #define EXT_CSD_PART_SUPPORT_PART_EN (0x1) |
diff --git a/include/linux/mmc/mxs-mmc.h b/include/linux/mmc/mxs-mmc.h deleted file mode 100644 index 7c2ad3a7f2f3..000000000000 --- a/include/linux/mmc/mxs-mmc.h +++ /dev/null | |||
| @@ -1,19 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef __LINUX_MMC_MXS_MMC_H__ | ||
| 10 | #define __LINUX_MMC_MXS_MMC_H__ | ||
| 11 | |||
| 12 | struct mxs_mmc_platform_data { | ||
| 13 | int wp_gpio; /* write protect pin */ | ||
| 14 | unsigned int flags; | ||
| 15 | #define SLOTF_4_BIT_CAPABLE (1 << 0) | ||
| 16 | #define SLOTF_8_BIT_CAPABLE (1 << 1) | ||
| 17 | }; | ||
| 18 | |||
| 19 | #endif /* __LINUX_MMC_MXS_MMC_H__ */ | ||
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index 1edcb4dad8c4..4bbc3301fbbf 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h | |||
| @@ -92,6 +92,8 @@ struct sdhci_host { | |||
| 92 | 92 | ||
| 93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) | 93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) |
| 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 */ | ||
| 96 | #define SDHCI_QUIRK2_NO_1_8_V (1<<2) | ||
| 95 | 97 | ||
| 96 | int irq; /* Device IRQ */ | 98 | int irq; /* Device IRQ */ |
| 97 | void __iomem *ioaddr; /* Mapped address */ | 99 | void __iomem *ioaddr; /* Mapped address */ |
| @@ -158,8 +160,8 @@ struct sdhci_host { | |||
| 158 | 160 | ||
| 159 | struct timer_list timer; /* Timer for timeouts */ | 161 | struct timer_list timer; /* Timer for timeouts */ |
| 160 | 162 | ||
| 161 | unsigned int caps; /* Alternative CAPABILITY_0 */ | 163 | u32 caps; /* Alternative CAPABILITY_0 */ |
| 162 | unsigned int caps1; /* Alternative CAPABILITY_1 */ | 164 | u32 caps1; /* Alternative CAPABILITY_1 */ |
| 163 | 165 | ||
| 164 | unsigned int ocr_avail_sdio; /* OCR bit masks */ | 166 | unsigned int ocr_avail_sdio; /* OCR bit masks */ |
| 165 | unsigned int ocr_avail_sd; | 167 | unsigned int ocr_avail_sd; |
