aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2014-04-25 07:59:26 -0400
committerChris Ball <chris@printf.net>2014-05-22 08:33:11 -0400
commit96d7b78cfc2fd6b1539704e2d33239dbaa097cc4 (patch)
treee29d9cc9bbf57aa5f4941cd2d4534bd39130ade4
parent13e645012dff774895906058163ae244f47b9b81 (diff)
mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function
Add sdhci_set_uhs_signaling() and always call the set_uhs_signaling method. This avoids quirks being added into sdhci_set_uhs_signaling(). Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Tested-by: Markus Pargmann <mpa@pengutronix.de> Tested-by: Stephen Warren <swarren@nvidia.com> [Ulf Hansson] Resolved conflict Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Chris Ball <chris@printf.net>
-rw-r--r--drivers/mmc/host/sdhci-acpi.c2
-rw-r--r--drivers/mmc/host/sdhci-bcm-kona.c1
-rw-r--r--drivers/mmc/host/sdhci-bcm2835.c1
-rw-r--r--drivers/mmc/host/sdhci-cns3xxx.c1
-rw-r--r--drivers/mmc/host/sdhci-dove.c1
-rw-r--r--drivers/mmc/host/sdhci-of-arasan.c1
-rw-r--r--drivers/mmc/host/sdhci-of-esdhc.c1
-rw-r--r--drivers/mmc/host/sdhci-of-hlwd.c1
-rw-r--r--drivers/mmc/host/sdhci-pci.c1
-rw-r--r--drivers/mmc/host/sdhci-pltfm.c1
-rw-r--r--drivers/mmc/host/sdhci-pxav2.c1
-rw-r--r--drivers/mmc/host/sdhci-pxav3.c1
-rw-r--r--drivers/mmc/host/sdhci-s3c.c1
-rw-r--r--drivers/mmc/host/sdhci-sirf.c1
-rw-r--r--drivers/mmc/host/sdhci-spear.c1
-rw-r--r--drivers/mmc/host/sdhci-tegra.c1
-rw-r--r--drivers/mmc/host/sdhci.c44
-rw-r--r--drivers/mmc/host/sdhci.h1
18 files changed, 42 insertions, 20 deletions
diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
index 323e2a688563..8ce3c28cb76e 100644
--- a/drivers/mmc/host/sdhci-acpi.c
+++ b/drivers/mmc/host/sdhci-acpi.c
@@ -106,6 +106,7 @@ static const struct sdhci_ops sdhci_acpi_ops_dflt = {
106 .enable_dma = sdhci_acpi_enable_dma, 106 .enable_dma = sdhci_acpi_enable_dma,
107 .set_bus_width = sdhci_set_bus_width, 107 .set_bus_width = sdhci_set_bus_width,
108 .reset = sdhci_reset, 108 .reset = sdhci_reset,
109 .set_uhs_signaling = sdhci_set_uhs_signaling,
109}; 110};
110 111
111static const struct sdhci_ops sdhci_acpi_ops_int = { 112static const struct sdhci_ops sdhci_acpi_ops_int = {
@@ -113,6 +114,7 @@ static const struct sdhci_ops sdhci_acpi_ops_int = {
113 .enable_dma = sdhci_acpi_enable_dma, 114 .enable_dma = sdhci_acpi_enable_dma,
114 .set_bus_width = sdhci_set_bus_width, 115 .set_bus_width = sdhci_set_bus_width,
115 .reset = sdhci_reset, 116 .reset = sdhci_reset,
117 .set_uhs_signaling = sdhci_set_uhs_signaling,
116 .hw_reset = sdhci_acpi_int_hw_reset, 118 .hw_reset = sdhci_acpi_int_hw_reset,
117}; 119};
118 120
diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
index e610811c09b0..dd780c315a63 100644
--- a/drivers/mmc/host/sdhci-bcm-kona.c
+++ b/drivers/mmc/host/sdhci-bcm-kona.c
@@ -212,6 +212,7 @@ static struct sdhci_ops sdhci_bcm_kona_ops = {
212 .platform_send_init_74_clocks = sdhci_bcm_kona_init_74_clocks, 212 .platform_send_init_74_clocks = sdhci_bcm_kona_init_74_clocks,
213 .set_bus_width = sdhci_set_bus_width, 213 .set_bus_width = sdhci_set_bus_width,
214 .reset = sdhci_reset, 214 .reset = sdhci_reset,
215 .set_uhs_signaling = sdhci_set_uhs_signaling,
215 .card_event = sdhci_bcm_kona_card_event, 216 .card_event = sdhci_bcm_kona_card_event,
216}; 217};
217 218
diff --git a/drivers/mmc/host/sdhci-bcm2835.c b/drivers/mmc/host/sdhci-bcm2835.c
index 74906d6008e1..46af9a439d7b 100644
--- a/drivers/mmc/host/sdhci-bcm2835.c
+++ b/drivers/mmc/host/sdhci-bcm2835.c
@@ -136,6 +136,7 @@ static const struct sdhci_ops bcm2835_sdhci_ops = {
136 .get_min_clock = bcm2835_sdhci_get_min_clock, 136 .get_min_clock = bcm2835_sdhci_get_min_clock,
137 .set_bus_width = sdhci_set_bus_width, 137 .set_bus_width = sdhci_set_bus_width,
138 .reset = sdhci_reset, 138 .reset = sdhci_reset,
139 .set_uhs_signaling = sdhci_set_uhs_signaling,
139}; 140};
140 141
141static const struct sdhci_pltfm_data bcm2835_sdhci_pdata = { 142static const struct sdhci_pltfm_data bcm2835_sdhci_pdata = {
diff --git a/drivers/mmc/host/sdhci-cns3xxx.c b/drivers/mmc/host/sdhci-cns3xxx.c
index 587d73ef33ff..14b74075589a 100644
--- a/drivers/mmc/host/sdhci-cns3xxx.c
+++ b/drivers/mmc/host/sdhci-cns3xxx.c
@@ -81,6 +81,7 @@ static const struct sdhci_ops sdhci_cns3xxx_ops = {
81 .set_clock = sdhci_cns3xxx_set_clock, 81 .set_clock = sdhci_cns3xxx_set_clock,
82 .set_bus_width = sdhci_set_bus_width, 82 .set_bus_width = sdhci_set_bus_width,
83 .reset = sdhci_reset, 83 .reset = sdhci_reset,
84 .set_uhs_signaling = sdhci_set_uhs_signaling,
84}; 85};
85 86
86static const struct sdhci_pltfm_data sdhci_cns3xxx_pdata = { 87static const struct sdhci_pltfm_data sdhci_cns3xxx_pdata = {
diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index 8ef4ab52f8e0..0d315f4496c8 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -89,6 +89,7 @@ static const struct sdhci_ops sdhci_dove_ops = {
89 .set_clock = sdhci_set_clock, 89 .set_clock = sdhci_set_clock,
90 .set_bus_width = sdhci_set_bus_width, 90 .set_bus_width = sdhci_set_bus_width,
91 .reset = sdhci_reset, 91 .reset = sdhci_reset,
92 .set_uhs_signaling = sdhci_set_uhs_signaling,
92}; 93};
93 94
94static const struct sdhci_pltfm_data sdhci_dove_pdata = { 95static const struct sdhci_pltfm_data sdhci_dove_pdata = {
diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
index f0ee594f25d1..5bd1092310f2 100644
--- a/drivers/mmc/host/sdhci-of-arasan.c
+++ b/drivers/mmc/host/sdhci-of-arasan.c
@@ -57,6 +57,7 @@ static struct sdhci_ops sdhci_arasan_ops = {
57 .get_timeout_clock = sdhci_arasan_get_timeout_clock, 57 .get_timeout_clock = sdhci_arasan_get_timeout_clock,
58 .set_bus_width = sdhci_set_bus_width, 58 .set_bus_width = sdhci_set_bus_width,
59 .reset = sdhci_reset, 59 .reset = sdhci_reset,
60 .set_uhs_signaling = sdhci_set_uhs_signaling,
60}; 61};
61 62
62static struct sdhci_pltfm_data sdhci_arasan_pdata = { 63static struct sdhci_pltfm_data sdhci_arasan_pdata = {
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
index c4f8cd3f83c8..fcaeae5f55b8 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -309,6 +309,7 @@ static const struct sdhci_ops sdhci_esdhc_ops = {
309 .adma_workaround = esdhci_of_adma_workaround, 309 .adma_workaround = esdhci_of_adma_workaround,
310 .set_bus_width = esdhc_pltfm_set_bus_width, 310 .set_bus_width = esdhc_pltfm_set_bus_width,
311 .reset = sdhci_reset, 311 .reset = sdhci_reset,
312 .set_uhs_signaling = sdhci_set_uhs_signaling,
312}; 313};
313 314
314static const struct sdhci_pltfm_data sdhci_esdhc_pdata = { 315static const struct sdhci_pltfm_data sdhci_esdhc_pdata = {
diff --git a/drivers/mmc/host/sdhci-of-hlwd.c b/drivers/mmc/host/sdhci-of-hlwd.c
index a4a1f0f2c0a0..b341661369a2 100644
--- a/drivers/mmc/host/sdhci-of-hlwd.c
+++ b/drivers/mmc/host/sdhci-of-hlwd.c
@@ -61,6 +61,7 @@ static const struct sdhci_ops sdhci_hlwd_ops = {
61 .set_clock = sdhci_set_clock, 61 .set_clock = sdhci_set_clock,
62 .set_bus_width = sdhci_set_bus_width, 62 .set_bus_width = sdhci_set_bus_width,
63 .reset = sdhci_reset, 63 .reset = sdhci_reset,
64 .set_uhs_signaling = sdhci_set_uhs_signaling,
64}; 65};
65 66
66static const struct sdhci_pltfm_data sdhci_hlwd_pdata = { 67static const struct sdhci_pltfm_data sdhci_hlwd_pdata = {
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index b3a28f6b170e..52c42fcc284c 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -1082,6 +1082,7 @@ static const struct sdhci_ops sdhci_pci_ops = {
1082 .enable_dma = sdhci_pci_enable_dma, 1082 .enable_dma = sdhci_pci_enable_dma,
1083 .set_bus_width = sdhci_pci_set_bus_width, 1083 .set_bus_width = sdhci_pci_set_bus_width,
1084 .reset = sdhci_reset, 1084 .reset = sdhci_reset,
1085 .set_uhs_signaling = sdhci_set_uhs_signaling,
1085 .hw_reset = sdhci_pci_hw_reset, 1086 .hw_reset = sdhci_pci_hw_reset,
1086}; 1087};
1087 1088
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index 1fb89f44bd58..7e834fb78f42 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -48,6 +48,7 @@ static const struct sdhci_ops sdhci_pltfm_ops = {
48 .set_clock = sdhci_set_clock, 48 .set_clock = sdhci_set_clock,
49 .set_bus_width = sdhci_set_bus_width, 49 .set_bus_width = sdhci_set_bus_width,
50 .reset = sdhci_reset, 50 .reset = sdhci_reset,
51 .set_uhs_signaling = sdhci_set_uhs_signaling,
51}; 52};
52 53
53#ifdef CONFIG_OF 54#ifdef CONFIG_OF
diff --git a/drivers/mmc/host/sdhci-pxav2.c b/drivers/mmc/host/sdhci-pxav2.c
index db5257bf032e..3c0f3c0a1cc8 100644
--- a/drivers/mmc/host/sdhci-pxav2.c
+++ b/drivers/mmc/host/sdhci-pxav2.c
@@ -116,6 +116,7 @@ static const struct sdhci_ops pxav2_sdhci_ops = {
116 .get_max_clock = sdhci_pltfm_clk_get_max_clock, 116 .get_max_clock = sdhci_pltfm_clk_get_max_clock,
117 .set_bus_width = pxav2_mmc_set_bus_width, 117 .set_bus_width = pxav2_mmc_set_bus_width,
118 .reset = pxav2_reset, 118 .reset = pxav2_reset,
119 .set_uhs_signaling = sdhci_set_uhs_signaling,
119}; 120};
120 121
121#ifdef CONFIG_OF 122#ifdef CONFIG_OF
diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
index 05574104a254..f4f128947561 100644
--- a/drivers/mmc/host/sdhci-pxav3.c
+++ b/drivers/mmc/host/sdhci-pxav3.c
@@ -229,6 +229,7 @@ static const struct sdhci_ops pxav3_sdhci_ops = {
229 .get_max_clock = sdhci_pltfm_clk_get_max_clock, 229 .get_max_clock = sdhci_pltfm_clk_get_max_clock,
230 .set_bus_width = sdhci_set_bus_width, 230 .set_bus_width = sdhci_set_bus_width,
231 .reset = pxav3_reset, 231 .reset = pxav3_reset,
232 .set_uhs_signaling = sdhci_set_uhs_signaling,
232}; 233};
233 234
234static struct sdhci_pltfm_data sdhci_pxav3_pdata = { 235static struct sdhci_pltfm_data sdhci_pxav3_pdata = {
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
index 9e6f1c52982c..781b8a943d38 100644
--- a/drivers/mmc/host/sdhci-s3c.c
+++ b/drivers/mmc/host/sdhci-s3c.c
@@ -371,6 +371,7 @@ static struct sdhci_ops sdhci_s3c_ops = {
371 .get_min_clock = sdhci_s3c_get_min_clock, 371 .get_min_clock = sdhci_s3c_get_min_clock,
372 .set_bus_width = sdhci_s3c_set_bus_width, 372 .set_bus_width = sdhci_s3c_set_bus_width,
373 .reset = sdhci_reset, 373 .reset = sdhci_reset,
374 .set_uhs_signaling = sdhci_set_uhs_signaling,
374}; 375};
375 376
376static void sdhci_s3c_notify_change(struct platform_device *dev, int state) 377static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c
index 3b775348b470..17004531d089 100644
--- a/drivers/mmc/host/sdhci-sirf.c
+++ b/drivers/mmc/host/sdhci-sirf.c
@@ -32,6 +32,7 @@ static struct sdhci_ops sdhci_sirf_ops = {
32 .get_max_clock = sdhci_sirf_get_max_clk, 32 .get_max_clock = sdhci_sirf_get_max_clk,
33 .set_bus_width = sdhci_set_bus_width, 33 .set_bus_width = sdhci_set_bus_width,
34 .reset = sdhci_reset, 34 .reset = sdhci_reset,
35 .set_uhs_signaling = sdhci_set_uhs_signaling,
35}; 36};
36 37
37static struct sdhci_pltfm_data sdhci_sirf_pdata = { 38static struct sdhci_pltfm_data sdhci_sirf_pdata = {
diff --git a/drivers/mmc/host/sdhci-spear.c b/drivers/mmc/host/sdhci-spear.c
index 8bf64ab36720..9d535c7336ef 100644
--- a/drivers/mmc/host/sdhci-spear.c
+++ b/drivers/mmc/host/sdhci-spear.c
@@ -41,6 +41,7 @@ static const struct sdhci_ops sdhci_pltfm_ops = {
41 .set_clock = sdhci_set_clock, 41 .set_clock = sdhci_set_clock,
42 .set_bus_width = sdhci_set_bus_width, 42 .set_bus_width = sdhci_set_bus_width,
43 .reset = sdhci_reset, 43 .reset = sdhci_reset,
44 .set_uhs_signaling = sdhci_set_uhs_signaling,
44}; 45};
45 46
46#ifdef CONFIG_OF 47#ifdef CONFIG_OF
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index a0a8b5cc3b0c..d06b6ff60432 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -156,6 +156,7 @@ static const struct sdhci_ops tegra_sdhci_ops = {
156 .set_clock = sdhci_set_clock, 156 .set_clock = sdhci_set_clock,
157 .set_bus_width = tegra_sdhci_set_bus_width, 157 .set_bus_width = tegra_sdhci_set_bus_width,
158 .reset = tegra_sdhci_reset, 158 .reset = tegra_sdhci_reset,
159 .set_uhs_signaling = sdhci_set_uhs_signaling,
159}; 160};
160 161
161static const struct sdhci_pltfm_data sdhci_tegra20_pdata = { 162static const struct sdhci_pltfm_data sdhci_tegra20_pdata = {
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 69e58d071b33..0073aae0adcb 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1404,6 +1404,29 @@ void sdhci_set_bus_width(struct sdhci_host *host, int width)
1404} 1404}
1405EXPORT_SYMBOL_GPL(sdhci_set_bus_width); 1405EXPORT_SYMBOL_GPL(sdhci_set_bus_width);
1406 1406
1407void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing)
1408{
1409 u16 ctrl_2;
1410
1411 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1412 /* Select Bus Speed Mode for host */
1413 ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
1414 if ((timing == MMC_TIMING_MMC_HS200) ||
1415 (timing == MMC_TIMING_UHS_SDR104))
1416 ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
1417 else if (timing == MMC_TIMING_UHS_SDR12)
1418 ctrl_2 |= SDHCI_CTRL_UHS_SDR12;
1419 else if (timing == MMC_TIMING_UHS_SDR25)
1420 ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
1421 else if (timing == MMC_TIMING_UHS_SDR50)
1422 ctrl_2 |= SDHCI_CTRL_UHS_SDR50;
1423 else if ((timing == MMC_TIMING_UHS_DDR50) ||
1424 (timing == MMC_TIMING_MMC_DDR52))
1425 ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
1426 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1427}
1428EXPORT_SYMBOL_GPL(sdhci_set_uhs_signaling);
1429
1407static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) 1430static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
1408{ 1431{
1409 unsigned long flags; 1432 unsigned long flags;
@@ -1514,26 +1537,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
1514 clk &= ~SDHCI_CLOCK_CARD_EN; 1537 clk &= ~SDHCI_CLOCK_CARD_EN;
1515 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); 1538 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
1516 1539
1517 if (host->ops->set_uhs_signaling) 1540 host->ops->set_uhs_signaling(host, ios->timing);
1518 host->ops->set_uhs_signaling(host, ios->timing);
1519 else {
1520 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1521 /* Select Bus Speed Mode for host */
1522 ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
1523 if ((ios->timing == MMC_TIMING_MMC_HS200) ||
1524 (ios->timing == MMC_TIMING_UHS_SDR104))
1525 ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
1526 else if (ios->timing == MMC_TIMING_UHS_SDR12)
1527 ctrl_2 |= SDHCI_CTRL_UHS_SDR12;
1528 else if (ios->timing == MMC_TIMING_UHS_SDR25)
1529 ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
1530 else if (ios->timing == MMC_TIMING_UHS_SDR50)
1531 ctrl_2 |= SDHCI_CTRL_UHS_SDR50;
1532 else if ((ios->timing == MMC_TIMING_UHS_DDR50) ||
1533 (ios->timing == MMC_TIMING_MMC_DDR52))
1534 ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
1535 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1536 }
1537 1541
1538 if (!(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN) && 1542 if (!(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN) &&
1539 ((ios->timing == MMC_TIMING_UHS_SDR12) || 1543 ((ios->timing == MMC_TIMING_UHS_SDR12) ||
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 3179a8053019..7a35395e5f56 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -403,6 +403,7 @@ static inline bool sdhci_sdio_irq_enabled(struct sdhci_host *host)
403void sdhci_set_clock(struct sdhci_host *host, unsigned int clock); 403void sdhci_set_clock(struct sdhci_host *host, unsigned int clock);
404void sdhci_set_bus_width(struct sdhci_host *host, int width); 404void sdhci_set_bus_width(struct sdhci_host *host, int width);
405void sdhci_reset(struct sdhci_host *host, u8 mask); 405void sdhci_reset(struct sdhci_host *host, u8 mask);
406void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing);
406 407
407#ifdef CONFIG_PM 408#ifdef CONFIG_PM
408extern int sdhci_suspend_host(struct sdhci_host *host); 409extern int sdhci_suspend_host(struct sdhci_host *host);