mmc: msm_sdcc: merge VCCQ and VDDP regulator as VDD_IO regulator
Typically eMMC card have IO voltage different than card VDD
voltage and specification names it as VCCQ voltage. Currently
driver refers regulator powering VCCQ as sdc_vccq.
UHS-I (Ultra High Speed) SD cards may also have the IO voltage
different then card VDD voltage and there is no specification
defined name for it so driver refers regulator powering this
SD card IO voltage as sdc_vddp.
But ultimately both are referring to regulators powering IO voltage
so it makes sense to refer both (sdc_vccq & sdc_vddp) as
sdc_vdd_io regulator. So this patch combines them as sdc_vdd_io
regulator.
CRs-Fixed: 369258
Change-Id: Ieafffbaebc9843c0b8683b87d2bada6b7666c142
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
diff --git a/arch/arm/include/asm/mach/mmc.h b/arch/arm/include/asm/mach/mmc.h
index 745a3a4..0bdb0f1 100644
--- a/arch/arm/include/asm/mach/mmc.h
+++ b/arch/arm/include/asm/mach/mmc.h
@@ -59,8 +59,7 @@
*/
struct msm_mmc_slot_reg_data {
struct msm_mmc_reg_data *vdd_data; /* keeps VDD/VCC regulator info */
- struct msm_mmc_reg_data *vccq_data; /* keeps VCCQ regulator info */
- struct msm_mmc_reg_data *vddp_data; /* keeps VDD Pad regulator info */
+ struct msm_mmc_reg_data *vdd_io_data; /* keeps VDD IO regulator info */
};
struct msm_mmc_gpio {
diff --git a/arch/arm/mach-msm/board-8064-regulator.c b/arch/arm/mach-msm/board-8064-regulator.c
index 40222b8..08dacea 100644
--- a/arch/arm/mach-msm/board-8064-regulator.c
+++ b/arch/arm/mach-msm/board-8064-regulator.c
@@ -54,7 +54,7 @@
};
VREG_CONSUMERS(L7) = {
REGULATOR_SUPPLY("8921_l7", NULL),
- REGULATOR_SUPPLY("sdc_vddp", "msm_sdcc.3"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.3"),
};
VREG_CONSUMERS(L8) = {
REGULATOR_SUPPLY("8921_l8", NULL),
@@ -162,7 +162,7 @@
};
VREG_CONSUMERS(S4) = {
REGULATOR_SUPPLY("8921_s4", NULL),
- REGULATOR_SUPPLY("sdc_vccq", "msm_sdcc.1"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.1"),
REGULATOR_SUPPLY("VDDIO_CDC", "tabla-slim"),
REGULATOR_SUPPLY("CDC_VDD_CP", "tabla-slim"),
REGULATOR_SUPPLY("CDC_VDDA_TX", "tabla-slim"),
diff --git a/arch/arm/mach-msm/board-8064-storage.c b/arch/arm/mach-msm/board-8064-storage.c
index 193fc4a..fb507c7 100644
--- a/arch/arm/mach-msm/board-8064-storage.c
+++ b/arch/arm/mach-msm/board-8064-storage.c
@@ -56,23 +56,19 @@
}
};
-/* Only slots having eMMC card will require VCCQ voltage */
-static struct msm_mmc_reg_data mmc_vccq_reg_data[1] = {
+/* SDCC controllers may require voting for VDD IO voltage */
+static struct msm_mmc_reg_data mmc_vdd_io_reg_data[MAX_SDCC_CONTROLLER] = {
/* SDCC1 : eMMC card connected */
[SDCC1] = {
- .name = "sdc_vccq",
+ .name = "sdc_vdd_io",
.always_on = 1,
.high_vol_level = 1800000,
.low_vol_level = 1800000,
.hpm_uA = 200000, /* 200mA */
- }
-};
-
-/* All SDCC controllers may require voting for VDD PAD voltage */
-static struct msm_mmc_reg_data mmc_vddp_reg_data[MAX_SDCC_CONTROLLER] = {
+ },
/* SDCC3 : External card slot connected */
[SDCC3] = {
- .name = "sdc_vddp",
+ .name = "sdc_vdd_io",
.high_vol_level = 2950000,
.low_vol_level = 1850000,
.always_on = 1,
@@ -92,12 +88,12 @@
/* SDCC1 : eMMC card connected */
[SDCC1] = {
.vdd_data = &mmc_vdd_reg_data[SDCC1],
- .vccq_data = &mmc_vccq_reg_data[SDCC1],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC1],
},
/* SDCC3 : External card slot connected */
[SDCC3] = {
.vdd_data = &mmc_vdd_reg_data[SDCC3],
- .vddp_data = &mmc_vddp_reg_data[SDCC3],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC3],
}
};
diff --git a/arch/arm/mach-msm/board-8930-regulator.c b/arch/arm/mach-msm/board-8930-regulator.c
index 2f24c95..cb8903c 100644
--- a/arch/arm/mach-msm/board-8930-regulator.c
+++ b/arch/arm/mach-msm/board-8930-regulator.c
@@ -80,7 +80,7 @@
REGULATOR_SUPPLY("vdd_dig", "3-004a"),
REGULATOR_SUPPLY("iris_vddio", "wcnss_wlan.0"),
REGULATOR_SUPPLY("riva_vddpx", "wcnss_wlan.0"),
- REGULATOR_SUPPLY("sdc_vccq", "msm_sdcc.1"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.1"),
REGULATOR_SUPPLY("VDDIO_CDC", "sitar-slim"),
REGULATOR_SUPPLY("CDC_VDDA_TX", "sitar-slim"),
REGULATOR_SUPPLY("CDC_VDDA_RX", "sitar-slim"),
@@ -129,7 +129,7 @@
};
VREG_CONSUMERS(L22) = {
REGULATOR_SUPPLY("8038_l22", NULL),
- REGULATOR_SUPPLY("sdc_vddp", "msm_sdcc.3"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.3"),
};
VREG_CONSUMERS(L23) = {
REGULATOR_SUPPLY("8038_l23", NULL),
diff --git a/arch/arm/mach-msm/board-8930-storage.c b/arch/arm/mach-msm/board-8930-storage.c
index 52a11bc..87143ff 100644
--- a/arch/arm/mach-msm/board-8930-storage.c
+++ b/arch/arm/mach-msm/board-8930-storage.c
@@ -57,23 +57,19 @@
}
};
-/* Only slots having eMMC card will require VCCQ voltage */
-static struct msm_mmc_reg_data mmc_vccq_reg_data[1] = {
+/* All SDCC controllers may require voting for VDD PAD voltage */
+static struct msm_mmc_reg_data mmc_vdd_io_reg_data[MAX_SDCC_CONTROLLER] = {
/* SDCC1 : eMMC card connected */
[SDCC1] = {
- .name = "sdc_vccq",
+ .name = "sdc_vdd_io",
.always_on = 1,
.high_vol_level = 1800000,
.low_vol_level = 1800000,
.hpm_uA = 200000, /* 200mA */
- }
-};
-
-/* All SDCC controllers may require voting for VDD PAD voltage */
-static struct msm_mmc_reg_data mmc_vddp_reg_data[MAX_SDCC_CONTROLLER] = {
+ },
/* SDCC3 : External card slot connected */
[SDCC3] = {
- .name = "sdc_vddp",
+ .name = "sdc_vdd_io",
.high_vol_level = 2950000,
.low_vol_level = 1850000,
.always_on = 1,
@@ -93,12 +89,12 @@
/* SDCC1 : eMMC card connected */
[SDCC1] = {
.vdd_data = &mmc_vdd_reg_data[SDCC1],
- .vccq_data = &mmc_vccq_reg_data[SDCC1],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC1],
},
/* SDCC3 : External card slot connected */
[SDCC3] = {
.vdd_data = &mmc_vdd_reg_data[SDCC3],
- .vddp_data = &mmc_vddp_reg_data[SDCC3],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC3],
}
};
diff --git a/arch/arm/mach-msm/board-8960-regulator.c b/arch/arm/mach-msm/board-8960-regulator.c
index 93c72ea..bc5a892 100644
--- a/arch/arm/mach-msm/board-8960-regulator.c
+++ b/arch/arm/mach-msm/board-8960-regulator.c
@@ -53,7 +53,7 @@
};
VREG_CONSUMERS(L7) = {
REGULATOR_SUPPLY("8921_l7", NULL),
- REGULATOR_SUPPLY("sdc_vddp", "msm_sdcc.3"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.3"),
};
VREG_CONSUMERS(L8) = {
REGULATOR_SUPPLY("8921_l8", NULL),
@@ -162,9 +162,9 @@
};
VREG_CONSUMERS(S4) = {
REGULATOR_SUPPLY("8921_s4", NULL),
- REGULATOR_SUPPLY("sdc_vccq", "msm_sdcc.1"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.1"),
REGULATOR_SUPPLY("sdc_vdd", "msm_sdcc.2"),
- REGULATOR_SUPPLY("sdc_vddp", "msm_sdcc.4"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.4"),
REGULATOR_SUPPLY("riva_vddpx", "wcnss_wlan.0"),
REGULATOR_SUPPLY("hdmi_vcc", "hdmi_msm.0"),
REGULATOR_SUPPLY("VDDIO_CDC", "tabla-slim"),
diff --git a/arch/arm/mach-msm/board-8960-storage.c b/arch/arm/mach-msm/board-8960-storage.c
index 1279b75..85785fc 100644
--- a/arch/arm/mach-msm/board-8960-storage.c
+++ b/arch/arm/mach-msm/board-8960-storage.c
@@ -65,23 +65,19 @@
}
};
-/* Only slots having eMMC card will require VCCQ voltage */
-static struct msm_mmc_reg_data mmc_vccq_reg_data[1] = {
+/* SDCC controllers may require voting for IO operating voltage */
+static struct msm_mmc_reg_data mmc_vdd_io_reg_data[MAX_SDCC_CONTROLLER] = {
/* SDCC1 : eMMC card connected */
[SDCC1] = {
- .name = "sdc_vccq",
+ .name = "sdc_vdd_io",
.always_on = 1,
.high_vol_level = 1800000,
.low_vol_level = 1800000,
.hpm_uA = 200000, /* 200mA */
- }
-};
-
-/* All SDCC controllers may require voting for VDD PAD voltage */
-static struct msm_mmc_reg_data mmc_vddp_reg_data[MAX_SDCC_CONTROLLER] = {
+ },
/* SDCC3 : External card slot connected */
[SDCC3] = {
- .name = "sdc_vddp",
+ .name = "sdc_vdd_io",
.high_vol_level = 2950000,
.low_vol_level = 1850000,
.always_on = 1,
@@ -97,7 +93,7 @@
},
/* SDCC4 : SDIO slot connected */
[SDCC4] = {
- .name = "sdc_vddp",
+ .name = "sdc_vdd_io",
.high_vol_level = 1800000,
.low_vol_level = 1800000,
.always_on = 1,
@@ -111,7 +107,7 @@
/* SDCC1 : eMMC card connected */
[SDCC1] = {
.vdd_data = &mmc_vdd_reg_data[SDCC1],
- .vccq_data = &mmc_vccq_reg_data[SDCC1],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC1],
},
/* SDCC2 : SDIO card slot connected */
[SDCC2] = {
@@ -120,11 +116,11 @@
/* SDCC3 : External card slot connected */
[SDCC3] = {
.vdd_data = &mmc_vdd_reg_data[SDCC3],
- .vddp_data = &mmc_vddp_reg_data[SDCC3],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC3],
},
/* SDCC4 : SDIO card slot connected */
[SDCC4] = {
- .vddp_data = &mmc_vddp_reg_data[SDCC4],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC4],
},
};
diff --git a/arch/arm/mach-msm/board-9615-regulator.c b/arch/arm/mach-msm/board-9615-regulator.c
index 7ed350d..b771386 100644
--- a/arch/arm/mach-msm/board-9615-regulator.c
+++ b/arch/arm/mach-msm/board-9615-regulator.c
@@ -61,7 +61,7 @@
};
VREG_CONSUMERS(L13) = {
REGULATOR_SUPPLY("8018_l13", NULL),
- REGULATOR_SUPPLY("sdc_vddp", "msm_sdcc.1"),
+ REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.1"),
};
VREG_CONSUMERS(L14) = {
REGULATOR_SUPPLY("8018_l14", NULL),
diff --git a/arch/arm/mach-msm/board-9615-storage.c b/arch/arm/mach-msm/board-9615-storage.c
index 5bdeb94..51e2432 100644
--- a/arch/arm/mach-msm/board-9615-storage.c
+++ b/arch/arm/mach-msm/board-9615-storage.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -54,10 +54,10 @@
};
/* All SDCC controllers may require voting for VDD PAD voltage */
-static struct msm_mmc_reg_data mmc_vddp_reg_data[MAX_SDCC_CONTROLLER] = {
+static struct msm_mmc_reg_data mmc_vdd_io_reg_data[MAX_SDCC_CONTROLLER] = {
/* SDCC1 : External card slot connected */
[SDCC1] = {
- .name = "sdc_vddp",
+ .name = "sdc_vdd_io",
.high_vol_level = 2950000,
.low_vol_level = 1850000,
.always_on = true,
@@ -77,7 +77,7 @@
/* SDCC1 : External card slot connected */
[SDCC1] = {
.vdd_data = &mmc_vdd_reg_data[SDCC1],
- .vddp_data = &mmc_vddp_reg_data[SDCC1],
+ .vdd_io_data = &mmc_vdd_io_reg_data[SDCC1],
}
};
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c
index ac8b164..02d1581 100644
--- a/drivers/mmc/host/msm_sdcc.c
+++ b/drivers/mmc/host/msm_sdcc.c
@@ -2136,7 +2136,7 @@
{
int rc = 0;
struct msm_mmc_slot_reg_data *curr_slot;
- struct msm_mmc_reg_data *curr_vdd_reg, *curr_vccq_reg, *curr_vddp_reg;
+ struct msm_mmc_reg_data *curr_vdd_reg, *curr_vdd_io_reg;
struct device *dev = mmc_dev(host->mmc);
curr_slot = host->plat->vreg_data;
@@ -2144,8 +2144,7 @@
goto out;
curr_vdd_reg = curr_slot->vdd_data;
- curr_vccq_reg = curr_slot->vccq_data;
- curr_vddp_reg = curr_slot->vddp_data;
+ curr_vdd_io_reg = curr_slot->vdd_io_data;
if (is_init) {
/*
@@ -2157,16 +2156,11 @@
if (rc)
goto out;
}
- if (curr_vccq_reg) {
- rc = msmsdcc_vreg_init_reg(curr_vccq_reg, dev);
+ if (curr_vdd_io_reg) {
+ rc = msmsdcc_vreg_init_reg(curr_vdd_io_reg, dev);
if (rc)
goto vdd_reg_deinit;
}
- if (curr_vddp_reg) {
- rc = msmsdcc_vreg_init_reg(curr_vddp_reg, dev);
- if (rc)
- goto vccq_reg_deinit;
- }
rc = msmsdcc_vreg_reset(host);
if (rc)
pr_err("msmsdcc.%d vreg reset failed (%d)\n",
@@ -2174,14 +2168,11 @@
goto out;
} else {
/* Deregister all regulators from regulator framework */
- goto vddp_reg_deinit;
+ goto vdd_io_reg_deinit;
}
-vddp_reg_deinit:
- if (curr_vddp_reg)
- msmsdcc_vreg_deinit_reg(curr_vddp_reg);
-vccq_reg_deinit:
- if (curr_vccq_reg)
- msmsdcc_vreg_deinit_reg(curr_vccq_reg);
+vdd_io_reg_deinit:
+ if (curr_vdd_io_reg)
+ msmsdcc_vreg_deinit_reg(curr_vdd_io_reg);
vdd_reg_deinit:
if (curr_vdd_reg)
msmsdcc_vreg_deinit_reg(curr_vdd_reg);
@@ -2254,16 +2245,14 @@
{
int rc = 0, i;
struct msm_mmc_slot_reg_data *curr_slot;
- struct msm_mmc_reg_data *curr_vdd_reg, *curr_vccq_reg, *curr_vddp_reg;
- struct msm_mmc_reg_data *vreg_table[3];
+ struct msm_mmc_reg_data *vreg_table[2];
curr_slot = host->plat->vreg_data;
if (!curr_slot)
goto out;
- curr_vdd_reg = vreg_table[0] = curr_slot->vdd_data;
- curr_vccq_reg = vreg_table[1] = curr_slot->vccq_data;
- curr_vddp_reg = vreg_table[2] = curr_slot->vddp_data;
+ vreg_table[0] = curr_slot->vdd_data;
+ vreg_table[1] = curr_slot->vdd_io_data;
for (i = 0; i < ARRAY_SIZE(vreg_table); i++) {
if (vreg_table[i]) {
@@ -2294,70 +2283,53 @@
return rc;
}
-static int msmsdcc_set_vddp_level(struct msmsdcc_host *host, int level)
+enum vdd_io_level {
+ /* set vdd_io_data->low_vol_level */
+ VDD_IO_LOW,
+ /* set vdd_io_data->high_vol_level */
+ VDD_IO_HIGH,
+ /*
+ * set whatever there in voltage_level (third argument) of
+ * msmsdcc_set_vdd_io_vol() function.
+ */
+ VDD_IO_SET_LEVEL,
+};
+
+static int msmsdcc_set_vdd_io_vol(struct msmsdcc_host *host,
+ enum vdd_io_level level,
+ unsigned int voltage_level)
{
int rc = 0;
+ int set_level;
if (host->plat->vreg_data) {
- struct msm_mmc_reg_data *vddp_reg =
- host->plat->vreg_data->vddp_data;
+ struct msm_mmc_reg_data *vdd_io_reg =
+ host->plat->vreg_data->vdd_io_data;
- if (vddp_reg && vddp_reg->is_enabled)
- rc = msmsdcc_vreg_set_voltage(vddp_reg, level, level);
+ if (vdd_io_reg && vdd_io_reg->is_enabled) {
+ switch (level) {
+ case VDD_IO_LOW:
+ set_level = vdd_io_reg->low_vol_level;
+ break;
+ case VDD_IO_HIGH:
+ set_level = vdd_io_reg->high_vol_level;
+ break;
+ case VDD_IO_SET_LEVEL:
+ set_level = voltage_level;
+ break;
+ default:
+ pr_err("%s: %s: invalid argument level = %d",
+ mmc_hostname(host->mmc), __func__,
+ level);
+ rc = -EINVAL;
+ goto out;
+ }
+ rc = msmsdcc_vreg_set_voltage(vdd_io_reg,
+ set_level, set_level);
+ }
}
- return rc;
-}
-
-static inline int msmsdcc_set_vddp_low_vol(struct msmsdcc_host *host)
-{
- struct msm_mmc_slot_reg_data *curr_slot = host->plat->vreg_data;
- int rc = 0;
-
- if (curr_slot && curr_slot->vddp_data) {
- rc = msmsdcc_set_vddp_level(host,
- curr_slot->vddp_data->low_vol_level);
-
- if (rc)
- pr_err("%s: %s: failed to change vddp level to %d",
- mmc_hostname(host->mmc), __func__,
- curr_slot->vddp_data->low_vol_level);
- }
-
- return rc;
-}
-
-static inline int msmsdcc_set_vddp_high_vol(struct msmsdcc_host *host)
-{
- struct msm_mmc_slot_reg_data *curr_slot = host->plat->vreg_data;
- int rc = 0;
-
- if (curr_slot && curr_slot->vddp_data) {
- rc = msmsdcc_set_vddp_level(host,
- curr_slot->vddp_data->high_vol_level);
-
- if (rc)
- pr_err("%s: %s: failed to change vddp level to %d",
- mmc_hostname(host->mmc), __func__,
- curr_slot->vddp_data->high_vol_level);
- }
-
- return rc;
-}
-
-static inline int msmsdcc_set_vccq_vol(struct msmsdcc_host *host, int level)
-{
- struct msm_mmc_slot_reg_data *curr_slot = host->plat->vreg_data;
- int rc = 0;
-
- if (curr_slot && curr_slot->vccq_data) {
- rc = msmsdcc_vreg_set_voltage(curr_slot->vccq_data,
- level, level);
- if (rc)
- pr_err("%s: %s: failed to change vccq level to %d",
- mmc_hostname(host->mmc), __func__, level);
- }
-
+out:
return rc;
}
@@ -2582,11 +2554,11 @@
pwr = MCI_PWR_OFF;
msmsdcc_cfg_mpm_sdiowakeup(host, SDC_DAT1_DISABLE);
/*
- * As VDD pad rail is always on, set low voltage for VDD
- * pad rail when slot is unused (when card is not present
- * or during system suspend).
+ * If VDD IO rail is always on, set low voltage for VDD
+ * IO rail when slot is not in use (like when card is not
+ * present or during system suspend).
*/
- msmsdcc_set_vddp_low_vol(host);
+ msmsdcc_set_vdd_io_vol(host, VDD_IO_LOW, 0);
msmsdcc_setup_pins(host, false);
break;
case MMC_POWER_UP:
@@ -2594,7 +2566,7 @@
pwr = MCI_PWR_UP;
msmsdcc_cfg_mpm_sdiowakeup(host, SDC_DAT1_ENABLE);
- msmsdcc_set_vddp_high_vol(host);
+ msmsdcc_set_vdd_io_vol(host, VDD_IO_HIGH, 0);
msmsdcc_setup_pins(host, true);
break;
case MMC_POWER_ON:
@@ -3298,8 +3270,8 @@
}
#endif
-static int msmsdcc_start_signal_voltage_switch(struct mmc_host *mmc,
- struct mmc_ios *ios)
+static int msmsdcc_switch_io_voltage(struct mmc_host *mmc,
+ struct mmc_ios *ios)
{
struct msmsdcc_host *host = mmc_priv(mmc);
unsigned long flags;
@@ -3309,31 +3281,32 @@
host->io_pad_pwr_switch = 0;
spin_unlock_irqrestore(&host->lock, flags);
- /*
- * For eMMC cards, VccQ voltage range must be changed
- * only if it operates in HS200 SDR 1.2V mode or in
- * DDR 1.2V mode.
- */
- if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_120) {
- rc = msmsdcc_set_vccq_vol(host, 1200000);
+ switch (ios->signal_voltage) {
+ case MMC_SIGNAL_VOLTAGE_330:
+ /* Set VDD IO to high voltage range (2.7v - 3.6v) */
+ rc = msmsdcc_set_vdd_io_vol(host, VDD_IO_HIGH, 0);
goto out;
- }
-
- if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
- /* Change voltage level of VDDPX to high voltage */
- rc = msmsdcc_set_vddp_high_vol(host);
+ case MMC_SIGNAL_VOLTAGE_180:
+ break;
+ case MMC_SIGNAL_VOLTAGE_120:
+ /*
+ * For eMMC cards, VDD_IO voltage range must be changed
+ * only if it operates in HS200 SDR 1.2V mode or in
+ * DDR 1.2V mode.
+ */
+ rc = msmsdcc_set_vdd_io_vol(host, VDD_IO_SET_LEVEL, 1200000);
goto out;
- } else if (ios->signal_voltage != MMC_SIGNAL_VOLTAGE_180) {
+ default:
/* invalid selection. don't do anything */
rc = -EINVAL;
goto out;
}
- spin_lock_irqsave(&host->lock, flags);
/*
* If we are here means voltage switch from high voltage to
* low voltage is required
*/
+ spin_lock_irqsave(&host->lock, flags);
/*
* Poll on MCIDATIN_3_0 and MCICMDIN bits of MCI_TEST_INPUT
@@ -3353,10 +3326,10 @@
spin_unlock_irqrestore(&host->lock, flags);
/*
- * Switch VDDPX from high voltage to low voltage
- * to change the VDD of the SD IO pads.
+ * Switch VDD Io from high voltage range (2.7v - 3.6v) to
+ * low voltage range (1.7v - 1.95v).
*/
- rc = msmsdcc_set_vddp_low_vol(host);
+ rc = msmsdcc_set_vdd_io_vol(host, VDD_IO_LOW, 0);
if (rc)
goto out;
@@ -3855,7 +3828,7 @@
.set_ios = msmsdcc_set_ios,
.get_ro = msmsdcc_get_ro,
.enable_sdio_irq = msmsdcc_enable_sdio_irq,
- .start_signal_voltage_switch = msmsdcc_start_signal_voltage_switch,
+ .start_signal_voltage_switch = msmsdcc_switch_io_voltage,
.execute_tuning = msmsdcc_execute_tuning
};