static int wm8997_codec_probe(struct snd_soc_codec *codec)
 {
        struct wm8997_priv *priv = snd_soc_codec_get_drvdata(codec);
-       int ret;
-
-       ret = snd_soc_codec_set_cache_io(codec, priv->core.arizona->regmap);
-       if (ret != 0)
-               return ret;
 
        arizona_init_spk(codec);
 
        ARIZONA_DAC_DIGITAL_VOLUME_5R,
 };
 
+struct regmap *wm8997_get_regmap(struct device *dev)
+{
+       struct wm8997_priv *priv = dev_get_drvdata(dev);
+
+       return priv->core.arizona->regmap;
+}
+
 static struct snd_soc_codec_driver soc_codec_dev_wm8997 = {
        .probe = wm8997_codec_probe,
        .remove = wm8997_codec_remove,
+       .get_regmap =   wm8997_get_regmap,
 
        .idle_bias_off = true,