d6d50a15a2
This patch adds support for setting driver strength during UHS-I initialization procedure. Since UHS-I cards set S18A (bit 24) in response to ACMD41, we use this as a base for UHS-I initialization. We modify the parameter list of mmc_sd_get_cid() so that we can save the ROCR from ACMD41 to check whether bit 24 is set. We decide whether the Host Controller supports A, C, or D driver type depending on the Capabilities register. Driver type B is suported by default. We then set the appropriate driver type for the card using CMD6 mode 1. As per Host Controller spec v3.00, we set driver type for the host only if Preset Value Enable in the Host Control2 register is not set. SDHCI_HOST_CONTROL has been renamed to SDHCI_HOST_CONTROL1 to conform to the spec. 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>
18 lines
534 B
C
18 lines
534 B
C
#ifndef _MMC_CORE_SD_H
|
|
#define _MMC_CORE_SD_H
|
|
|
|
#include <linux/mmc/card.h>
|
|
|
|
extern struct device_type sd_type;
|
|
|
|
int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr);
|
|
int mmc_sd_get_csd(struct mmc_host *host, struct mmc_card *card);
|
|
void mmc_decode_cid(struct mmc_card *card);
|
|
int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
|
|
bool reinit);
|
|
unsigned mmc_sd_get_max_clock(struct mmc_card *card);
|
|
int mmc_sd_switch_hs(struct mmc_card *card);
|
|
void mmc_sd_go_highspeed(struct mmc_card *card);
|
|
|
|
#endif
|