aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/rk808-regulator.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c
index f00d6d89c7f4..f42952ead1bd 100644
--- a/drivers/regulator/rk808-regulator.c
+++ b/drivers/regulator/rk808-regulator.c
@@ -294,11 +294,10 @@ static struct of_regulator_match rk808_reg_matches[] = {
294 [RK808_ID_SWITCH2] = { .name = "SWITCH_REG2" }, 294 [RK808_ID_SWITCH2] = { .name = "SWITCH_REG2" },
295}; 295};
296 296
297static int rk808_regulator_dts(struct rk808 *rk808) 297static int rk808_regulator_dts(struct i2c_client *client,
298 struct rk808_board *pdata)
298{ 299{
299 struct device_node *np, *reg_np; 300 struct device_node *np, *reg_np;
300 struct i2c_client *client = rk808->i2c;
301 struct rk808_board *pdata = rk808->pdata;
302 int i, ret; 301 int i, ret;
303 302
304 np = client->dev.of_node; 303 np = client->dev.of_node;
@@ -335,7 +334,7 @@ static int rk808_regulator_probe(struct platform_device *pdev)
335{ 334{
336 struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent); 335 struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent);
337 struct i2c_client *client = rk808->i2c; 336 struct i2c_client *client = rk808->i2c;
338 struct rk808_board *pdata = rk808->pdata; 337 struct rk808_board *pdata = dev_get_platdata(&client->dev);
339 struct regulator_config config = {}; 338 struct regulator_config config = {};
340 struct regulator_dev *rk808_rdev; 339 struct regulator_dev *rk808_rdev;
341 struct regulator_init_data *reg_data; 340 struct regulator_init_data *reg_data;
@@ -343,22 +342,15 @@ static int rk808_regulator_probe(struct platform_device *pdev)
343 int ret = 0; 342 int ret = 0;
344 343
345 if (!pdata) { 344 if (!pdata) {
346 dev_warn(&client->dev, "%s no pdata, create it\n", __func__);
347 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL); 345 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
348 if (!pdata) 346 if (!pdata)
349 return -ENOMEM; 347 return -ENOMEM;
350 } 348 }
351 349
352 ret = rk808_regulator_dts(rk808); 350 ret = rk808_regulator_dts(client, pdata);
353 if (ret) 351 if (ret)
354 return ret; 352 return ret;
355 353
356 rk808->num_regulators = RK808_NUM_REGULATORS;
357 rk808->rdev = devm_kzalloc(&pdev->dev, RK808_NUM_REGULATORS *
358 sizeof(struct regulator_dev *), GFP_KERNEL);
359 if (!rk808->rdev)
360 return -ENOMEM;
361
362 /* Instantiate the regulators */ 354 /* Instantiate the regulators */
363 for (i = 0; i < RK808_NUM_REGULATORS; i++) { 355 for (i = 0; i < RK808_NUM_REGULATORS; i++) {
364 reg_data = pdata->rk808_init_data[i]; 356 reg_data = pdata->rk808_init_data[i];
@@ -382,7 +374,6 @@ static int rk808_regulator_probe(struct platform_device *pdev)
382 "failed to register %d regulator\n", i); 374 "failed to register %d regulator\n", i);
383 return PTR_ERR(rk808_rdev); 375 return PTR_ERR(rk808_rdev);
384 } 376 }
385 rk808->rdev[i] = rk808_rdev;
386 } 377 }
387 return 0; 378 return 0;
388} 379}