ASoC: wm8804: Use new devres regulator_register_notifier
authorCharles Keepax <ckeepax@gmail.com>
Thu, 5 Mar 2015 15:39:21 +0000 (15:39 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 5 Mar 2015 16:51:58 +0000 (16:51 +0000)
This is more idiomatic and also fixes an issue where the notifiers were
being leaked if probe failed.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm8804.c

index 1bd4ace295948a4851132e9f75d3e3c12529ea9c..7804ddf53a04d4c6efce629a72728c56d73b8d7c 100644 (file)
@@ -601,8 +601,10 @@ int wm8804_probe(struct device *dev, struct regmap *regmap)
 
        /* This should really be moved into the regulator core */
        for (i = 0; i < ARRAY_SIZE(wm8804->supplies); i++) {
-               ret = regulator_register_notifier(wm8804->supplies[i].consumer,
-                                                 &wm8804->disable_nb[i]);
+               struct regulator *regulator = wm8804->supplies[i].consumer;
+
+               ret = devm_regulator_register_notifier(regulator,
+                                                      &wm8804->disable_nb[i]);
                if (ret != 0) {
                        dev_err(dev,
                                "Failed to register regulator notifier: %d\n",
@@ -662,15 +664,6 @@ EXPORT_SYMBOL_GPL(wm8804_probe);
 
 void wm8804_remove(struct device *dev)
 {
-       struct wm8804_priv *wm8804;
-       int i;
-
-       wm8804 = dev_get_drvdata(dev);
-
-       for (i = 0; i < ARRAY_SIZE(wm8804->supplies); ++i)
-               regulator_unregister_notifier(wm8804->supplies[i].consumer,
-                                             &wm8804->disable_nb[i]);
-
        snd_soc_unregister_codec(dev);
 }
 EXPORT_SYMBOL_GPL(wm8804_remove);