*  - master mode *NOT* supported
  */
 
+#include <linux/clk.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <sound/core.h>
 
 struct cs42l51_private {
        unsigned int mclk;
+       struct clk *mclk_handle;
        unsigned int audio_mode;        /* The mode (I2S or left-justified) */
        enum master_slave_mode func;
 };
 {
        int ret, reg;
        struct snd_soc_dapm_context *dapm;
+       struct cs42l51_private *cs42l51;
 
+       cs42l51 = snd_soc_component_get_drvdata(component);
        dapm = snd_soc_component_get_dapm(component);
-       snd_soc_dapm_new_controls(dapm, cs42l51_dapm_mclk_widgets, 1);
+
+       if (cs42l51->mclk_handle)
+               snd_soc_dapm_new_controls(dapm, cs42l51_dapm_mclk_widgets, 1);
 
        /*
         * DAC configuration
 
        dev_set_drvdata(dev, cs42l51);
 
+       cs42l51->mclk_handle = devm_clk_get(dev, "MCLK");
+       if (IS_ERR(cs42l51->mclk_handle)) {
+               if (PTR_ERR(cs42l51->mclk_handle) != -ENOENT)
+                       return PTR_ERR(cs42l51->mclk_handle);
+               cs42l51->mclk_handle = NULL;
+       }
+
        /* Verify that we have a CS42L51 */
        ret = regmap_read(regmap, CS42L51_CHIP_REV_ID, &val);
        if (ret < 0) {