|
@@ -203,9 +203,36 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * sdhci_s3c_get_min_clock - callback to get minimal supported clock value
|
|
|
+ * @host: The SDHCI host being queried
|
|
|
+ *
|
|
|
+ * To init mmc host properly a minimal clock value is needed. For high system
|
|
|
+ * bus clock's values the standard formula gives values out of allowed range.
|
|
|
+ * The clock still can be set to lower values, if clock source other then
|
|
|
+ * system bus is selected.
|
|
|
+*/
|
|
|
+static unsigned int sdhci_s3c_get_min_clock(struct sdhci_host *host)
|
|
|
+{
|
|
|
+ struct sdhci_s3c *ourhost = to_s3c(host);
|
|
|
+ unsigned int delta, min = UINT_MAX;
|
|
|
+ int src;
|
|
|
+
|
|
|
+ for (src = 0; src < MAX_BUS_CLK; src++) {
|
|
|
+ delta = sdhci_s3c_consider_clock(ourhost, src, 0);
|
|
|
+ if (delta == UINT_MAX)
|
|
|
+ continue;
|
|
|
+ /* delta is a negative value in this case */
|
|
|
+ if (-delta < min)
|
|
|
+ min = -delta;
|
|
|
+ }
|
|
|
+ return min;
|
|
|
+}
|
|
|
+
|
|
|
static struct sdhci_ops sdhci_s3c_ops = {
|
|
|
.get_max_clock = sdhci_s3c_get_max_clk,
|
|
|
.set_clock = sdhci_s3c_set_clock,
|
|
|
+ .get_min_clock = sdhci_s3c_get_min_clock,
|
|
|
};
|
|
|
|
|
|
static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
|