Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: act8865: Pass of_node via act8865_regulator_data

This makes the code easier to read and it avoids a dynamic memory
allocation.

Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Maarten ter Huurne and committed by
Mark Brown
005e4685 e6e79fd9

+14 -16
+12 -16
drivers/regulator/act8865-regulator.c
··· 319 319 }; 320 320 321 321 static int act8865_pdata_from_dt(struct device *dev, 322 - struct device_node **of_node, 323 322 struct act8865_platform_data *pdata, 324 323 unsigned long type) 325 324 { ··· 369 370 regulator->id = i; 370 371 regulator->name = matches[i].name; 371 372 regulator->init_data = matches[i].init_data; 372 - of_node[i] = matches[i].of_node; 373 + regulator->of_node = matches[i].of_node; 373 374 regulator++; 374 375 } 375 376 ··· 377 378 } 378 379 #else 379 380 static inline int act8865_pdata_from_dt(struct device *dev, 380 - struct device_node **of_node, 381 381 struct act8865_platform_data *pdata, 382 382 unsigned long type) 383 383 { ··· 384 386 } 385 387 #endif 386 388 387 - static struct regulator_init_data 388 - *act8865_get_init_data(int id, struct act8865_platform_data *pdata) 389 + static struct act8865_regulator_data *act8865_get_regulator_data( 390 + int id, struct act8865_platform_data *pdata) 389 391 { 390 392 int i; 391 393 ··· 394 396 395 397 for (i = 0; i < pdata->num_regulators; i++) { 396 398 if (pdata->regulators[i].id == id) 397 - return pdata->regulators[i].init_data; 399 + return &pdata->regulators[i]; 398 400 } 399 401 400 402 return NULL; ··· 416 418 const struct regulator_desc *regulators; 417 419 struct act8865_platform_data pdata_of, *pdata; 418 420 struct device *dev = &client->dev; 419 - struct device_node **of_node; 420 421 int i, ret, num_regulators; 421 422 struct act8865 *act8865; 422 423 unsigned long type; ··· 469 472 return -EINVAL; 470 473 } 471 474 472 - of_node = devm_kzalloc(dev, sizeof(struct device_node *) * 473 - num_regulators, GFP_KERNEL); 474 - if (!of_node) 475 - return -ENOMEM; 476 - 477 475 if (dev->of_node && !pdata) { 478 - ret = act8865_pdata_from_dt(dev, of_node, &pdata_of, type); 476 + ret = act8865_pdata_from_dt(dev, &pdata_of, type); 479 477 if (ret < 0) 480 478 return ret; 481 479 ··· 503 511 for (i = 0; i < num_regulators; i++) { 504 512 const struct regulator_desc *desc = &regulators[i]; 505 513 struct regulator_config config = { }; 514 + struct act8865_regulator_data *rdata; 506 515 struct regulator_dev *rdev; 507 516 508 517 config.dev = dev; 509 - config.init_data = act8865_get_init_data(desc->id, pdata); 510 - config.of_node = of_node[i]; 511 518 config.driver_data = act8865; 512 519 config.regmap = act8865->regmap; 520 + 521 + rdata = act8865_get_regulator_data(desc->id, pdata); 522 + if (rdata) { 523 + config.init_data = rdata->init_data; 524 + config.of_node = rdata->of_node; 525 + } 513 526 514 527 rdev = devm_regulator_register(dev, desc, &config); 515 528 if (IS_ERR(rdev)) { ··· 524 527 } 525 528 526 529 i2c_set_clientdata(client, act8865); 527 - devm_kfree(dev, of_node); 528 530 529 531 return 0; 530 532 }
+2
include/linux/regulator/act8865.h
··· 69 69 * @id: regulator id 70 70 * @name: regulator name 71 71 * @init_data: regulator init data 72 + * @of_node: device tree node (optional) 72 73 */ 73 74 struct act8865_regulator_data { 74 75 int id; 75 76 const char *name; 76 77 struct regulator_init_data *init_data; 78 + struct device_node *of_node; 77 79 }; 78 80 79 81 /**