linux/drivers/mmc/core
Arindam Nath f2119df6b7 mmc: sd: add support for signal voltage switch procedure
Host Controller v3.00 adds another Capabilities register. Apart
from other things, this new register indicates whether the Host
Controller supports SDR50, SDR104, and DDR50 UHS-I modes. The spec
doesn't mention about explicit support for SDR12 and SDR25 UHS-I
modes, so the Host Controller v3.00 should support them by default.
Also if the controller supports SDR104 mode, it will also support
SDR50 mode as well. So depending on the host support, we set the
corresponding MMC_CAP_* flags. One more new register. Host Control2
is added in v3.00, which is used during Signal Voltage Switch
procedure described below.

Since as per v3.00 spec, UHS-I supported hosts should set S18R
to 1, we set S18R (bit 24) of OCR before sending ACMD41. We also
need to set XPC (bit 28) of OCR in case the host can supply >150mA.
This support is indicated by the Maximum Current Capabilities
register of the Host Controller.

If the response of ACMD41 has both CCS and S18A set, we start the
signal voltage switch procedure, which if successfull, will switch
the card from 3.3V signalling to 1.8V signalling. Signal voltage
switch procedure adds support for a new command CMD11 in the
Physical Layer Spec v3.01. As part of this procedure, we need to
set 1.8V Signalling Enable (bit 3) of Host Control2 register, which
if remains set after 5ms, means the switch to 1.8V signalling is
successfull. Otherwise, we clear bit 24 of OCR and retry the
initialization sequence. When we remove the card, and insert the
same or another card, we need to make sure that we start with 3.3V
signalling voltage. So we call mmc_set_signal_voltage() with
MMC_SIGNAL_VOLTAGE_330 set so that we are back to 3.3V signalling
voltage before we actually start initializing the card.

Tested by Zhangfei Gao with a Toshiba uhs card and general hs card,
on mmp2 in SDMA mode.

Signed-off-by: Arindam Nath <arindam.nath@amd.com>
Reviewed-by: Philip Rakity <prakity@marvell.com>
Tested-by: Philip Rakity <prakity@marvell.com>
Acked-by: Zhangfei Gao <zhangfei.gao@marvell.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
2011-05-24 21:04:38 -04:00
..
bus.c mmc: core: mmc_add_card(): fix missing break in switch statement 2011-04-27 19:15:07 -04:00
bus.h mmc: rename dev_to_mmc_card() to mmc_dev_to_card() 2010-10-23 21:11:12 +08:00
core.c mmc: sd: add support for signal voltage switch procedure 2011-05-24 21:04:38 -04:00
core.h mmc: sd: add support for signal voltage switch procedure 2011-05-24 21:04:38 -04:00
debugfs.c mmc: Aggressive clock gating framework 2011-01-08 22:48:03 -05:00
host.c mmc: core: fix memory leak in mmc_add_host 2011-05-24 21:00:50 -04:00
host.h mmc: Aggressive clock gating framework 2011-01-08 22:48:03 -05:00
Kconfig mmc: Aggressive clock gating framework 2011-01-08 22:48:03 -05:00
Makefile mmc: add per device quirk placeholder 2011-03-15 13:48:33 -04:00
mmc_ops.c mmc: initialize struct mmc_request at declaration time 2011-05-24 21:02:01 -04:00
mmc_ops.h mmc: core: Allow setting CMD timeout for CMD6 (SWITCH). 2011-05-24 21:01:13 -04:00
mmc.c mmc: MMC boot partitions support. 2011-05-24 21:01:21 -04:00
quirks.c mmc: quirks: Extends card quirks with MMC/SD quirks matching the CID. 2011-05-24 21:00:54 -04:00
sd_ops.c mmc: core: Add mmc CMD+ACMD passthrough ioctl 2011-05-24 21:02:54 -04:00
sd_ops.h mmc: add erase, secure erase, trim and secure trim operations 2010-08-12 08:43:30 -07:00
sd.c mmc: sd: add support for signal voltage switch procedure 2011-05-24 21:04:38 -04:00
sd.h mmc: split mmc_sd_init_card() 2010-08-11 08:59:02 -07:00
sdio_bus.c mmc: sdio: don't power up cards on system suspend 2011-01-08 22:48:13 -05:00
sdio_bus.h mmc: basic SDIO device model 2007-09-23 19:45:31 +02:00
sdio_cis.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sdio_cis.h sdio: split up common and function CIS parsing 2007-09-23 20:44:22 +02:00
sdio_io.c sdio: add new function for RAW (Read after Write) operation 2010-05-27 09:12:40 -07:00
sdio_irq.c Fix common misspellings 2011-03-31 11:26:23 -03:00
sdio_ops.c mmc: initialize struct mmc_request at declaration time 2011-05-24 21:02:01 -04:00
sdio_ops.h sdio: recognize io card without powercycle 2010-03-12 15:52:28 -08:00
sdio.c mmc: quirks: Extends card quirks with MMC/SD quirks matching the CID. 2011-05-24 21:00:54 -04:00