1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * devres.c -- Voltage/Current Regulator framework devres implementation. 4 * 5 * Copyright 2013 Linaro Ltd 6 */ 7 8 #include <linux/kernel.h> 9 #include <linux/err.h> 10 #include <linux/regmap.h> 11 #include <linux/regulator/consumer.h> 12 #include <linux/regulator/driver.h> 13 #include <linux/module.h> 14 15 #include "internal.h" 16 17 static void devm_regulator_release(struct device *dev, void *res) 18 { 19 regulator_put(*(struct regulator **)res); 20 } 21 22 static struct regulator *_devm_regulator_get(struct device *dev, const char *id, 23 enum regulator_get_type get_type) 24 { 25 struct regulator **ptr, *regulator; 26 27 ptr = devres_alloc(devm_regulator_release, sizeof(*ptr), GFP_KERNEL); 28 if (!ptr) 29 return ERR_PTR(-ENOMEM); 30 31 regulator = _regulator_get(dev, id, get_type); 32 if (!IS_ERR(regulator)) { 33 *ptr = regulator; 34 devres_add(dev, ptr); 35 } else { 36 devres_free(ptr); 37 } 38 39 return regulator; 40 } 41 42 /** 43 * devm_regulator_get - Resource managed regulator_get() 44 * @dev: device to supply 45 * @id: supply name or regulator ID. 46 * 47 * Managed regulator_get(). Regulators returned from this function are 48 * automatically regulator_put() on driver detach. See regulator_get() for more 49 * information. 50 */ 51 struct regulator *devm_regulator_get(struct device *dev, const char *id) 52 { 53 return _devm_regulator_get(dev, id, NORMAL_GET); 54 } 55 EXPORT_SYMBOL_GPL(devm_regulator_get); 56 57 /** 58 * devm_regulator_get_exclusive - Resource managed regulator_get_exclusive() 59 * @dev: device to supply 60 * @id: supply name or regulator ID. 61 * 62 * Managed regulator_get_exclusive(). Regulators returned from this function 63 * are automatically regulator_put() on driver detach. See regulator_get() for 64 * more information. 65 */ 66 struct regulator *devm_regulator_get_exclusive(struct device *dev, 67 const char *id) 68 { 69 return _devm_regulator_get(dev, id, EXCLUSIVE_GET); 70 } 71 EXPORT_SYMBOL_GPL(devm_regulator_get_exclusive); 72 73 static void regulator_action_disable(void *d) 74 { 75 struct regulator *r = (struct regulator *)d; 76 77 regulator_disable(r); 78 } 79 80 static int _devm_regulator_get_enable(struct device *dev, const char *id, 81 enum regulator_get_type get_type) 82 { 83 struct regulator *r; 84 int ret; 85 86 r = _devm_regulator_get(dev, id, get_type); 87 if (IS_ERR(r)) 88 return PTR_ERR(r); 89 90 ret = regulator_enable(r); 91 if (!ret) 92 ret = devm_add_action_or_reset(dev, ®ulator_action_disable, r); 93 94 if (ret) 95 devm_regulator_put(r); 96 97 return ret; 98 } 99 100 /** 101 * devm_regulator_get_enable_optional - Resource managed regulator get and enable 102 * @dev: device to supply 103 * @id: supply name or regulator ID. 104 * 105 * Get and enable regulator for duration of the device life-time. 106 * regulator_disable() and regulator_put() are automatically called on driver 107 * detach. See regulator_get_optional() and regulator_enable() for more 108 * information. 109 */ 110 int devm_regulator_get_enable_optional(struct device *dev, const char *id) 111 { 112 return _devm_regulator_get_enable(dev, id, OPTIONAL_GET); 113 } 114 EXPORT_SYMBOL_GPL(devm_regulator_get_enable_optional); 115 116 /** 117 * devm_regulator_get_enable - Resource managed regulator get and enable 118 * @dev: device to supply 119 * @id: supply name or regulator ID. 120 * 121 * Get and enable regulator for duration of the device life-time. 122 * regulator_disable() and regulator_put() are automatically called on driver 123 * detach. See regulator_get() and regulator_enable() for more 124 * information. 125 */ 126 int devm_regulator_get_enable(struct device *dev, const char *id) 127 { 128 return _devm_regulator_get_enable(dev, id, NORMAL_GET); 129 } 130 EXPORT_SYMBOL_GPL(devm_regulator_get_enable); 131 132 /** 133 * devm_regulator_get_optional - Resource managed regulator_get_optional() 134 * @dev: device to supply 135 * @id: supply name or regulator ID. 136 * 137 * Managed regulator_get_optional(). Regulators returned from this 138 * function are automatically regulator_put() on driver detach. See 139 * regulator_get_optional() for more information. 140 */ 141 struct regulator *devm_regulator_get_optional(struct device *dev, 142 const char *id) 143 { 144 return _devm_regulator_get(dev, id, OPTIONAL_GET); 145 } 146 EXPORT_SYMBOL_GPL(devm_regulator_get_optional); 147 148 /** 149 * devm_regulator_get_enable_read_voltage - Resource managed regulator get and 150 * enable that returns the voltage 151 * @dev: device to supply 152 * @id: supply name or regulator ID. 153 * 154 * Get and enable regulator for duration of the device life-time. 155 * regulator_disable() and regulator_put() are automatically called on driver 156 * detach. See regulator_get_optional(), regulator_enable(), and 157 * regulator_get_voltage() for more information. 158 * 159 * This is a convenience function for supplies that provide a reference voltage 160 * where the consumer driver just needs to know the voltage and keep the 161 * regulator enabled. 162 * 163 * In cases where the supply is not strictly required, callers can check for 164 * -ENODEV error and handle it accordingly. 165 * 166 * Returns: voltage in microvolts on success, or an negative error number on failure. 167 */ 168 int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id) 169 { 170 struct regulator *r; 171 int ret; 172 173 /* 174 * Since we need a real voltage, we use devm_regulator_get_optional() 175 * rather than getting a dummy regulator with devm_regulator_get() and 176 * then letting regulator_get_voltage() fail with -EINVAL. This way, the 177 * caller can handle the -ENODEV negative error number if needed instead 178 * of the ambiguous -EINVAL. 179 */ 180 r = devm_regulator_get_optional(dev, id); 181 if (IS_ERR(r)) 182 return PTR_ERR(r); 183 184 ret = regulator_enable(r); 185 if (ret) 186 goto err_regulator_put; 187 188 ret = devm_add_action_or_reset(dev, regulator_action_disable, r); 189 if (ret) 190 goto err_regulator_put; 191 192 ret = regulator_get_voltage(r); 193 if (ret < 0) 194 goto err_release_action; 195 196 return ret; 197 198 err_release_action: 199 devm_release_action(dev, regulator_action_disable, r); 200 err_regulator_put: 201 devm_regulator_put(r); 202 203 return ret; 204 } 205 EXPORT_SYMBOL_GPL(devm_regulator_get_enable_read_voltage); 206 207 static int devm_regulator_match(struct device *dev, void *res, void *data) 208 { 209 struct regulator **r = res; 210 if (!r || !*r) { 211 WARN_ON(!r || !*r); 212 return 0; 213 } 214 return *r == data; 215 } 216 217 /** 218 * devm_regulator_put - Resource managed regulator_put() 219 * @regulator: regulator to free 220 * 221 * Deallocate a regulator allocated with devm_regulator_get(). Normally 222 * this function will not need to be called and the resource management 223 * code will ensure that the resource is freed. 224 */ 225 void devm_regulator_put(struct regulator *regulator) 226 { 227 int rc; 228 229 rc = devres_release(regulator->dev, devm_regulator_release, 230 devm_regulator_match, regulator); 231 if (rc != 0) 232 WARN_ON(rc); 233 } 234 EXPORT_SYMBOL_GPL(devm_regulator_put); 235 236 struct regulator_bulk_devres { 237 struct regulator_bulk_data *consumers; 238 int num_consumers; 239 }; 240 241 static void devm_regulator_bulk_release(struct device *dev, void *res) 242 { 243 struct regulator_bulk_devres *devres = res; 244 245 regulator_bulk_free(devres->num_consumers, devres->consumers); 246 } 247 248 static int _devm_regulator_bulk_get(struct device *dev, int num_consumers, 249 struct regulator_bulk_data *consumers, 250 enum regulator_get_type get_type) 251 { 252 struct regulator_bulk_devres *devres; 253 int ret; 254 255 devres = devres_alloc(devm_regulator_bulk_release, 256 sizeof(*devres), GFP_KERNEL); 257 if (!devres) 258 return -ENOMEM; 259 260 ret = _regulator_bulk_get(dev, num_consumers, consumers, get_type); 261 if (!ret) { 262 devres->consumers = consumers; 263 devres->num_consumers = num_consumers; 264 devres_add(dev, devres); 265 } else { 266 devres_free(devres); 267 } 268 269 return ret; 270 } 271 272 /** 273 * devm_regulator_bulk_get - managed get multiple regulator consumers 274 * 275 * @dev: device to supply 276 * @num_consumers: number of consumers to register 277 * @consumers: configuration of consumers; clients are stored here. 278 * 279 * @return 0 on success, a negative error number on failure. 280 * 281 * This helper function allows drivers to get several regulator 282 * consumers in one operation with management, the regulators will 283 * automatically be freed when the device is unbound. If any of the 284 * regulators cannot be acquired then any regulators that were 285 * allocated will be freed before returning to the caller. 286 */ 287 int devm_regulator_bulk_get(struct device *dev, int num_consumers, 288 struct regulator_bulk_data *consumers) 289 { 290 return _devm_regulator_bulk_get(dev, num_consumers, consumers, NORMAL_GET); 291 } 292 EXPORT_SYMBOL_GPL(devm_regulator_bulk_get); 293 294 /** 295 * devm_regulator_bulk_get_exclusive - managed exclusive get of multiple 296 * regulator consumers 297 * 298 * @dev: device to supply 299 * @num_consumers: number of consumers to register 300 * @consumers: configuration of consumers; clients are stored here. 301 * 302 * @return 0 on success, a negative error number on failure. 303 * 304 * This helper function allows drivers to exclusively get several 305 * regulator consumers in one operation with management, the regulators 306 * will automatically be freed when the device is unbound. If any of 307 * the regulators cannot be acquired then any regulators that were 308 * allocated will be freed before returning to the caller. 309 */ 310 int devm_regulator_bulk_get_exclusive(struct device *dev, int num_consumers, 311 struct regulator_bulk_data *consumers) 312 { 313 return _devm_regulator_bulk_get(dev, num_consumers, consumers, EXCLUSIVE_GET); 314 } 315 EXPORT_SYMBOL_GPL(devm_regulator_bulk_get_exclusive); 316 317 /** 318 * devm_regulator_bulk_get_const - devm_regulator_bulk_get() w/ const data 319 * 320 * @dev: device to supply 321 * @num_consumers: number of consumers to register 322 * @in_consumers: const configuration of consumers 323 * @out_consumers: in_consumers is copied here and this is passed to 324 * devm_regulator_bulk_get(). 325 * 326 * This is a convenience function to allow bulk regulator configuration 327 * to be stored "static const" in files. 328 * 329 * Return: 0 on success, a negative error number on failure. 330 */ 331 int devm_regulator_bulk_get_const(struct device *dev, int num_consumers, 332 const struct regulator_bulk_data *in_consumers, 333 struct regulator_bulk_data **out_consumers) 334 { 335 *out_consumers = devm_kmemdup_array(dev, in_consumers, num_consumers, 336 sizeof(*in_consumers), GFP_KERNEL); 337 if (*out_consumers == NULL) 338 return -ENOMEM; 339 340 return devm_regulator_bulk_get(dev, num_consumers, *out_consumers); 341 } 342 EXPORT_SYMBOL_GPL(devm_regulator_bulk_get_const); 343 344 static int devm_regulator_bulk_match(struct device *dev, void *res, 345 void *data) 346 { 347 struct regulator_bulk_devres *match = res; 348 struct regulator_bulk_data *target = data; 349 350 /* 351 * We check the put uses same consumer list as the get did. 352 * We _could_ scan all entries in consumer array and check the 353 * regulators match but ATM I don't see the need. We can change this 354 * later if needed. 355 */ 356 return match->consumers == target; 357 } 358 359 /** 360 * devm_regulator_bulk_put - Resource managed regulator_bulk_put() 361 * @consumers: consumers to free 362 * 363 * Deallocate regulators allocated with devm_regulator_bulk_get(). Normally 364 * this function will not need to be called and the resource management 365 * code will ensure that the resource is freed. 366 */ 367 void devm_regulator_bulk_put(struct regulator_bulk_data *consumers) 368 { 369 int rc; 370 struct regulator *regulator = consumers[0].consumer; 371 372 rc = devres_release(regulator->dev, devm_regulator_bulk_release, 373 devm_regulator_bulk_match, consumers); 374 if (rc != 0) 375 WARN_ON(rc); 376 } 377 EXPORT_SYMBOL_GPL(devm_regulator_bulk_put); 378 379 static void devm_regulator_bulk_disable(void *res) 380 { 381 struct regulator_bulk_devres *devres = res; 382 int i; 383 384 for (i = 0; i < devres->num_consumers; i++) 385 regulator_disable(devres->consumers[i].consumer); 386 } 387 388 /** 389 * devm_regulator_bulk_get_enable - managed get'n enable multiple regulators 390 * 391 * @dev: device to supply 392 * @num_consumers: number of consumers to register 393 * @id: list of supply names or regulator IDs 394 * 395 * @return 0 on success, a negative error number on failure. 396 * 397 * This helper function allows drivers to get several regulator 398 * consumers in one operation with management, the regulators will 399 * automatically be freed when the device is unbound. If any of the 400 * regulators cannot be acquired then any regulators that were 401 * allocated will be freed before returning to the caller. 402 */ 403 int devm_regulator_bulk_get_enable(struct device *dev, int num_consumers, 404 const char * const *id) 405 { 406 struct regulator_bulk_devres *devres; 407 struct regulator_bulk_data *consumers; 408 int i, ret; 409 410 devres = devm_kmalloc_obj(dev, *devres); 411 if (!devres) 412 return -ENOMEM; 413 414 devres->consumers = devm_kzalloc_objs(dev, *consumers, num_consumers); 415 consumers = devres->consumers; 416 if (!consumers) 417 return -ENOMEM; 418 419 devres->num_consumers = num_consumers; 420 421 for (i = 0; i < num_consumers; i++) 422 consumers[i].supply = id[i]; 423 424 ret = devm_regulator_bulk_get(dev, num_consumers, consumers); 425 if (ret) 426 return ret; 427 428 for (i = 0; i < num_consumers; i++) { 429 ret = regulator_enable(consumers[i].consumer); 430 if (ret) 431 goto unwind; 432 } 433 434 ret = devm_add_action(dev, devm_regulator_bulk_disable, devres); 435 if (!ret) 436 return 0; 437 438 unwind: 439 while (--i >= 0) 440 regulator_disable(consumers[i].consumer); 441 442 devm_regulator_bulk_put(consumers); 443 444 return ret; 445 } 446 EXPORT_SYMBOL_GPL(devm_regulator_bulk_get_enable); 447 448 static void devm_rdev_release(struct device *dev, void *res) 449 { 450 regulator_unregister(*(struct regulator_dev **)res); 451 } 452 453 /** 454 * devm_regulator_register - Resource managed regulator_register() 455 * @dev: device to supply 456 * @regulator_desc: regulator to register 457 * @config: runtime configuration for regulator 458 * 459 * Called by regulator drivers to register a regulator. Returns a 460 * valid pointer to struct regulator_dev on success or an ERR_PTR() on 461 * error. The regulator will automatically be released when the device 462 * is unbound. 463 */ 464 struct regulator_dev *devm_regulator_register(struct device *dev, 465 const struct regulator_desc *regulator_desc, 466 const struct regulator_config *config) 467 { 468 struct regulator_dev **ptr, *rdev; 469 470 ptr = devres_alloc(devm_rdev_release, sizeof(*ptr), 471 GFP_KERNEL); 472 if (!ptr) 473 return ERR_PTR(-ENOMEM); 474 475 rdev = regulator_register(dev, regulator_desc, config); 476 if (!IS_ERR(rdev)) { 477 *ptr = rdev; 478 devres_add(dev, ptr); 479 } else { 480 devres_free(ptr); 481 } 482 483 return rdev; 484 } 485 EXPORT_SYMBOL_GPL(devm_regulator_register); 486 487 struct regulator_supply_alias_match { 488 struct device *dev; 489 const char *id; 490 }; 491 492 static int devm_regulator_match_supply_alias(struct device *dev, void *res, 493 void *data) 494 { 495 struct regulator_supply_alias_match *match = res; 496 struct regulator_supply_alias_match *target = data; 497 498 return match->dev == target->dev && strcmp(match->id, target->id) == 0; 499 } 500 501 static void devm_regulator_destroy_supply_alias(struct device *dev, void *res) 502 { 503 struct regulator_supply_alias_match *match = res; 504 505 regulator_unregister_supply_alias(match->dev, match->id); 506 } 507 508 /** 509 * devm_regulator_register_supply_alias - Resource managed 510 * regulator_register_supply_alias() 511 * 512 * @dev: device to supply 513 * @id: supply name or regulator ID 514 * @alias_dev: device that should be used to lookup the supply 515 * @alias_id: supply name or regulator ID that should be used to lookup the 516 * supply 517 * 518 * The supply alias will automatically be unregistered when the source 519 * device is unbound. 520 */ 521 int devm_regulator_register_supply_alias(struct device *dev, const char *id, 522 struct device *alias_dev, 523 const char *alias_id) 524 { 525 struct regulator_supply_alias_match *match; 526 int ret; 527 528 match = devres_alloc(devm_regulator_destroy_supply_alias, 529 sizeof(struct regulator_supply_alias_match), 530 GFP_KERNEL); 531 if (!match) 532 return -ENOMEM; 533 534 match->dev = dev; 535 match->id = id; 536 537 ret = regulator_register_supply_alias(dev, id, alias_dev, alias_id); 538 if (ret < 0) { 539 devres_free(match); 540 return ret; 541 } 542 543 devres_add(dev, match); 544 545 return 0; 546 } 547 EXPORT_SYMBOL_GPL(devm_regulator_register_supply_alias); 548 549 static void devm_regulator_unregister_supply_alias(struct device *dev, 550 const char *id) 551 { 552 struct regulator_supply_alias_match match; 553 int rc; 554 555 match.dev = dev; 556 match.id = id; 557 558 rc = devres_release(dev, devm_regulator_destroy_supply_alias, 559 devm_regulator_match_supply_alias, &match); 560 if (rc != 0) 561 WARN_ON(rc); 562 } 563 564 /** 565 * devm_regulator_bulk_register_supply_alias - Managed register 566 * multiple aliases 567 * 568 * @dev: device to supply 569 * @id: list of supply names or regulator IDs 570 * @alias_dev: device that should be used to lookup the supply 571 * @alias_id: list of supply names or regulator IDs that should be used to 572 * lookup the supply 573 * @num_id: number of aliases to register 574 * 575 * @return 0 on success, a negative error number on failure. 576 * 577 * This helper function allows drivers to register several supply 578 * aliases in one operation, the aliases will be automatically 579 * unregisters when the source device is unbound. If any of the 580 * aliases cannot be registered any aliases that were registered 581 * will be removed before returning to the caller. 582 */ 583 int devm_regulator_bulk_register_supply_alias(struct device *dev, 584 const char *const *id, 585 struct device *alias_dev, 586 const char *const *alias_id, 587 int num_id) 588 { 589 int i; 590 int ret; 591 592 for (i = 0; i < num_id; ++i) { 593 ret = devm_regulator_register_supply_alias(dev, id[i], 594 alias_dev, 595 alias_id[i]); 596 if (ret < 0) 597 goto err; 598 } 599 600 return 0; 601 602 err: 603 dev_err(dev, 604 "Failed to create supply alias %s,%s -> %s,%s\n", 605 id[i], dev_name(dev), alias_id[i], dev_name(alias_dev)); 606 607 while (--i >= 0) 608 devm_regulator_unregister_supply_alias(dev, id[i]); 609 610 return ret; 611 } 612 EXPORT_SYMBOL_GPL(devm_regulator_bulk_register_supply_alias); 613 614 struct regulator_notifier_match { 615 struct regulator *regulator; 616 struct notifier_block *nb; 617 }; 618 619 static int devm_regulator_match_notifier(struct device *dev, void *res, 620 void *data) 621 { 622 struct regulator_notifier_match *match = res; 623 struct regulator_notifier_match *target = data; 624 625 return match->regulator == target->regulator && match->nb == target->nb; 626 } 627 628 static void devm_regulator_destroy_notifier(struct device *dev, void *res) 629 { 630 struct regulator_notifier_match *match = res; 631 632 regulator_unregister_notifier(match->regulator, match->nb); 633 } 634 635 /** 636 * devm_regulator_register_notifier - Resource managed 637 * regulator_register_notifier 638 * 639 * @regulator: regulator source 640 * @nb: notifier block 641 * 642 * The notifier will be registers under the consumer device and be 643 * automatically be unregistered when the source device is unbound. 644 */ 645 int devm_regulator_register_notifier(struct regulator *regulator, 646 struct notifier_block *nb) 647 { 648 struct regulator_notifier_match *match; 649 int ret; 650 651 match = devres_alloc(devm_regulator_destroy_notifier, 652 sizeof(struct regulator_notifier_match), 653 GFP_KERNEL); 654 if (!match) 655 return -ENOMEM; 656 657 match->regulator = regulator; 658 match->nb = nb; 659 660 ret = regulator_register_notifier(regulator, nb); 661 if (ret < 0) { 662 devres_free(match); 663 return ret; 664 } 665 666 devres_add(regulator->dev, match); 667 668 return 0; 669 } 670 EXPORT_SYMBOL_GPL(devm_regulator_register_notifier); 671 672 /** 673 * devm_regulator_unregister_notifier - Resource managed 674 * regulator_unregister_notifier() 675 * 676 * @regulator: regulator source 677 * @nb: notifier block 678 * 679 * Unregister a notifier registered with devm_regulator_register_notifier(). 680 * Normally this function will not need to be called and the resource 681 * management code will ensure that the resource is freed. 682 */ 683 void devm_regulator_unregister_notifier(struct regulator *regulator, 684 struct notifier_block *nb) 685 { 686 struct regulator_notifier_match match; 687 int rc; 688 689 match.regulator = regulator; 690 match.nb = nb; 691 692 rc = devres_release(regulator->dev, devm_regulator_destroy_notifier, 693 devm_regulator_match_notifier, &match); 694 if (rc != 0) 695 WARN_ON(rc); 696 } 697 EXPORT_SYMBOL_GPL(devm_regulator_unregister_notifier); 698 699 static void regulator_irq_helper_drop(void *res) 700 { 701 regulator_irq_helper_cancel(&res); 702 } 703 704 /** 705 * devm_regulator_irq_helper - resource managed registration of IRQ based 706 * regulator event/error notifier 707 * 708 * @dev: device to which lifetime the helper's lifetime is 709 * bound. 710 * @d: IRQ helper descriptor. 711 * @irq: IRQ used to inform events/errors to be notified. 712 * @irq_flags: Extra IRQ flags to be OR'ed with the default 713 * IRQF_ONESHOT when requesting the (threaded) irq. 714 * @common_errs: Errors which can be flagged by this IRQ for all rdevs. 715 * When IRQ is re-enabled these errors will be cleared 716 * from all associated regulators 717 * @per_rdev_errs: Optional error flag array describing errors specific 718 * for only some of the regulators. These errors will be 719 * or'ed with common errors. If this is given the array 720 * should contain rdev_amount flags. Can be set to NULL 721 * if there is no regulator specific error flags for this 722 * IRQ. 723 * @rdev: Array of pointers to regulators associated with this 724 * IRQ. 725 * @rdev_amount: Amount of regulators associated with this IRQ. 726 * 727 * Return: handle to irq_helper or an ERR_PTR() encoded negative error number. 728 */ 729 void *devm_regulator_irq_helper(struct device *dev, 730 const struct regulator_irq_desc *d, int irq, 731 int irq_flags, int common_errs, 732 int *per_rdev_errs, 733 struct regulator_dev **rdev, int rdev_amount) 734 { 735 void *ptr; 736 int ret; 737 738 ptr = regulator_irq_helper(dev, d, irq, irq_flags, common_errs, 739 per_rdev_errs, rdev, rdev_amount); 740 if (IS_ERR(ptr)) 741 return ptr; 742 743 ret = devm_add_action_or_reset(dev, regulator_irq_helper_drop, ptr); 744 if (ret) 745 return ERR_PTR(ret); 746 747 return ptr; 748 } 749 EXPORT_SYMBOL_GPL(devm_regulator_irq_helper); 750 751 #if IS_ENABLED(CONFIG_OF) 752 static struct regulator *_devm_of_regulator_get(struct device *dev, struct device_node *node, 753 const char *id, enum regulator_get_type get_type) 754 { 755 struct regulator **ptr, *regulator; 756 757 ptr = devres_alloc(devm_regulator_release, sizeof(*ptr), GFP_KERNEL); 758 if (!ptr) 759 return ERR_PTR(-ENOMEM); 760 761 regulator = _of_regulator_get(dev, node, id, get_type); 762 if (!IS_ERR(regulator)) { 763 *ptr = regulator; 764 devres_add(dev, ptr); 765 } else { 766 devres_free(ptr); 767 } 768 769 return regulator; 770 } 771 772 /** 773 * devm_of_regulator_get - Resource managed of_regulator_get() 774 * @dev: device used for dev_printk() messages and resource lifetime management 775 * @node: device node for regulator "consumer" 776 * @id: supply name or regulator ID. 777 * 778 * Managed of_regulator_get(). Regulators returned from this 779 * function are automatically regulator_put() on driver detach. See 780 * of_regulator_get() for more information. 781 */ 782 struct regulator *devm_of_regulator_get(struct device *dev, struct device_node *node, 783 const char *id) 784 { 785 return _devm_of_regulator_get(dev, node, id, NORMAL_GET); 786 } 787 EXPORT_SYMBOL_GPL(devm_of_regulator_get); 788 789 /** 790 * devm_of_regulator_get_optional - Resource managed of_regulator_get_optional() 791 * @dev: device used for dev_printk() messages and resource lifetime management 792 * @node: device node for regulator "consumer" 793 * @id: supply name or regulator ID. 794 * 795 * Managed regulator_get_optional(). Regulators returned from this 796 * function are automatically regulator_put() on driver detach. See 797 * of_regulator_get_optional() for more information. 798 */ 799 struct regulator *devm_of_regulator_get_optional(struct device *dev, struct device_node *node, 800 const char *id) 801 { 802 return _devm_of_regulator_get(dev, node, id, OPTIONAL_GET); 803 } 804 EXPORT_SYMBOL_GPL(devm_of_regulator_get_optional); 805 #endif 806