|
@@ -292,6 +292,7 @@ int __devinit 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 __devinit 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 __devinit 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 __devinit 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) {
|
|
|
ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0);
|
|
@@ -430,6 +428,15 @@ int __devinit 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;
|