Merge tag 'ib-asoc-3.14.2' into for-mfd-next
[firefly-linux-kernel-4.4.55.git] / drivers / mfd / twl-core.c
index 6ef7685a4cf8b346c129403c8155ada7f144d237..ed718328eff1a52f1fff6a8e132f4ba905084422 100644 (file)
@@ -837,62 +837,6 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base,
                        usb3v1[0].dev_name = dev_name(child);
                }
        }
-       if (IS_ENABLED(CONFIG_TWL6030_USB) && pdata->usb &&
-           twl_class_is_6030()) {
-
-               static struct regulator_consumer_supply usb3v3;
-               int regulator;
-
-               if (IS_ENABLED(CONFIG_REGULATOR_TWL4030)) {
-                       /* this is a template that gets copied */
-                       struct regulator_init_data usb_fixed = {
-                               .constraints.valid_modes_mask =
-                                       REGULATOR_MODE_NORMAL
-                                       | REGULATOR_MODE_STANDBY,
-                               .constraints.valid_ops_mask =
-                                       REGULATOR_CHANGE_MODE
-                                       | REGULATOR_CHANGE_STATUS,
-                       };
-
-                       if (features & TWL6032_SUBCLASS) {
-                               usb3v3.supply = "ldousb";
-                               regulator = TWL6032_REG_LDOUSB;
-                       } else {
-                               usb3v3.supply = "vusb";
-                               regulator = TWL6030_REG_VUSB;
-                       }
-                       child = add_regulator_linked(regulator, &usb_fixed,
-                                                       &usb3v3, 1,
-                                                       features);
-                       if (IS_ERR(child))
-                               return PTR_ERR(child);
-               }
-
-               pdata->usb->features = features;
-
-               child = add_child(TWL_MODULE_USB, "twl6030_usb",
-                       pdata->usb, sizeof(*pdata->usb), true,
-                       /* irq1 = VBUS_PRES, irq0 = USB ID */
-                       irq_base + USBOTG_INTR_OFFSET,
-                       irq_base + USB_PRES_INTR_OFFSET);
-
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-               /* we need to connect regulators to this transceiver */
-               if (IS_ENABLED(CONFIG_REGULATOR_TWL4030) && child)
-                       usb3v3.dev_name = dev_name(child);
-       } else if (IS_ENABLED(CONFIG_REGULATOR_TWL4030) &&
-                  twl_class_is_6030()) {
-               if (features & TWL6032_SUBCLASS)
-                       child = add_regulator(TWL6032_REG_LDOUSB,
-                                               pdata->ldousb, features);
-               else
-                       child = add_regulator(TWL6030_REG_VUSB,
-                                               pdata->vusb, features);
-
-                       if (IS_ERR(child))
-                                       return PTR_ERR(child);
-       }
 
        if (IS_ENABLED(CONFIG_TWL4030_WATCHDOG) && twl_class_is_4030()) {
                child = add_child(TWL_MODULE_PM_RECEIVER, "twl4030_wdt", NULL,
@@ -1006,148 +950,6 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base,
                        return PTR_ERR(child);
        }
 
-       /* twl6030 regulators */
-       if (IS_ENABLED(CONFIG_REGULATOR_TWL4030) && twl_class_is_6030() &&
-                       !(features & TWL6032_SUBCLASS)) {
-               child = add_regulator(TWL6030_REG_VDD1, pdata->vdd1,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VDD2, pdata->vdd2,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VDD3, pdata->vdd3,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_V1V8, pdata->v1v8,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_V2V1, pdata->v2v1,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VPP, pdata->vpp,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VUSIM, pdata->vusim,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VCXIO, pdata->vcxio,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VDAC, pdata->vdac,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VAUX2_6030, pdata->vaux2,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_VAUX3_6030, pdata->vaux3,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6030_REG_CLK32KG, pdata->clk32kg,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-       }
-
-       /* 6030 and 6025 share this regulator */
-       if (IS_ENABLED(CONFIG_REGULATOR_TWL4030) && twl_class_is_6030()) {
-               child = add_regulator(TWL6030_REG_VANA, pdata->vana,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-       }
-
-       /* twl6032 regulators */
-       if (IS_ENABLED(CONFIG_REGULATOR_TWL4030) && twl_class_is_6030() &&
-                       (features & TWL6032_SUBCLASS)) {
-               child = add_regulator(TWL6032_REG_LDO5, pdata->ldo5,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDO1, pdata->ldo1,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDO7, pdata->ldo7,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDO6, pdata->ldo6,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDOLN, pdata->ldoln,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDO2, pdata->ldo2,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDO4, pdata->ldo4,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_LDO3, pdata->ldo3,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_SMPS3, pdata->smps3,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_SMPS4, pdata->smps4,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-               child = add_regulator(TWL6032_REG_VIO, pdata->vio6025,
-                                       features);
-               if (IS_ERR(child))
-                       return PTR_ERR(child);
-
-       }
-
        if (IS_ENABLED(CONFIG_CHARGER_TWL4030) && pdata->bci &&
                        !(features & (TPS_SUBSET | TWL5031))) {
                child = add_child(TWL_MODULE_MAIN_CHARGE, "twl4030_bci",
@@ -1269,6 +1071,11 @@ static int twl_remove(struct i2c_client *client)
        return 0;
 }
 
+static struct of_dev_auxdata twl_auxdata_lookup[] = {
+       OF_DEV_AUXDATA("ti,twl4030-gpio", 0, "twl4030-gpio", NULL),
+       { /* sentinel */ },
+};
+
 /* NOTE: This driver only handles a single twl4030/tps659x0 chip */
 static int
 twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
@@ -1407,10 +1214,14 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
                twl_i2c_write_u8(TWL4030_MODULE_INTBR, temp, REG_GPPUPDCTR1);
        }
 
-       if (node)
-               status = of_platform_populate(node, NULL, NULL, &client->dev);
-       else
+       if (node) {
+               if (pdata)
+                       twl_auxdata_lookup[0].platform_data = pdata->gpio;
+               status = of_platform_populate(node, NULL, twl_auxdata_lookup,
+                                             &client->dev);
+       } else {
                status = add_children(pdata, irq_base, id->driver_data);
+       }
 
 fail:
        if (status < 0)