/* replace driver_data with info */
        info->regulator = regulator_register(&info->desc, &pdev->dev,
-                                            pdata, info);
+                                            pdata, info, NULL);
        if (IS_ERR(info->regulator)) {
                dev_err(&pdev->dev, "failed to register regulator %s\n",
                        info->desc.name);
 
        ri->pdev = pdev;
 
        rdev = regulator_register(&ri->desc, &pdev->dev,
-                                 pdev->dev.platform_data, ri);
+                                 pdev->dev.platform_data, ri, NULL);
        if (IS_ERR(rdev)) {
                dev_err(&pdev->dev, "Failed to register regulator %s\n",
                        ri->desc.name);
 
                rdev = regulator_register(&ab3100_regulator_desc[i],
                                          &pdev->dev,
                                          &plfdata->reg_constraints[i],
-                                         reg);
+                                         reg, NULL);
 
                if (IS_ERR(rdev)) {
                        err = PTR_ERR(rdev);
 
 
                /* register regulator with framework */
                info->regulator = regulator_register(&info->desc, &pdev->dev,
-                               &pdata->regulator[i], info);
+                               &pdata->regulator[i], info, NULL);
                if (IS_ERR(info->regulator)) {
                        err = PTR_ERR(info->regulator);
                        dev_err(&pdev->dev, "failed to register regulator %s\n",
 
        chip->current_mask = (chip->current_level - 1) << chip->current_offset;
 
        chip->rdev = regulator_register(&ad5398_reg, &client->dev,
-                                       init_data, chip);
+                                       init_data, chip, NULL);
        if (IS_ERR(chip->rdev)) {
                ret = PTR_ERR(chip->rdev);
                dev_err(&client->dev, "failed to register %s %s\n",
 
        ret = gpio_direction_output(pdata->gpio_nce, 1);
 
        bq24022 = regulator_register(&bq24022_desc, &pdev->dev,
-                                    pdata->init_data, pdata);
+                                    pdata->init_data, pdata, NULL);
        if (IS_ERR(bq24022)) {
                dev_dbg(&pdev->dev, "couldn't register regulator\n");
                ret = PTR_ERR(bq24022);
 
  */
 struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
        struct device *dev, const struct regulator_init_data *init_data,
-       void *driver_data)
+       void *driver_data, struct device_node *of_node)
 {
        static atomic_t regulator_no = ATOMIC_INIT(0);
        struct regulator_dev *rdev;
 
        /* register with sysfs */
        rdev->dev.class = ®ulator_class;
+       rdev->dev.of_node = of_node;
        rdev->dev.parent = dev;
        dev_set_name(&rdev->dev, "regulator.%d",
                     atomic_inc_return(®ulator_no) - 1);
 
                ri->desc.ops = &da9030_regulator_ldo1_15_ops;
 
        rdev = regulator_register(&ri->desc, &pdev->dev,
-                                 pdev->dev.platform_data, ri);
+                                 pdev->dev.platform_data, ri, NULL);
        if (IS_ERR(rdev)) {
                dev_err(&pdev->dev, "failed to register regulator %s\n",
                                ri->desc.name);
 
 
                /* register with the regulator framework */
                info->rdev = regulator_register(&info->desc, &pdev->dev,
-                               init_data, info);
+                               init_data, info, NULL);
                if (IS_ERR(info->rdev)) {
                        err = PTR_ERR(info->rdev);
                        dev_err(&pdev->dev, "failed to register %s: err %i\n",
 
        int ret;
 
        dummy_regulator_rdev = regulator_register(&dummy_desc, NULL,
-                                                 &dummy_initdata, NULL);
+                                                 &dummy_initdata, NULL, NULL);
        if (IS_ERR(dummy_regulator_rdev)) {
                ret = PTR_ERR(dummy_regulator_rdev);
                pr_err("Failed to register regulator: %d\n", ret);
 
        }
 
        drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev,
-                                         config->init_data, drvdata);
+                                         config->init_data, drvdata, NULL);
        if (IS_ERR(drvdata->dev)) {
                ret = PTR_ERR(drvdata->dev);
                dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret);
 
 
        for (i = 0; i < 3; i++) {
                pmic->rdev[i] = regulator_register(&isl_rd[i], &i2c->dev,
-                                               init_data, pmic);
+                                               init_data, pmic, NULL);
                if (IS_ERR(pmic->rdev[i])) {
                        dev_err(&i2c->dev, "failed to register %s\n", id->name);
                        err = PTR_ERR(pmic->rdev[i]);
 
        for (i = 0; i < pdata->num_regulators; i++) {
                struct lp3971_regulator_subdev *reg = &pdata->regulators[i];
                lp3971->rdev[i] = regulator_register(®ulators[reg->id],
-                                       lp3971->dev, reg->initdata, lp3971);
+                               lp3971->dev, reg->initdata, lp3971, NULL);
 
                if (IS_ERR(lp3971->rdev[i])) {
                        err = PTR_ERR(lp3971->rdev[i]);
 
        for (i = 0; i < pdata->num_regulators; i++) {
                struct lp3972_regulator_subdev *reg = &pdata->regulators[i];
                lp3972->rdev[i] = regulator_register(®ulators[reg->id],
-                                       lp3972->dev, reg->initdata, lp3972);
+                               lp3972->dev, reg->initdata, lp3972, NULL);
 
                if (IS_ERR(lp3972->rdev[i])) {
                        err = PTR_ERR(lp3972->rdev[i]);
 
                }
                rdev[i] = regulator_register(&max1586_reg[id], &client->dev,
                                             pdata->subdevs[i].platform_data,
-                                            max1586);
+                                            max1586, NULL);
                if (IS_ERR(rdev[i])) {
                        ret = PTR_ERR(rdev[i]);
                        dev_err(&client->dev, "failed to register %s\n",
 
        }
 
        info->regulator = regulator_register(&dcdc_desc, &client->dev,
-                                            pdata->regulator, info);
+                                            pdata->regulator, info, NULL);
        if (IS_ERR(info->regulator)) {
                dev_err(info->dev, "failed to register regulator %s\n",
                        dcdc_desc.name);
 
 
                rdev[i] = regulator_register(&max8660_reg[id], &client->dev,
                                             pdata->subdevs[i].platform_data,
-                                            max8660);
+                                            max8660, NULL);
                if (IS_ERR(rdev[i])) {
                        ret = PTR_ERR(rdev[i]);
                        dev_err(&client->dev, "failed to register %s\n",
 
        ri->chip = chip;
 
        rdev = regulator_register(&ri->desc, &pdev->dev,
-                                 pdata->regulator[pdev->id], ri);
+                                 pdata->regulator[pdev->id], ri, NULL);
        if (IS_ERR(rdev)) {
                dev_err(&pdev->dev, "failed to register regulator %s\n",
                                ri->desc.name);
 
        max8952->pdata = pdata;
 
        max8952->rdev = regulator_register(®ulator, max8952->dev,
-                       &pdata->reg_data, max8952);
+                       &pdata->reg_data, max8952, NULL);
 
        if (IS_ERR(max8952->rdev)) {
                ret = PTR_ERR(max8952->rdev);
 
                        regulators[id].n_voltages = 16;
 
                rdev[i] = regulator_register(®ulators[id], max8997->dev,
-                               pdata->regulators[i].initdata, max8997);
+                               pdata->regulators[i].initdata, max8997, NULL);
                if (IS_ERR(rdev[i])) {
                        ret = PTR_ERR(rdev[i]);
                        dev_err(max8997->dev, "regulator init failed for %d\n",
 
                        regulators[index].n_voltages = count;
                }
                rdev[i] = regulator_register(®ulators[index], max8998->dev,
-                               pdata->regulators[i].initdata, max8998);
+                               pdata->regulators[i].initdata, max8998, NULL);
                if (IS_ERR(rdev[i])) {
                        ret = PTR_ERR(rdev[i]);
                        dev_err(max8998->dev, "regulator init failed\n");
 
                init_data = &pdata->regulators[i];
                priv->regulators[i] = regulator_register(
                                &mc13783_regulators[init_data->id].desc,
-                               &pdev->dev, init_data->init_data, priv);
+                               &pdev->dev, init_data->init_data, priv, NULL);
 
                if (IS_ERR(priv->regulators[i])) {
                        dev_err(&pdev->dev, "failed to register regulator %s\n",
 
                init_data = &pdata->regulators[i];
                priv->regulators[i] = regulator_register(
                        &mc13892_regulators[init_data->id].desc,
-                       &pdev->dev, init_data->init_data, priv);
+                       &pdev->dev, init_data->init_data, priv, NULL);
 
                if (IS_ERR(priv->regulators[i])) {
                        dev_err(&pdev->dev, "failed to register regulator %s\n",
 
        void *pcap = dev_get_drvdata(pdev->dev.parent);
 
        rdev = regulator_register(&pcap_regulators[pdev->id], &pdev->dev,
-                               pdev->dev.platform_data, pcap);
+                               pdev->dev.platform_data, pcap, NULL);
        if (IS_ERR(rdev))
                return PTR_ERR(rdev);
 
 
        pcf = dev_to_pcf50633(pdev->dev.parent);
 
        rdev = regulator_register(®ulators[pdev->id], &pdev->dev,
-                                 pdev->dev.platform_data, pcf);
+                                 pdev->dev.platform_data, pcf, NULL);
        if (IS_ERR(rdev))
                return PTR_ERR(rdev);
 
 
        /* Register regulator with framework */
        tps6105x->regulator = regulator_register(&tps6105x_regulator_desc,
                                             &tps6105x->client->dev,
-                                            pdata->regulator_data, tps6105x);
+                                            pdata->regulator_data, tps6105x,
+                                            NULL);
        if (IS_ERR(tps6105x->regulator)) {
                ret = PTR_ERR(tps6105x->regulator);
                dev_err(&tps6105x->client->dev,
 
 
                /* Register the regulators */
                rdev = regulator_register(&tps->desc[i], &client->dev,
-                                         init_data, tps);
+                                         init_data, tps, NULL);
                if (IS_ERR(rdev)) {
                        dev_err(&client->dev, "failed to register %s\n",
                                id->name);
 
                tps->desc[i].owner = THIS_MODULE;
 
                rdev = regulator_register(&tps->desc[i],
-                                       tps6507x_dev->dev, init_data, tps);
+                                       tps6507x_dev->dev, init_data, tps, NULL);
                if (IS_ERR(rdev)) {
                        dev_err(tps6507x_dev->dev,
                                "failed to register %s regulator\n",
 
                        hw->desc[i].n_voltages = 1;
 
                hw->rdev[i] = regulator_register(&hw->desc[i], dev,
-                                                init_data, hw);
+                                                init_data, hw, NULL);
                if (IS_ERR(hw->rdev[i])) {
                        ret = PTR_ERR(hw->rdev[i]);
                        hw->rdev[i] = NULL;
 
                return err;
 
        rdev = regulator_register(&ri->desc, &pdev->dev,
-                                 pdev->dev.platform_data, ri);
+                                 pdev->dev.platform_data, ri, NULL);
        if (IS_ERR(rdev)) {
                dev_err(&pdev->dev, "failed to register regulator %s\n",
                                ri->desc.name);
 
                pmic->desc[i].owner = THIS_MODULE;
 
                rdev = regulator_register(&pmic->desc[i],
-                               tps65910->dev, reg_data, pmic);
+                               tps65910->dev, reg_data, pmic, NULL);
                if (IS_ERR(rdev)) {
                        dev_err(tps65910->dev,
                                "failed to register %s regulator\n",
 
                pmic->desc[i].owner = THIS_MODULE;
                range = tps65912_get_range(pmic, i);
                rdev = regulator_register(&pmic->desc[i],
-                                       tps65912->dev, reg_data, pmic);
+                                       tps65912->dev, reg_data, pmic, NULL);
                if (IS_ERR(rdev)) {
                        dev_err(tps65912->dev,
                                "failed to register %s regulator\n",
 
                break;
        }
 
-       rdev = regulator_register(&info->desc, &pdev->dev, initdata, info);
+       rdev = regulator_register(&info->desc, &pdev->dev, initdata, info, NULL);
        if (IS_ERR(rdev)) {
                dev_err(&pdev->dev, "can't register %s, %ld\n",
                                info->desc.name, PTR_ERR(rdev));
 
                wm831x_buckv_dvs_init(dcdc, pdata->dcdc[id]->driver_data);
 
        dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
-                                            pdata->dcdc[id], dcdc);
+                                            pdata->dcdc[id], dcdc, NULL);
        if (IS_ERR(dcdc->regulator)) {
                ret = PTR_ERR(dcdc->regulator);
                dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
        dcdc->desc.owner = THIS_MODULE;
 
        dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
-                                            pdata->dcdc[id], dcdc);
+                                            pdata->dcdc[id], dcdc, NULL);
        if (IS_ERR(dcdc->regulator)) {
                ret = PTR_ERR(dcdc->regulator);
                dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
        dcdc->desc.owner = THIS_MODULE;
 
        dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
-                                            pdata->dcdc[id], dcdc);
+                                            pdata->dcdc[id], dcdc, NULL);
        if (IS_ERR(dcdc->regulator)) {
                ret = PTR_ERR(dcdc->regulator);
                dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
        dcdc->desc.owner = THIS_MODULE;
 
        dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
-                                            pdata->epe[id], dcdc);
+                                            pdata->epe[id], dcdc, NULL);
        if (IS_ERR(dcdc->regulator)) {
                ret = PTR_ERR(dcdc->regulator);
                dev_err(wm831x->dev, "Failed to register EPE%d: %d\n",
 
        isink->desc.owner = THIS_MODULE;
 
        isink->regulator = regulator_register(&isink->desc, &pdev->dev,
-                                            pdata->isink[id], isink);
+                                            pdata->isink[id], isink, NULL);
        if (IS_ERR(isink->regulator)) {
                ret = PTR_ERR(isink->regulator);
                dev_err(wm831x->dev, "Failed to register ISINK%d: %d\n",
 
        ldo->desc.owner = THIS_MODULE;
 
        ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
-                                            pdata->ldo[id], ldo);
+                                            pdata->ldo[id], ldo, NULL);
        if (IS_ERR(ldo->regulator)) {
                ret = PTR_ERR(ldo->regulator);
                dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
        ldo->desc.owner = THIS_MODULE;
 
        ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
-                                            pdata->ldo[id], ldo);
+                                            pdata->ldo[id], ldo, NULL);
        if (IS_ERR(ldo->regulator)) {
                ret = PTR_ERR(ldo->regulator);
                dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
        ldo->desc.owner = THIS_MODULE;
 
        ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
-                                            pdata->ldo[id], ldo);
+                                            pdata->ldo[id], ldo, NULL);
        if (IS_ERR(ldo->regulator)) {
                ret = PTR_ERR(ldo->regulator);
                dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
 
        /* register regulator */
        rdev = regulator_register(&wm8350_reg[pdev->id], &pdev->dev,
                                  pdev->dev.platform_data,
-                                 dev_get_drvdata(&pdev->dev));
+                                 dev_get_drvdata(&pdev->dev), NULL);
        if (IS_ERR(rdev)) {
                dev_err(&pdev->dev, "failed to register %s\n",
                        wm8350_reg[pdev->id].name);
 
        struct regulator_dev *rdev;
 
        rdev = regulator_register(®ulators[pdev->id], &pdev->dev,
-                                 pdev->dev.platform_data, wm8400);
+                                 pdev->dev.platform_data, wm8400, NULL);
 
        if (IS_ERR(rdev))
                return PTR_ERR(rdev);
 
                ldo->is_enabled = true;
 
        ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &pdev->dev,
-                                            pdata->ldo[id].init_data, ldo);
+                                            pdata->ldo[id].init_data, ldo, NULL);
        if (IS_ERR(ldo->regulator)) {
                ret = PTR_ERR(ldo->regulator);
                dev_err(wm8994->dev, "Failed to register LDO%d: %d\n",
 
 
 struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
        struct device *dev, const struct regulator_init_data *init_data,
-       void *driver_data);
+       void *driver_data, struct device_node *of_node);
 void regulator_unregister(struct regulator_dev *rdev);
 
 int regulator_notifier_call_chain(struct regulator_dev *rdev,
 
        ldo->voltage = voltage;
 
        ldo->dev = regulator_register(&ldo->desc, codec->dev,
-                                         init_data, ldo);
+                                         init_data, ldo, NULL);
        if (IS_ERR(ldo->dev)) {
                int ret = PTR_ERR(ldo->dev);