Skip to content

Commit d190f09

Browse files
committed
Merge pull request torvalds#66 from gaozhangfei/mmc-uhs-mode
Mmc uhs mode
2 parents 1744574 + aa2984b commit d190f09

File tree

3 files changed

+23
-24
lines changed

3 files changed

+23
-24
lines changed

arch/arm64/boot/dts/hi6220.dtsi

+5-3
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,8 @@
988988
compatible = "hisilicon,hi6220-dw-mshc";
989989
num-slots = <0x1>;
990990
board-mmc-bus-clk = <0x0>;
991-
broken-cd;
991+
cap-mmc-highspeed;
992+
non-removable;
992993
reg = <0x0 0xf723d000 0x0 0x1000>;
993994
interrupts = <0x0 0x48 0x4>;
994995
clocks = <&clock_sys HI6220_MMC0_CIUCLK>, <&clock_sys HI6220_MMC0_CLK>;
@@ -1002,10 +1003,11 @@
10021003
board-mmc-bus-clk = <0x0>;
10031004
card-detect-delay = <200>;
10041005
hisilicon,peripheral-syscon = <&ao_ctrl>;
1006+
cap-sd-highspeed;
1007+
sd-uhs-sdr12;
1008+
sd-uhs-sdr25;
10051009
reg = <0x0 0xf723e000 0x0 0x1000>;
10061010
interrupts = <0x0 0x49 0x4>;
1007-
#address-cells = <0x1>;
1008-
#size-cells = <0x0>;
10091011
clocks = <&clock_sys HI6220_MMC1_CIUCLK>, <&clock_sys HI6220_MMC1_CLK>;
10101012
clock-names = "ciu", "biu";
10111013
vqmmc-supply = <&ldo7>;

drivers/mmc/host/dw_mmc-k3.c

+16-20
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
*/
1010

1111
#include <linux/clk.h>
12-
#include <linux/delay.h>
1312
#include <linux/mfd/syscon.h>
1413
#include <linux/mmc/host.h>
1514
#include <linux/mmc/dw_mmc.h>
@@ -77,18 +76,24 @@ static int dw_mci_hi6220_switch_voltage(struct mmc_host *mmc, struct mmc_ios *io
7776
if (!priv || !priv->reg)
7877
return 0;
7978

80-
min_uv = 1800000;
81-
max_uv = 1800000;
82-
8379
if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
8480
ret = regmap_update_bits(priv->reg, AO_SCTRL_CTRL3,
8581
AO_SCTRL_SEL18, 0);
86-
if (ret) {
87-
dev_dbg(host->dev, "switch voltage failed\n");
88-
return ret;
89-
}
9082
min_uv = 3000000;
9183
max_uv = 3000000;
84+
} else if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
85+
ret = regmap_update_bits(priv->reg, AO_SCTRL_CTRL3,
86+
AO_SCTRL_SEL18, AO_SCTRL_SEL18);
87+
min_uv = 1800000;
88+
max_uv = 1800000;
89+
} else {
90+
dev_dbg(host->dev, "voltage not supported\n");
91+
return -EINVAL;
92+
}
93+
94+
if (ret) {
95+
dev_dbg(host->dev, "switch voltage failed\n");
96+
return ret;
9297
}
9398

9499
if (IS_ERR_OR_NULL(mmc->supply.vqmmc))
@@ -100,24 +105,15 @@ static int dw_mci_hi6220_switch_voltage(struct mmc_host *mmc, struct mmc_ios *io
100105
ret, min_uv, max_uv);
101106
return ret;
102107
}
103-
104-
ret = regulator_enable(mmc->supply.vqmmc);
105-
if (ret) {
106-
dev_dbg(host->dev, "Regulator enable error %d\n", ret);
107-
return ret;
108-
}
109-
110-
usleep_range(5000, 5500);
111-
112108
return 0;
113-
}
109+
}
114110

115111
static void dw_mci_hi6220_set_ios(struct dw_mci *host, struct mmc_ios *ios)
116112
{
117113
int ret;
118114
unsigned int clock;
119115

120-
clock = (ios->clock <= 25000000) ? 25000000: ios->clock;
116+
clock = (ios->clock <= 25000000) ? 25000000 : ios->clock;
121117

122118
ret = clk_set_rate(host->biu_clk, clock);
123119
if (ret)
@@ -134,7 +130,7 @@ static const struct dw_mci_drv_data hi6220_data = {
134130

135131
static const struct of_device_id dw_mci_k3_match[] = {
136132
{ .compatible = "hisilicon,hi4511-dw-mshc", .data = &k3_drv_data, },
137-
{ .compatible = "hisilicon,hi6220-dw-mshc", .data = &hi6220_data, },
133+
{ .compatible = "hisilicon,hi6220-dw-mshc", .data = &hi6220_data, },
138134
{},
139135
};
140136
MODULE_DEVICE_TABLE(of, dw_mci_k3_match);

drivers/mmc/host/dw_mmc.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,8 @@ static int dw_mci_get_cd(struct mmc_host *mmc)
11901190
int gpio_cd = mmc_gpio_get_cd(mmc);
11911191

11921192
/* Use platform get_cd function, else try onboard card detect */
1193-
if (brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION)
1193+
if ((brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION) ||
1194+
(mmc->caps & MMC_CAP_NONREMOVABLE))
11941195
present = 1;
11951196
else if (!IS_ERR_VALUE(gpio_cd))
11961197
present = gpio_cd;

0 commit comments

Comments
 (0)