}
 }
 
+/**
+ * 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)
 
         * Set host parameters.
         */
        mmc->ops = &sdhci_ops;
-       if (host->quirks & SDHCI_QUIRK_NONSTANDARD_CLOCK &&
-                       host->ops->get_min_clock)
+       if (host->ops->get_min_clock)
                mmc->f_min = host->ops->get_min_clock(host);
        else
                mmc->f_min = host->max_clk / 256;