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 int 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 int 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(dev, sizeof(*devres), GFP_KERNEL); 411 if (!devres) 412 return -ENOMEM; 413 414 devres->consumers = devm_kcalloc(dev, num_consumers, sizeof(*consumers), 415 GFP_KERNEL); 416 consumers = devres->consumers; 417 if (!consumers) 418 return -ENOMEM; 419 420 devres->num_consumers = num_consumers; 421 422 for (i = 0; i < num_consumers; i++) 423 consumers[i].supply = id[i]; 424 425 ret = devm_regulator_bulk_get(dev, num_consumers, consumers); 426 if (ret) 427 return ret; 428 429 for (i = 0; i < num_consumers; i++) { 430 ret = regulator_enable(consumers[i].consumer); 431 if (ret) 432 goto unwind; 433 } 434 435 ret = devm_add_action(dev, devm_regulator_bulk_disable, devres); 436 if (!ret) 437 return 0; 438 439 unwind: 440 while (--i >= 0) 441 regulator_disable(consumers[i].consumer); 442 443 devm_regulator_bulk_put(consumers); 444 445 return ret; 446 } 447 EXPORT_SYMBOL_GPL(devm_regulator_bulk_get_enable); 448 449 static void devm_rdev_release(struct device *dev, void *res) 450 { 451 regulator_unregister(*(struct regulator_dev **)res); 452 } 453 454 /** 455 * devm_regulator_register - Resource managed regulator_register() 456 * @dev: device to supply 457 * @regulator_desc: regulator to register 458 * @config: runtime configuration for regulator 459 * 460 * Called by regulator drivers to register a regulator. Returns a 461 * valid pointer to struct regulator_dev on success or an ERR_PTR() on 462 * error. The regulator will automatically be released when the device 463 * is unbound. 464 */ 465 struct regulator_dev *devm_regulator_register(struct device *dev, 466 const struct regulator_desc *regulator_desc, 467 const struct regulator_config *config) 468 { 469 struct regulator_dev **ptr, *rdev; 470 471 ptr = devres_alloc(devm_rdev_release, sizeof(*ptr), 472 GFP_KERNEL); 473 if (!ptr) 474 return ERR_PTR(-ENOMEM); 475 476 rdev = regulator_register(dev, regulator_desc, config); 477 if (!IS_ERR(rdev)) { 478 *ptr = rdev; 479 devres_add(dev, ptr); 480 } else { 481 devres_free(ptr); 482 } 483 484 return rdev; 485 } 486 EXPORT_SYMBOL_GPL(devm_regulator_register); 487 488 struct regulator_supply_alias_match { 489 struct device *dev; 490 const char *id; 491 }; 492 493 static int devm_regulator_match_supply_alias(struct device *dev, void *res, 494 void *data) 495 { 496 struct regulator_supply_alias_match *match = res; 497 struct regulator_supply_alias_match *target = data; 498 499 return match->dev == target->dev && strcmp(match->id, target->id) == 0; 500 } 501 502 static void devm_regulator_destroy_supply_alias(struct device *dev, void *res) 503 { 504 struct regulator_supply_alias_match *match = res; 505 506 regulator_unregister_supply_alias(match->dev, match->id); 507 } 508 509 /** 510 * devm_regulator_register_supply_alias - Resource managed 511 * regulator_register_supply_alias() 512 * 513 * @dev: device to supply 514 * @id: supply name or regulator ID 515 * @alias_dev: device that should be used to lookup the supply 516 * @alias_id: supply name or regulator ID that should be used to lookup the 517 * supply 518 * 519 * The supply alias will automatically be unregistered when the source 520 * device is unbound. 521 */ 522 int devm_regulator_register_supply_alias(struct device *dev, const char *id, 523 struct device *alias_dev, 524 const char *alias_id) 525 { 526 struct regulator_supply_alias_match *match; 527 int ret; 528 529 match = devres_alloc(devm_regulator_destroy_supply_alias, 530 sizeof(struct regulator_supply_alias_match), 531 GFP_KERNEL); 532 if (!match) 533 return -ENOMEM; 534 535 match->dev = dev; 536 match->id = id; 537 538 ret = regulator_register_supply_alias(dev, id, alias_dev, alias_id); 539 if (ret < 0) { 540 devres_free(match); 541 return ret; 542 } 543 544 devres_add(dev, match); 545 546 return 0; 547 } 548 EXPORT_SYMBOL_GPL(devm_regulator_register_supply_alias); 549 550 static void devm_regulator_unregister_supply_alias(struct device *dev, 551 const char *id) 552 { 553 struct regulator_supply_alias_match match; 554 int rc; 555 556 match.dev = dev; 557 match.id = id; 558 559 rc = devres_release(dev, devm_regulator_destroy_supply_alias, 560 devm_regulator_match_supply_alias, &match); 561 if (rc != 0) 562 WARN_ON(rc); 563 } 564 565 /** 566 * devm_regulator_bulk_register_supply_alias - Managed register 567 * multiple aliases 568 * 569 * @dev: device to supply 570 * @id: list of supply names or regulator IDs 571 * @alias_dev: device that should be used to lookup the supply 572 * @alias_id: list of supply names or regulator IDs that should be used to 573 * lookup the supply 574 * @num_id: number of aliases to register 575 * 576 * @return 0 on success, a negative error number on failure. 577 * 578 * This helper function allows drivers to register several supply 579 * aliases in one operation, the aliases will be automatically 580 * unregisters when the source device is unbound. If any of the 581 * aliases cannot be registered any aliases that were registered 582 * will be removed before returning to the caller. 583 */ 584 int devm_regulator_bulk_register_supply_alias(struct device *dev, 585 const char *const *id, 586 struct device *alias_dev, 587 const char *const *alias_id, 588 int num_id) 589 { 590 int i; 591 int ret; 592 593 for (i = 0; i < num_id; ++i) { 594 ret = devm_regulator_register_supply_alias(dev, id[i], 595 alias_dev, 596 alias_id[i]); 597 if (ret < 0) 598 goto err; 599 } 600 601 return 0; 602 603 err: 604 dev_err(dev, 605 "Failed to create supply alias %s,%s -> %s,%s\n", 606 id[i], dev_name(dev), alias_id[i], dev_name(alias_dev)); 607 608 while (--i >= 0) 609 devm_regulator_unregister_supply_alias(dev, id[i]); 610 611 return ret; 612 } 613 EXPORT_SYMBOL_GPL(devm_regulator_bulk_register_supply_alias); 614 615 struct regulator_notifier_match { 616 struct regulator *regulator; 617 struct notifier_block *nb; 618 }; 619 620 static int devm_regulator_match_notifier(struct device *dev, void *res, 621 void *data) 622 { 623 struct regulator_notifier_match *match = res; 624 struct regulator_notifier_match *target = data; 625 626 return match->regulator == target->regulator && match->nb == target->nb; 627 } 628 629 static void devm_regulator_destroy_notifier(struct device *dev, void *res) 630 { 631 struct regulator_notifier_match *match = res; 632 633 regulator_unregister_notifier(match->regulator, match->nb); 634 } 635 636 /** 637 * devm_regulator_register_notifier - Resource managed 638 * regulator_register_notifier 639 * 640 * @regulator: regulator source 641 * @nb: notifier block 642 * 643 * The notifier will be registers under the consumer device and be 644 * automatically be unregistered when the source device is unbound. 645 */ 646 int devm_regulator_register_notifier(struct regulator *regulator, 647 struct notifier_block *nb) 648 { 649 struct regulator_notifier_match *match; 650 int ret; 651 652 match = devres_alloc(devm_regulator_destroy_notifier, 653 sizeof(struct regulator_notifier_match), 654 GFP_KERNEL); 655 if (!match) 656 return -ENOMEM; 657 658 match->regulator = regulator; 659 match->nb = nb; 660 661 ret = regulator_register_notifier(regulator, nb); 662 if (ret < 0) { 663 devres_free(match); 664 return ret; 665 } 666 667 devres_add(regulator->dev, match); 668 669 return 0; 670 } 671 EXPORT_SYMBOL_GPL(devm_regulator_register_notifier); 672 673 /** 674 * devm_regulator_unregister_notifier - Resource managed 675 * regulator_unregister_notifier() 676 * 677 * @regulator: regulator source 678 * @nb: notifier block 679 * 680 * Unregister a notifier registered with devm_regulator_register_notifier(). 681 * Normally this function will not need to be called and the resource 682 * management code will ensure that the resource is freed. 683 */ 684 void devm_regulator_unregister_notifier(struct regulator *regulator, 685 struct notifier_block *nb) 686 { 687 struct regulator_notifier_match match; 688 int rc; 689 690 match.regulator = regulator; 691 match.nb = nb; 692 693 rc = devres_release(regulator->dev, devm_regulator_destroy_notifier, 694 devm_regulator_match_notifier, &match); 695 if (rc != 0) 696 WARN_ON(rc); 697 } 698 EXPORT_SYMBOL_GPL(devm_regulator_unregister_notifier); 699 700 static void regulator_irq_helper_drop(void *res) 701 { 702 regulator_irq_helper_cancel(&res); 703 } 704 705 /** 706 * devm_regulator_irq_helper - resource managed registration of IRQ based 707 * regulator event/error notifier 708 * 709 * @dev: device to which lifetime the helper's lifetime is 710 * bound. 711 * @d: IRQ helper descriptor. 712 * @irq: IRQ used to inform events/errors to be notified. 713 * @irq_flags: Extra IRQ flags to be OR'ed with the default 714 * IRQF_ONESHOT when requesting the (threaded) irq. 715 * @common_errs: Errors which can be flagged by this IRQ for all rdevs. 716 * When IRQ is re-enabled these errors will be cleared 717 * from all associated regulators 718 * @per_rdev_errs: Optional error flag array describing errors specific 719 * for only some of the regulators. These errors will be 720 * or'ed with common errors. If this is given the array 721 * should contain rdev_amount flags. Can be set to NULL 722 * if there is no regulator specific error flags for this 723 * IRQ. 724 * @rdev: Array of pointers to regulators associated with this 725 * IRQ. 726 * @rdev_amount: Amount of regulators associated with this IRQ. 727 * 728 * Return: handle to irq_helper or an ERR_PTR() encoded negative error number. 729 */ 730 void *devm_regulator_irq_helper(struct device *dev, 731 const struct regulator_irq_desc *d, int irq, 732 int irq_flags, int common_errs, 733 int *per_rdev_errs, 734 struct regulator_dev **rdev, int rdev_amount) 735 { 736 void *ptr; 737 int ret; 738 739 ptr = regulator_irq_helper(dev, d, irq, irq_flags, common_errs, 740 per_rdev_errs, rdev, rdev_amount); 741 if (IS_ERR(ptr)) 742 return ptr; 743 744 ret = devm_add_action_or_reset(dev, regulator_irq_helper_drop, ptr); 745 if (ret) 746 return ERR_PTR(ret); 747 748 return ptr; 749 } 750 EXPORT_SYMBOL_GPL(devm_regulator_irq_helper); 751 752 #if IS_ENABLED(CONFIG_OF) 753 static struct regulator *_devm_of_regulator_get(struct device *dev, struct device_node *node, 754 const char *id, int get_type) 755 { 756 struct regulator **ptr, *regulator; 757 758 ptr = devres_alloc(devm_regulator_release, sizeof(*ptr), GFP_KERNEL); 759 if (!ptr) 760 return ERR_PTR(-ENOMEM); 761 762 regulator = _of_regulator_get(dev, node, id, get_type); 763 if (!IS_ERR(regulator)) { 764 *ptr = regulator; 765 devres_add(dev, ptr); 766 } else { 767 devres_free(ptr); 768 } 769 770 return regulator; 771 } 772 773 /** 774 * devm_of_regulator_get - Resource managed of_regulator_get() 775 * @dev: device used for dev_printk() messages and resource lifetime management 776 * @node: device node for regulator "consumer" 777 * @id: supply name or regulator ID. 778 * 779 * Managed of_regulator_get(). Regulators returned from this 780 * function are automatically regulator_put() on driver detach. See 781 * of_regulator_get() for more information. 782 */ 783 struct regulator *devm_of_regulator_get(struct device *dev, struct device_node *node, 784 const char *id) 785 { 786 return _devm_of_regulator_get(dev, node, id, NORMAL_GET); 787 } 788 EXPORT_SYMBOL_GPL(devm_of_regulator_get); 789 790 /** 791 * devm_of_regulator_get_optional - Resource managed of_regulator_get_optional() 792 * @dev: device used for dev_printk() messages and resource lifetime management 793 * @node: device node for regulator "consumer" 794 * @id: supply name or regulator ID. 795 * 796 * Managed regulator_get_optional(). Regulators returned from this 797 * function are automatically regulator_put() on driver detach. See 798 * of_regulator_get_optional() for more information. 799 */ 800 struct regulator *devm_of_regulator_get_optional(struct device *dev, struct device_node *node, 801 const char *id) 802 { 803 return _devm_of_regulator_get(dev, node, id, OPTIONAL_GET); 804 } 805 EXPORT_SYMBOL_GPL(devm_of_regulator_get_optional); 806 #endif 807