]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/mfd/arizona-core.c
Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze
[karo-tx-linux.git] / drivers / mfd / arizona-core.c
index c784f4602a746c8d4eec1d8c4383ed4cae0a8df6..bc8a3edb6bbf2b2fdc9c3f15a425eafb0bcb23af 100644 (file)
@@ -292,6 +292,7 @@ int arizona_dev_init(struct arizona *arizona)
        struct device *dev = arizona->dev;
        const char *type_name;
        unsigned int reg, val;
+       int (*apply_patch)(struct arizona *) = NULL;
        int ret, i;
 
        dev_set_drvdata(arizona->dev, arizona);
@@ -391,7 +392,7 @@ int arizona_dev_init(struct arizona *arizona)
                                arizona->type);
                        arizona->type = WM5102;
                }
-               ret = wm5102_patch(arizona);
+               apply_patch = wm5102_patch;
                break;
 #endif
 #ifdef CONFIG_MFD_WM5110
@@ -402,7 +403,7 @@ int arizona_dev_init(struct arizona *arizona)
                                arizona->type);
                        arizona->type = WM5110;
                }
-               ret = wm5110_patch(arizona);
+               apply_patch = wm5110_patch;
                break;
 #endif
        default:
@@ -412,9 +413,6 @@ int arizona_dev_init(struct arizona *arizona)
 
        dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A');
 
-       if (ret != 0)
-               dev_err(arizona->dev, "Failed to apply patch: %d\n", ret);
-
        /* If we have a /RESET GPIO we'll already be reset */
        if (!arizona->pdata.reset) {
                regcache_mark_dirty(arizona->regmap);
@@ -438,6 +436,15 @@ int arizona_dev_init(struct arizona *arizona)
                goto err_reset;
        }
 
+       if (apply_patch) {
+               ret = apply_patch(arizona);
+               if (ret != 0) {
+                       dev_err(arizona->dev, "Failed to apply patch: %d\n",
+                               ret);
+                       goto err_reset;
+               }
+       }
+
        for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) {
                if (!arizona->pdata.gpio_defaults[i])
                        continue;