pdata->gpio_init[i] = 0x0;
                }
 
-       pdata->mclk = devm_clk_get(&i2c->dev, NULL);
-
-       return 0;
+       pdata->mclk = devm_clk_get_optional(&i2c->dev, NULL);
+       return PTR_ERR_OR_ZERO(pdata->mclk);
 }
 
 static int wm8962_i2c_probe(struct i2c_client *i2c,
                        return ret;
        }
 
-       /* Mark the mclk pointer to NULL if no mclk assigned */
-       if (IS_ERR(wm8962->pdata.mclk)) {
-               /* But do not ignore the request for probe defer */
-               if (PTR_ERR(wm8962->pdata.mclk) == -EPROBE_DEFER)
-                       return -EPROBE_DEFER;
-               wm8962->pdata.mclk = NULL;
-       }
-
        for (i = 0; i < ARRAY_SIZE(wm8962->supplies); i++)
                wm8962->supplies[i].supply = wm8962_supply_names[i];