};
 
 static struct clk mmc1_ck = {
-       .name           = "mmc1_ck",
+       .name           = "mmc_ck",
+       .id             = 1,
        /* Functional clock is direct from ULPD, interface clock is ARMPER */
        .parent         = &armper_ck.clk,
        .rate           = 48000000,
 };
 
 static struct clk mmc2_ck = {
-       .name           = "mmc2_ck",
+       .name           = "mmc_ck",
+       .id             = 2,
        /* Functional clock is direct from ULPD, interface clock is ARMPER */
        .parent         = &armper_ck.clk,
        .rate           = 48000000,
 
 #include <linux/string.h>
 #include <linux/clk.h>
 #include <linux/mutex.h>
+#include <linux/platform_device.h>
 
 #include <asm/io.h>
 #include <asm/semaphore.h>
  * Standard clock functions defined in include/linux/clk.h
  *-------------------------------------------------------------------------*/
 
+/*
+ * Returns a clock. Note that we first try to use device id on the bus
+ * and clock name. If this fails, we try to use clock name only.
+ */
 struct clk * clk_get(struct device *dev, const char *id)
 {
        struct clk *p, *clk = ERR_PTR(-ENOENT);
+       int idno;
+
+       if (dev == NULL || dev->bus != &platform_bus_type)
+               idno = -1;
+       else
+               idno = to_platform_device(dev)->id;
 
        mutex_lock(&clocks_mutex);
+
        list_for_each_entry(p, &clocks, node) {
-               if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
+               if (p->id == idno &&
+                   strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
                        clk = p;
                        break;
                }
        }
+
+       list_for_each_entry(p, &clocks, node) {
+               if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
+                       clk = p;
+                       break;
+               }
+       }       
+
        mutex_unlock(&clocks_mutex);
 
        return clk;
 
        }
 
        if (!cpu_is_omap24xx())
-               host->fclk = clk_get(&pdev->dev,
-                                   (host->id == 1) ? "mmc1_ck" : "mmc2_ck");
+               host->fclk = clk_get(&pdev->dev, "mmc_ck");
        else
                host->fclk = clk_get(&pdev->dev, "mmc_fck");