1 /* 2 * phy-core.c -- Generic Phy framework. 3 * 4 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com 5 * 6 * Author: Kishon Vijay Abraham I <kishon@ti.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the 10 * Free Software Foundation; either version 2 of the License, or (at your 11 * option) any later version. 12 */ 13 14 #include <linux/kernel.h> 15 #include <linux/export.h> 16 #include <linux/module.h> 17 #include <linux/err.h> 18 #include <linux/device.h> 19 #include <linux/slab.h> 20 #include <linux/of.h> 21 #include <linux/phy/phy.h> 22 #include <linux/idr.h> 23 #include <linux/pm_runtime.h> 24 #include <linux/regulator/consumer.h> 25 26 static struct class *phy_class; 27 static DEFINE_MUTEX(phy_provider_mutex); 28 static LIST_HEAD(phy_provider_list); 29 static LIST_HEAD(phys); 30 static DEFINE_IDA(phy_ida); 31 32 static void devm_phy_release(struct device *dev, void *res) 33 { 34 struct phy *phy = *(struct phy **)res; 35 36 phy_put(phy); 37 } 38 39 static void devm_phy_provider_release(struct device *dev, void *res) 40 { 41 struct phy_provider *phy_provider = *(struct phy_provider **)res; 42 43 of_phy_provider_unregister(phy_provider); 44 } 45 46 static void devm_phy_consume(struct device *dev, void *res) 47 { 48 struct phy *phy = *(struct phy **)res; 49 50 phy_destroy(phy); 51 } 52 53 static int devm_phy_match(struct device *dev, void *res, void *match_data) 54 { 55 struct phy **phy = res; 56 57 return *phy == match_data; 58 } 59 60 /** 61 * phy_create_lookup() - allocate and register PHY/device association 62 * @phy: the phy of the association 63 * @con_id: connection ID string on device 64 * @dev_id: the device of the association 65 * 66 * Creates and registers phy_lookup entry. 67 */ 68 int phy_create_lookup(struct phy *phy, const char *con_id, const char *dev_id) 69 { 70 struct phy_lookup *pl; 71 72 if (!phy || !dev_id || !con_id) 73 return -EINVAL; 74 75 pl = kzalloc(sizeof(*pl), GFP_KERNEL); 76 if (!pl) 77 return -ENOMEM; 78 79 pl->dev_id = dev_id; 80 pl->con_id = con_id; 81 pl->phy = phy; 82 83 mutex_lock(&phy_provider_mutex); 84 list_add_tail(&pl->node, &phys); 85 mutex_unlock(&phy_provider_mutex); 86 87 return 0; 88 } 89 EXPORT_SYMBOL_GPL(phy_create_lookup); 90 91 /** 92 * phy_remove_lookup() - find and remove PHY/device association 93 * @phy: the phy of the association 94 * @con_id: connection ID string on device 95 * @dev_id: the device of the association 96 * 97 * Finds and unregisters phy_lookup entry that was created with 98 * phy_create_lookup(). 99 */ 100 void phy_remove_lookup(struct phy *phy, const char *con_id, const char *dev_id) 101 { 102 struct phy_lookup *pl; 103 104 if (!phy || !dev_id || !con_id) 105 return; 106 107 mutex_lock(&phy_provider_mutex); 108 list_for_each_entry(pl, &phys, node) 109 if (pl->phy == phy && !strcmp(pl->dev_id, dev_id) && 110 !strcmp(pl->con_id, con_id)) { 111 list_del(&pl->node); 112 kfree(pl); 113 break; 114 } 115 mutex_unlock(&phy_provider_mutex); 116 } 117 EXPORT_SYMBOL_GPL(phy_remove_lookup); 118 119 static struct phy *phy_find(struct device *dev, const char *con_id) 120 { 121 const char *dev_id = dev_name(dev); 122 struct phy_lookup *p, *pl = NULL; 123 124 mutex_lock(&phy_provider_mutex); 125 list_for_each_entry(p, &phys, node) 126 if (!strcmp(p->dev_id, dev_id) && !strcmp(p->con_id, con_id)) { 127 pl = p; 128 break; 129 } 130 mutex_unlock(&phy_provider_mutex); 131 132 return pl ? pl->phy : ERR_PTR(-ENODEV); 133 } 134 135 static struct phy_provider *of_phy_provider_lookup(struct device_node *node) 136 { 137 struct phy_provider *phy_provider; 138 struct device_node *child; 139 140 list_for_each_entry(phy_provider, &phy_provider_list, list) { 141 if (phy_provider->dev->of_node == node) 142 return phy_provider; 143 144 for_each_child_of_node(phy_provider->children, child) 145 if (child == node) 146 return phy_provider; 147 } 148 149 return ERR_PTR(-EPROBE_DEFER); 150 } 151 152 int phy_pm_runtime_get(struct phy *phy) 153 { 154 int ret; 155 156 if (!pm_runtime_enabled(&phy->dev)) 157 return -ENOTSUPP; 158 159 ret = pm_runtime_get(&phy->dev); 160 if (ret < 0 && ret != -EINPROGRESS) 161 pm_runtime_put_noidle(&phy->dev); 162 163 return ret; 164 } 165 EXPORT_SYMBOL_GPL(phy_pm_runtime_get); 166 167 int phy_pm_runtime_get_sync(struct phy *phy) 168 { 169 int ret; 170 171 if (!pm_runtime_enabled(&phy->dev)) 172 return -ENOTSUPP; 173 174 ret = pm_runtime_get_sync(&phy->dev); 175 if (ret < 0) 176 pm_runtime_put_sync(&phy->dev); 177 178 return ret; 179 } 180 EXPORT_SYMBOL_GPL(phy_pm_runtime_get_sync); 181 182 int phy_pm_runtime_put(struct phy *phy) 183 { 184 if (!pm_runtime_enabled(&phy->dev)) 185 return -ENOTSUPP; 186 187 return pm_runtime_put(&phy->dev); 188 } 189 EXPORT_SYMBOL_GPL(phy_pm_runtime_put); 190 191 int phy_pm_runtime_put_sync(struct phy *phy) 192 { 193 if (!pm_runtime_enabled(&phy->dev)) 194 return -ENOTSUPP; 195 196 return pm_runtime_put_sync(&phy->dev); 197 } 198 EXPORT_SYMBOL_GPL(phy_pm_runtime_put_sync); 199 200 void phy_pm_runtime_allow(struct phy *phy) 201 { 202 if (!pm_runtime_enabled(&phy->dev)) 203 return; 204 205 pm_runtime_allow(&phy->dev); 206 } 207 EXPORT_SYMBOL_GPL(phy_pm_runtime_allow); 208 209 void phy_pm_runtime_forbid(struct phy *phy) 210 { 211 if (!pm_runtime_enabled(&phy->dev)) 212 return; 213 214 pm_runtime_forbid(&phy->dev); 215 } 216 EXPORT_SYMBOL_GPL(phy_pm_runtime_forbid); 217 218 int phy_init(struct phy *phy) 219 { 220 int ret; 221 222 if (!phy) 223 return 0; 224 225 ret = phy_pm_runtime_get_sync(phy); 226 if (ret < 0 && ret != -ENOTSUPP) 227 return ret; 228 ret = 0; /* Override possible ret == -ENOTSUPP */ 229 230 mutex_lock(&phy->mutex); 231 if (phy->init_count == 0 && phy->ops->init) { 232 ret = phy->ops->init(phy); 233 if (ret < 0) { 234 dev_err(&phy->dev, "phy init failed --> %d\n", ret); 235 goto out; 236 } 237 } 238 ++phy->init_count; 239 240 out: 241 mutex_unlock(&phy->mutex); 242 phy_pm_runtime_put(phy); 243 return ret; 244 } 245 EXPORT_SYMBOL_GPL(phy_init); 246 247 int phy_exit(struct phy *phy) 248 { 249 int ret; 250 251 if (!phy) 252 return 0; 253 254 ret = phy_pm_runtime_get_sync(phy); 255 if (ret < 0 && ret != -ENOTSUPP) 256 return ret; 257 ret = 0; /* Override possible ret == -ENOTSUPP */ 258 259 mutex_lock(&phy->mutex); 260 if (phy->init_count == 1 && phy->ops->exit) { 261 ret = phy->ops->exit(phy); 262 if (ret < 0) { 263 dev_err(&phy->dev, "phy exit failed --> %d\n", ret); 264 goto out; 265 } 266 } 267 --phy->init_count; 268 269 out: 270 mutex_unlock(&phy->mutex); 271 phy_pm_runtime_put(phy); 272 return ret; 273 } 274 EXPORT_SYMBOL_GPL(phy_exit); 275 276 int phy_power_on(struct phy *phy) 277 { 278 int ret = 0; 279 280 if (!phy) 281 goto out; 282 283 if (phy->pwr) { 284 ret = regulator_enable(phy->pwr); 285 if (ret) 286 goto out; 287 } 288 289 ret = phy_pm_runtime_get_sync(phy); 290 if (ret < 0 && ret != -ENOTSUPP) 291 goto err_pm_sync; 292 293 ret = 0; /* Override possible ret == -ENOTSUPP */ 294 295 mutex_lock(&phy->mutex); 296 if (phy->power_count == 0 && phy->ops->power_on) { 297 ret = phy->ops->power_on(phy); 298 if (ret < 0) { 299 dev_err(&phy->dev, "phy poweron failed --> %d\n", ret); 300 goto err_pwr_on; 301 } 302 } 303 ++phy->power_count; 304 mutex_unlock(&phy->mutex); 305 return 0; 306 307 err_pwr_on: 308 mutex_unlock(&phy->mutex); 309 phy_pm_runtime_put_sync(phy); 310 err_pm_sync: 311 if (phy->pwr) 312 regulator_disable(phy->pwr); 313 out: 314 return ret; 315 } 316 EXPORT_SYMBOL_GPL(phy_power_on); 317 318 int phy_power_off(struct phy *phy) 319 { 320 int ret; 321 322 if (!phy) 323 return 0; 324 325 mutex_lock(&phy->mutex); 326 if (phy->power_count == 1 && phy->ops->power_off) { 327 ret = phy->ops->power_off(phy); 328 if (ret < 0) { 329 dev_err(&phy->dev, "phy poweroff failed --> %d\n", ret); 330 mutex_unlock(&phy->mutex); 331 return ret; 332 } 333 } 334 --phy->power_count; 335 mutex_unlock(&phy->mutex); 336 phy_pm_runtime_put(phy); 337 338 if (phy->pwr) 339 regulator_disable(phy->pwr); 340 341 return 0; 342 } 343 EXPORT_SYMBOL_GPL(phy_power_off); 344 345 int phy_set_mode(struct phy *phy, enum phy_mode mode) 346 { 347 int ret; 348 349 if (!phy || !phy->ops->set_mode) 350 return 0; 351 352 mutex_lock(&phy->mutex); 353 ret = phy->ops->set_mode(phy, mode); 354 mutex_unlock(&phy->mutex); 355 356 return ret; 357 } 358 EXPORT_SYMBOL_GPL(phy_set_mode); 359 360 /** 361 * _of_phy_get() - lookup and obtain a reference to a phy by phandle 362 * @np: device_node for which to get the phy 363 * @index: the index of the phy 364 * 365 * Returns the phy associated with the given phandle value, 366 * after getting a refcount to it or -ENODEV if there is no such phy or 367 * -EPROBE_DEFER if there is a phandle to the phy, but the device is 368 * not yet loaded. This function uses of_xlate call back function provided 369 * while registering the phy_provider to find the phy instance. 370 */ 371 static struct phy *_of_phy_get(struct device_node *np, int index) 372 { 373 int ret; 374 struct phy_provider *phy_provider; 375 struct phy *phy = NULL; 376 struct of_phandle_args args; 377 378 ret = of_parse_phandle_with_args(np, "phys", "#phy-cells", 379 index, &args); 380 if (ret) 381 return ERR_PTR(-ENODEV); 382 383 mutex_lock(&phy_provider_mutex); 384 phy_provider = of_phy_provider_lookup(args.np); 385 if (IS_ERR(phy_provider) || !try_module_get(phy_provider->owner)) { 386 phy = ERR_PTR(-EPROBE_DEFER); 387 goto out_unlock; 388 } 389 390 if (!of_device_is_available(args.np)) { 391 dev_warn(phy_provider->dev, "Requested PHY is disabled\n"); 392 phy = ERR_PTR(-ENODEV); 393 goto out_put_module; 394 } 395 396 phy = phy_provider->of_xlate(phy_provider->dev, &args); 397 398 out_put_module: 399 module_put(phy_provider->owner); 400 401 out_unlock: 402 mutex_unlock(&phy_provider_mutex); 403 of_node_put(args.np); 404 405 return phy; 406 } 407 408 /** 409 * of_phy_get() - lookup and obtain a reference to a phy using a device_node. 410 * @np: device_node for which to get the phy 411 * @con_id: name of the phy from device's point of view 412 * 413 * Returns the phy driver, after getting a refcount to it; or 414 * -ENODEV if there is no such phy. The caller is responsible for 415 * calling phy_put() to release that count. 416 */ 417 struct phy *of_phy_get(struct device_node *np, const char *con_id) 418 { 419 struct phy *phy = NULL; 420 int index = 0; 421 422 if (con_id) 423 index = of_property_match_string(np, "phy-names", con_id); 424 425 phy = _of_phy_get(np, index); 426 if (IS_ERR(phy)) 427 return phy; 428 429 if (!try_module_get(phy->ops->owner)) 430 return ERR_PTR(-EPROBE_DEFER); 431 432 get_device(&phy->dev); 433 434 return phy; 435 } 436 EXPORT_SYMBOL_GPL(of_phy_get); 437 438 /** 439 * phy_put() - release the PHY 440 * @phy: the phy returned by phy_get() 441 * 442 * Releases a refcount the caller received from phy_get(). 443 */ 444 void phy_put(struct phy *phy) 445 { 446 if (!phy || IS_ERR(phy)) 447 return; 448 449 module_put(phy->ops->owner); 450 put_device(&phy->dev); 451 } 452 EXPORT_SYMBOL_GPL(phy_put); 453 454 /** 455 * devm_phy_put() - release the PHY 456 * @dev: device that wants to release this phy 457 * @phy: the phy returned by devm_phy_get() 458 * 459 * destroys the devres associated with this phy and invokes phy_put 460 * to release the phy. 461 */ 462 void devm_phy_put(struct device *dev, struct phy *phy) 463 { 464 int r; 465 466 if (!phy) 467 return; 468 469 r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy); 470 dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n"); 471 } 472 EXPORT_SYMBOL_GPL(devm_phy_put); 473 474 /** 475 * of_phy_simple_xlate() - returns the phy instance from phy provider 476 * @dev: the PHY provider device 477 * @args: of_phandle_args (not used here) 478 * 479 * Intended to be used by phy provider for the common case where #phy-cells is 480 * 0. For other cases where #phy-cells is greater than '0', the phy provider 481 * should provide a custom of_xlate function that reads the *args* and returns 482 * the appropriate phy. 483 */ 484 struct phy *of_phy_simple_xlate(struct device *dev, struct of_phandle_args 485 *args) 486 { 487 struct phy *phy; 488 struct class_dev_iter iter; 489 490 class_dev_iter_init(&iter, phy_class, NULL, NULL); 491 while ((dev = class_dev_iter_next(&iter))) { 492 phy = to_phy(dev); 493 if (args->np != phy->dev.of_node) 494 continue; 495 496 class_dev_iter_exit(&iter); 497 return phy; 498 } 499 500 class_dev_iter_exit(&iter); 501 return ERR_PTR(-ENODEV); 502 } 503 EXPORT_SYMBOL_GPL(of_phy_simple_xlate); 504 505 /** 506 * phy_get() - lookup and obtain a reference to a phy. 507 * @dev: device that requests this phy 508 * @string: the phy name as given in the dt data or the name of the controller 509 * port for non-dt case 510 * 511 * Returns the phy driver, after getting a refcount to it; or 512 * -ENODEV if there is no such phy. The caller is responsible for 513 * calling phy_put() to release that count. 514 */ 515 struct phy *phy_get(struct device *dev, const char *string) 516 { 517 int index = 0; 518 struct phy *phy; 519 520 if (string == NULL) { 521 dev_WARN(dev, "missing string\n"); 522 return ERR_PTR(-EINVAL); 523 } 524 525 if (dev->of_node) { 526 index = of_property_match_string(dev->of_node, "phy-names", 527 string); 528 phy = _of_phy_get(dev->of_node, index); 529 } else { 530 phy = phy_find(dev, string); 531 } 532 if (IS_ERR(phy)) 533 return phy; 534 535 if (!try_module_get(phy->ops->owner)) 536 return ERR_PTR(-EPROBE_DEFER); 537 538 get_device(&phy->dev); 539 540 return phy; 541 } 542 EXPORT_SYMBOL_GPL(phy_get); 543 544 /** 545 * phy_optional_get() - lookup and obtain a reference to an optional phy. 546 * @dev: device that requests this phy 547 * @string: the phy name as given in the dt data or the name of the controller 548 * port for non-dt case 549 * 550 * Returns the phy driver, after getting a refcount to it; or 551 * NULL if there is no such phy. The caller is responsible for 552 * calling phy_put() to release that count. 553 */ 554 struct phy *phy_optional_get(struct device *dev, const char *string) 555 { 556 struct phy *phy = phy_get(dev, string); 557 558 if (IS_ERR(phy) && (PTR_ERR(phy) == -ENODEV)) 559 phy = NULL; 560 561 return phy; 562 } 563 EXPORT_SYMBOL_GPL(phy_optional_get); 564 565 /** 566 * devm_phy_get() - lookup and obtain a reference to a phy. 567 * @dev: device that requests this phy 568 * @string: the phy name as given in the dt data or phy device name 569 * for non-dt case 570 * 571 * Gets the phy using phy_get(), and associates a device with it using 572 * devres. On driver detach, release function is invoked on the devres data, 573 * then, devres data is freed. 574 */ 575 struct phy *devm_phy_get(struct device *dev, const char *string) 576 { 577 struct phy **ptr, *phy; 578 579 ptr = devres_alloc(devm_phy_release, sizeof(*ptr), GFP_KERNEL); 580 if (!ptr) 581 return ERR_PTR(-ENOMEM); 582 583 phy = phy_get(dev, string); 584 if (!IS_ERR(phy)) { 585 *ptr = phy; 586 devres_add(dev, ptr); 587 } else { 588 devres_free(ptr); 589 } 590 591 return phy; 592 } 593 EXPORT_SYMBOL_GPL(devm_phy_get); 594 595 /** 596 * devm_phy_optional_get() - lookup and obtain a reference to an optional phy. 597 * @dev: device that requests this phy 598 * @string: the phy name as given in the dt data or phy device name 599 * for non-dt case 600 * 601 * Gets the phy using phy_get(), and associates a device with it using 602 * devres. On driver detach, release function is invoked on the devres 603 * data, then, devres data is freed. This differs to devm_phy_get() in 604 * that if the phy does not exist, it is not considered an error and 605 * -ENODEV will not be returned. Instead the NULL phy is returned, 606 * which can be passed to all other phy consumer calls. 607 */ 608 struct phy *devm_phy_optional_get(struct device *dev, const char *string) 609 { 610 struct phy *phy = devm_phy_get(dev, string); 611 612 if (IS_ERR(phy) && (PTR_ERR(phy) == -ENODEV)) 613 phy = NULL; 614 615 return phy; 616 } 617 EXPORT_SYMBOL_GPL(devm_phy_optional_get); 618 619 /** 620 * devm_of_phy_get() - lookup and obtain a reference to a phy. 621 * @dev: device that requests this phy 622 * @np: node containing the phy 623 * @con_id: name of the phy from device's point of view 624 * 625 * Gets the phy using of_phy_get(), and associates a device with it using 626 * devres. On driver detach, release function is invoked on the devres data, 627 * then, devres data is freed. 628 */ 629 struct phy *devm_of_phy_get(struct device *dev, struct device_node *np, 630 const char *con_id) 631 { 632 struct phy **ptr, *phy; 633 634 ptr = devres_alloc(devm_phy_release, sizeof(*ptr), GFP_KERNEL); 635 if (!ptr) 636 return ERR_PTR(-ENOMEM); 637 638 phy = of_phy_get(np, con_id); 639 if (!IS_ERR(phy)) { 640 *ptr = phy; 641 devres_add(dev, ptr); 642 } else { 643 devres_free(ptr); 644 } 645 646 return phy; 647 } 648 EXPORT_SYMBOL_GPL(devm_of_phy_get); 649 650 /** 651 * devm_of_phy_get_by_index() - lookup and obtain a reference to a phy by index. 652 * @dev: device that requests this phy 653 * @np: node containing the phy 654 * @index: index of the phy 655 * 656 * Gets the phy using _of_phy_get(), then gets a refcount to it, 657 * and associates a device with it using devres. On driver detach, 658 * release function is invoked on the devres data, 659 * then, devres data is freed. 660 * 661 */ 662 struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node *np, 663 int index) 664 { 665 struct phy **ptr, *phy; 666 667 ptr = devres_alloc(devm_phy_release, sizeof(*ptr), GFP_KERNEL); 668 if (!ptr) 669 return ERR_PTR(-ENOMEM); 670 671 phy = _of_phy_get(np, index); 672 if (IS_ERR(phy)) { 673 devres_free(ptr); 674 return phy; 675 } 676 677 if (!try_module_get(phy->ops->owner)) { 678 devres_free(ptr); 679 return ERR_PTR(-EPROBE_DEFER); 680 } 681 682 get_device(&phy->dev); 683 684 *ptr = phy; 685 devres_add(dev, ptr); 686 687 return phy; 688 } 689 EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index); 690 691 /** 692 * phy_create() - create a new phy 693 * @dev: device that is creating the new phy 694 * @node: device node of the phy 695 * @ops: function pointers for performing phy operations 696 * 697 * Called to create a phy using phy framework. 698 */ 699 struct phy *phy_create(struct device *dev, struct device_node *node, 700 const struct phy_ops *ops) 701 { 702 int ret; 703 int id; 704 struct phy *phy; 705 706 if (WARN_ON(!dev)) 707 return ERR_PTR(-EINVAL); 708 709 phy = kzalloc(sizeof(*phy), GFP_KERNEL); 710 if (!phy) 711 return ERR_PTR(-ENOMEM); 712 713 id = ida_simple_get(&phy_ida, 0, 0, GFP_KERNEL); 714 if (id < 0) { 715 dev_err(dev, "unable to get id\n"); 716 ret = id; 717 goto free_phy; 718 } 719 720 device_initialize(&phy->dev); 721 mutex_init(&phy->mutex); 722 723 phy->dev.class = phy_class; 724 phy->dev.parent = dev; 725 phy->dev.of_node = node ?: dev->of_node; 726 phy->id = id; 727 phy->ops = ops; 728 729 ret = dev_set_name(&phy->dev, "phy-%s.%d", dev_name(dev), id); 730 if (ret) 731 goto put_dev; 732 733 /* phy-supply */ 734 phy->pwr = regulator_get_optional(&phy->dev, "phy"); 735 if (IS_ERR(phy->pwr)) { 736 ret = PTR_ERR(phy->pwr); 737 if (ret == -EPROBE_DEFER) 738 goto put_dev; 739 740 phy->pwr = NULL; 741 } 742 743 ret = device_add(&phy->dev); 744 if (ret) 745 goto put_dev; 746 747 if (pm_runtime_enabled(dev)) { 748 pm_runtime_enable(&phy->dev); 749 pm_runtime_no_callbacks(&phy->dev); 750 } 751 752 return phy; 753 754 put_dev: 755 put_device(&phy->dev); /* calls phy_release() which frees resources */ 756 return ERR_PTR(ret); 757 758 free_phy: 759 kfree(phy); 760 return ERR_PTR(ret); 761 } 762 EXPORT_SYMBOL_GPL(phy_create); 763 764 /** 765 * devm_phy_create() - create a new phy 766 * @dev: device that is creating the new phy 767 * @node: device node of the phy 768 * @ops: function pointers for performing phy operations 769 * 770 * Creates a new PHY device adding it to the PHY class. 771 * While at that, it also associates the device with the phy using devres. 772 * On driver detach, release function is invoked on the devres data, 773 * then, devres data is freed. 774 */ 775 struct phy *devm_phy_create(struct device *dev, struct device_node *node, 776 const struct phy_ops *ops) 777 { 778 struct phy **ptr, *phy; 779 780 ptr = devres_alloc(devm_phy_consume, sizeof(*ptr), GFP_KERNEL); 781 if (!ptr) 782 return ERR_PTR(-ENOMEM); 783 784 phy = phy_create(dev, node, ops); 785 if (!IS_ERR(phy)) { 786 *ptr = phy; 787 devres_add(dev, ptr); 788 } else { 789 devres_free(ptr); 790 } 791 792 return phy; 793 } 794 EXPORT_SYMBOL_GPL(devm_phy_create); 795 796 /** 797 * phy_destroy() - destroy the phy 798 * @phy: the phy to be destroyed 799 * 800 * Called to destroy the phy. 801 */ 802 void phy_destroy(struct phy *phy) 803 { 804 pm_runtime_disable(&phy->dev); 805 device_unregister(&phy->dev); 806 } 807 EXPORT_SYMBOL_GPL(phy_destroy); 808 809 /** 810 * devm_phy_destroy() - destroy the PHY 811 * @dev: device that wants to release this phy 812 * @phy: the phy returned by devm_phy_get() 813 * 814 * destroys the devres associated with this phy and invokes phy_destroy 815 * to destroy the phy. 816 */ 817 void devm_phy_destroy(struct device *dev, struct phy *phy) 818 { 819 int r; 820 821 r = devres_destroy(dev, devm_phy_consume, devm_phy_match, phy); 822 dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n"); 823 } 824 EXPORT_SYMBOL_GPL(devm_phy_destroy); 825 826 /** 827 * __of_phy_provider_register() - create/register phy provider with the framework 828 * @dev: struct device of the phy provider 829 * @children: device node containing children (if different from dev->of_node) 830 * @owner: the module owner containing of_xlate 831 * @of_xlate: function pointer to obtain phy instance from phy provider 832 * 833 * Creates struct phy_provider from dev and of_xlate function pointer. 834 * This is used in the case of dt boot for finding the phy instance from 835 * phy provider. 836 * 837 * If the PHY provider doesn't nest children directly but uses a separate 838 * child node to contain the individual children, the @children parameter 839 * can be used to override the default. If NULL, the default (dev->of_node) 840 * will be used. If non-NULL, the device node must be a child (or further 841 * descendant) of dev->of_node. Otherwise an ERR_PTR()-encoded -EINVAL 842 * error code is returned. 843 */ 844 struct phy_provider *__of_phy_provider_register(struct device *dev, 845 struct device_node *children, struct module *owner, 846 struct phy * (*of_xlate)(struct device *dev, 847 struct of_phandle_args *args)) 848 { 849 struct phy_provider *phy_provider; 850 851 /* 852 * If specified, the device node containing the children must itself 853 * be the provider's device node or a child (or further descendant) 854 * thereof. 855 */ 856 if (children) { 857 struct device_node *parent = of_node_get(children), *next; 858 859 while (parent) { 860 if (parent == dev->of_node) 861 break; 862 863 next = of_get_parent(parent); 864 of_node_put(parent); 865 parent = next; 866 } 867 868 if (!parent) 869 return ERR_PTR(-EINVAL); 870 871 of_node_put(parent); 872 } else { 873 children = dev->of_node; 874 } 875 876 phy_provider = kzalloc(sizeof(*phy_provider), GFP_KERNEL); 877 if (!phy_provider) 878 return ERR_PTR(-ENOMEM); 879 880 phy_provider->dev = dev; 881 phy_provider->children = of_node_get(children); 882 phy_provider->owner = owner; 883 phy_provider->of_xlate = of_xlate; 884 885 mutex_lock(&phy_provider_mutex); 886 list_add_tail(&phy_provider->list, &phy_provider_list); 887 mutex_unlock(&phy_provider_mutex); 888 889 return phy_provider; 890 } 891 EXPORT_SYMBOL_GPL(__of_phy_provider_register); 892 893 /** 894 * __devm_of_phy_provider_register() - create/register phy provider with the 895 * framework 896 * @dev: struct device of the phy provider 897 * @owner: the module owner containing of_xlate 898 * @of_xlate: function pointer to obtain phy instance from phy provider 899 * 900 * Creates struct phy_provider from dev and of_xlate function pointer. 901 * This is used in the case of dt boot for finding the phy instance from 902 * phy provider. While at that, it also associates the device with the 903 * phy provider using devres. On driver detach, release function is invoked 904 * on the devres data, then, devres data is freed. 905 */ 906 struct phy_provider *__devm_of_phy_provider_register(struct device *dev, 907 struct device_node *children, struct module *owner, 908 struct phy * (*of_xlate)(struct device *dev, 909 struct of_phandle_args *args)) 910 { 911 struct phy_provider **ptr, *phy_provider; 912 913 ptr = devres_alloc(devm_phy_provider_release, sizeof(*ptr), GFP_KERNEL); 914 if (!ptr) 915 return ERR_PTR(-ENOMEM); 916 917 phy_provider = __of_phy_provider_register(dev, children, owner, 918 of_xlate); 919 if (!IS_ERR(phy_provider)) { 920 *ptr = phy_provider; 921 devres_add(dev, ptr); 922 } else { 923 devres_free(ptr); 924 } 925 926 return phy_provider; 927 } 928 EXPORT_SYMBOL_GPL(__devm_of_phy_provider_register); 929 930 /** 931 * of_phy_provider_unregister() - unregister phy provider from the framework 932 * @phy_provider: phy provider returned by of_phy_provider_register() 933 * 934 * Removes the phy_provider created using of_phy_provider_register(). 935 */ 936 void of_phy_provider_unregister(struct phy_provider *phy_provider) 937 { 938 if (IS_ERR(phy_provider)) 939 return; 940 941 mutex_lock(&phy_provider_mutex); 942 list_del(&phy_provider->list); 943 of_node_put(phy_provider->children); 944 kfree(phy_provider); 945 mutex_unlock(&phy_provider_mutex); 946 } 947 EXPORT_SYMBOL_GPL(of_phy_provider_unregister); 948 949 /** 950 * devm_of_phy_provider_unregister() - remove phy provider from the framework 951 * @dev: struct device of the phy provider 952 * 953 * destroys the devres associated with this phy provider and invokes 954 * of_phy_provider_unregister to unregister the phy provider. 955 */ 956 void devm_of_phy_provider_unregister(struct device *dev, 957 struct phy_provider *phy_provider) { 958 int r; 959 960 r = devres_destroy(dev, devm_phy_provider_release, devm_phy_match, 961 phy_provider); 962 dev_WARN_ONCE(dev, r, "couldn't find PHY provider device resource\n"); 963 } 964 EXPORT_SYMBOL_GPL(devm_of_phy_provider_unregister); 965 966 /** 967 * phy_release() - release the phy 968 * @dev: the dev member within phy 969 * 970 * When the last reference to the device is removed, it is called 971 * from the embedded kobject as release method. 972 */ 973 static void phy_release(struct device *dev) 974 { 975 struct phy *phy; 976 977 phy = to_phy(dev); 978 dev_vdbg(dev, "releasing '%s'\n", dev_name(dev)); 979 regulator_put(phy->pwr); 980 ida_simple_remove(&phy_ida, phy->id); 981 kfree(phy); 982 } 983 984 static int __init phy_core_init(void) 985 { 986 phy_class = class_create(THIS_MODULE, "phy"); 987 if (IS_ERR(phy_class)) { 988 pr_err("failed to create phy class --> %ld\n", 989 PTR_ERR(phy_class)); 990 return PTR_ERR(phy_class); 991 } 992 993 phy_class->dev_release = phy_release; 994 995 return 0; 996 } 997 module_init(phy_core_init); 998 999 static void __exit phy_core_exit(void) 1000 { 1001 class_destroy(phy_class); 1002 } 1003 module_exit(phy_core_exit); 1004 1005 MODULE_DESCRIPTION("Generic PHY Framework"); 1006 MODULE_AUTHOR("Kishon Vijay Abraham I <kishon@ti.com>"); 1007 MODULE_LICENSE("GPL v2"); 1008