#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <linux/clk.h>
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/slab.h>
        struct device_opp *dev_opp;
        struct device_list_opp *list_dev;
        struct device_node *np;
+       int ret;
 
        /* Check for existing list for 'dev' first */
        dev_opp = _find_device_opp(dev);
                of_node_put(np);
        }
 
+       /* Find clk for the device */
+       dev_opp->clk = clk_get(dev, NULL);
+       if (IS_ERR(dev_opp->clk)) {
+               ret = PTR_ERR(dev_opp->clk);
+               if (ret != -EPROBE_DEFER)
+                       dev_dbg(dev, "%s: Couldn't find clock: %d\n", __func__,
+                               ret);
+       }
+
        srcu_init_notifier_head(&dev_opp->srcu_head);
        INIT_LIST_HEAD(&dev_opp->opp_list);
 
        if (!IS_ERR_OR_NULL(dev_opp->regulator))
                return;
 
+       /* Release clk */
+       if (!IS_ERR(dev_opp->clk))
+               clk_put(dev_opp->clk);
+
        list_dev = list_first_entry(&dev_opp->dev_list, struct device_list_opp,
                                    node);
 
 
 #include <linux/rculist.h>
 #include <linux/rcupdate.h>
 
+struct clk;
 struct regulator;
 
 /* Lock to allow exclusive modification to the device and opp lists */
  * @supported_hw: Array of version number to support.
  * @supported_hw_count: Number of elements in supported_hw array.
  * @prop_name: A name to postfix to many DT properties, while parsing them.
+ * @clk: Device's clock handle
  * @regulator: Supply regulator
  * @dentry:    debugfs dentry pointer of the real device directory (not links).
  * @dentry_name: Name of the real dentry.
        unsigned int *supported_hw;
        unsigned int supported_hw_count;
        const char *prop_name;
+       struct clk *clk;
        struct regulator *regulator;
 
 #ifdef CONFIG_DEBUG_FS