linux/drivers/net/phy/mdio_bus.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/* MDIO Bus interface
   3 *
   4 * Author: Andy Fleming
   5 *
   6 * Copyright (c) 2004 Freescale Semiconductor, Inc.
   7 */
   8
   9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  10
  11#include <linux/kernel.h>
  12#include <linux/string.h>
  13#include <linux/errno.h>
  14#include <linux/unistd.h>
  15#include <linux/slab.h>
  16#include <linux/interrupt.h>
  17#include <linux/init.h>
  18#include <linux/delay.h>
  19#include <linux/device.h>
  20#include <linux/gpio.h>
  21#include <linux/gpio/consumer.h>
  22#include <linux/of_device.h>
  23#include <linux/of_mdio.h>
  24#include <linux/of_gpio.h>
  25#include <linux/netdevice.h>
  26#include <linux/etherdevice.h>
  27#include <linux/reset.h>
  28#include <linux/skbuff.h>
  29#include <linux/spinlock.h>
  30#include <linux/mm.h>
  31#include <linux/module.h>
  32#include <linux/mii.h>
  33#include <linux/ethtool.h>
  34#include <linux/phy.h>
  35#include <linux/io.h>
  36#include <linux/uaccess.h>
  37
  38#define CREATE_TRACE_POINTS
  39#include <trace/events/mdio.h>
  40
  41#include "mdio-boardinfo.h"
  42
  43static int mdiobus_register_gpiod(struct mdio_device *mdiodev)
  44{
  45        int error;
  46
  47        /* Deassert the optional reset signal */
  48        mdiodev->reset_gpio = gpiod_get_optional(&mdiodev->dev,
  49                                                 "reset", GPIOD_OUT_LOW);
  50        error = PTR_ERR_OR_ZERO(mdiodev->reset_gpio);
  51        if (error)
  52                return error;
  53
  54        if (mdiodev->reset_gpio)
  55                gpiod_set_consumer_name(mdiodev->reset_gpio, "PHY reset");
  56
  57        return 0;
  58}
  59
  60static int mdiobus_register_reset(struct mdio_device *mdiodev)
  61{
  62        struct reset_control *reset = NULL;
  63
  64        if (mdiodev->dev.of_node)
  65                reset = devm_reset_control_get_exclusive(&mdiodev->dev,
  66                                                         "phy");
  67        if (IS_ERR(reset)) {
  68                if (PTR_ERR(reset) == -ENOENT || PTR_ERR(reset) == -ENOTSUPP)
  69                        reset = NULL;
  70                else
  71                        return PTR_ERR(reset);
  72        }
  73
  74        mdiodev->reset_ctrl = reset;
  75
  76        return 0;
  77}
  78
  79int mdiobus_register_device(struct mdio_device *mdiodev)
  80{
  81        int err;
  82
  83        if (mdiodev->bus->mdio_map[mdiodev->addr])
  84                return -EBUSY;
  85
  86        if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY) {
  87                err = mdiobus_register_gpiod(mdiodev);
  88                if (err)
  89                        return err;
  90
  91                err = mdiobus_register_reset(mdiodev);
  92                if (err)
  93                        return err;
  94
  95                /* Assert the reset signal */
  96                mdio_device_reset(mdiodev, 1);
  97        }
  98
  99        mdiodev->bus->mdio_map[mdiodev->addr] = mdiodev;
 100
 101        return 0;
 102}
 103EXPORT_SYMBOL(mdiobus_register_device);
 104
 105int mdiobus_unregister_device(struct mdio_device *mdiodev)
 106{
 107        if (mdiodev->bus->mdio_map[mdiodev->addr] != mdiodev)
 108                return -EINVAL;
 109
 110        mdiodev->bus->mdio_map[mdiodev->addr] = NULL;
 111
 112        return 0;
 113}
 114EXPORT_SYMBOL(mdiobus_unregister_device);
 115
 116struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr)
 117{
 118        struct mdio_device *mdiodev = bus->mdio_map[addr];
 119
 120        if (!mdiodev)
 121                return NULL;
 122
 123        if (!(mdiodev->flags & MDIO_DEVICE_FLAG_PHY))
 124                return NULL;
 125
 126        return container_of(mdiodev, struct phy_device, mdio);
 127}
 128EXPORT_SYMBOL(mdiobus_get_phy);
 129
 130bool mdiobus_is_registered_device(struct mii_bus *bus, int addr)
 131{
 132        return bus->mdio_map[addr];
 133}
 134EXPORT_SYMBOL(mdiobus_is_registered_device);
 135
 136/**
 137 * mdiobus_alloc_size - allocate a mii_bus structure
 138 * @size: extra amount of memory to allocate for private storage.
 139 * If non-zero, then bus->priv is points to that memory.
 140 *
 141 * Description: called by a bus driver to allocate an mii_bus
 142 * structure to fill in.
 143 */
 144struct mii_bus *mdiobus_alloc_size(size_t size)
 145{
 146        struct mii_bus *bus;
 147        size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN);
 148        size_t alloc_size;
 149        int i;
 150
 151        /* If we alloc extra space, it should be aligned */
 152        if (size)
 153                alloc_size = aligned_size + size;
 154        else
 155                alloc_size = sizeof(*bus);
 156
 157        bus = kzalloc(alloc_size, GFP_KERNEL);
 158        if (!bus)
 159                return NULL;
 160
 161        bus->state = MDIOBUS_ALLOCATED;
 162        if (size)
 163                bus->priv = (void *)bus + aligned_size;
 164
 165        /* Initialise the interrupts to polling */
 166        for (i = 0; i < PHY_MAX_ADDR; i++)
 167                bus->irq[i] = PHY_POLL;
 168
 169        return bus;
 170}
 171EXPORT_SYMBOL(mdiobus_alloc_size);
 172
 173static void _devm_mdiobus_free(struct device *dev, void *res)
 174{
 175        mdiobus_free(*(struct mii_bus **)res);
 176}
 177
 178static int devm_mdiobus_match(struct device *dev, void *res, void *data)
 179{
 180        struct mii_bus **r = res;
 181
 182        if (WARN_ON(!r || !*r))
 183                return 0;
 184
 185        return *r == data;
 186}
 187
 188/**
 189 * devm_mdiobus_alloc_size - Resource-managed mdiobus_alloc_size()
 190 * @dev:                Device to allocate mii_bus for
 191 * @sizeof_priv:        Space to allocate for private structure.
 192 *
 193 * Managed mdiobus_alloc_size. mii_bus allocated with this function is
 194 * automatically freed on driver detach.
 195 *
 196 * If an mii_bus allocated with this function needs to be freed separately,
 197 * devm_mdiobus_free() must be used.
 198 *
 199 * RETURNS:
 200 * Pointer to allocated mii_bus on success, NULL on failure.
 201 */
 202struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv)
 203{
 204        struct mii_bus **ptr, *bus;
 205
 206        ptr = devres_alloc(_devm_mdiobus_free, sizeof(*ptr), GFP_KERNEL);
 207        if (!ptr)
 208                return NULL;
 209
 210        /* use raw alloc_dr for kmalloc caller tracing */
 211        bus = mdiobus_alloc_size(sizeof_priv);
 212        if (bus) {
 213                *ptr = bus;
 214                devres_add(dev, ptr);
 215        } else {
 216                devres_free(ptr);
 217        }
 218
 219        return bus;
 220}
 221EXPORT_SYMBOL_GPL(devm_mdiobus_alloc_size);
 222
 223/**
 224 * devm_mdiobus_free - Resource-managed mdiobus_free()
 225 * @dev:                Device this mii_bus belongs to
 226 * @bus:                the mii_bus associated with the device
 227 *
 228 * Free mii_bus allocated with devm_mdiobus_alloc_size().
 229 */
 230void devm_mdiobus_free(struct device *dev, struct mii_bus *bus)
 231{
 232        int rc;
 233
 234        rc = devres_release(dev, _devm_mdiobus_free,
 235                            devm_mdiobus_match, bus);
 236        WARN_ON(rc);
 237}
 238EXPORT_SYMBOL_GPL(devm_mdiobus_free);
 239
 240/**
 241 * mdiobus_release - mii_bus device release callback
 242 * @d: the target struct device that contains the mii_bus
 243 *
 244 * Description: called when the last reference to an mii_bus is
 245 * dropped, to free the underlying memory.
 246 */
 247static void mdiobus_release(struct device *d)
 248{
 249        struct mii_bus *bus = to_mii_bus(d);
 250        BUG_ON(bus->state != MDIOBUS_RELEASED &&
 251               /* for compatibility with error handling in drivers */
 252               bus->state != MDIOBUS_ALLOCATED);
 253        kfree(bus);
 254}
 255
 256static struct class mdio_bus_class = {
 257        .name           = "mdio_bus",
 258        .dev_release    = mdiobus_release,
 259};
 260
 261#if IS_ENABLED(CONFIG_OF_MDIO)
 262/**
 263 * of_mdio_find_bus - Given an mii_bus node, find the mii_bus.
 264 * @mdio_bus_np: Pointer to the mii_bus.
 265 *
 266 * Returns a reference to the mii_bus, or NULL if none found.  The
 267 * embedded struct device will have its reference count incremented,
 268 * and this must be put once the bus is finished with.
 269 *
 270 * Because the association of a device_node and mii_bus is made via
 271 * of_mdiobus_register(), the mii_bus cannot be found before it is
 272 * registered with of_mdiobus_register().
 273 *
 274 */
 275struct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np)
 276{
 277        struct device *d;
 278
 279        if (!mdio_bus_np)
 280                return NULL;
 281
 282        d = class_find_device_by_of_node(&mdio_bus_class, mdio_bus_np);
 283        return d ? to_mii_bus(d) : NULL;
 284}
 285EXPORT_SYMBOL(of_mdio_find_bus);
 286
 287/* Walk the list of subnodes of a mdio bus and look for a node that
 288 * matches the mdio device's address with its 'reg' property. If
 289 * found, set the of_node pointer for the mdio device. This allows
 290 * auto-probed phy devices to be supplied with information passed in
 291 * via DT.
 292 */
 293static void of_mdiobus_link_mdiodev(struct mii_bus *bus,
 294                                    struct mdio_device *mdiodev)
 295{
 296        struct device *dev = &mdiodev->dev;
 297        struct device_node *child;
 298
 299        if (dev->of_node || !bus->dev.of_node)
 300                return;
 301
 302        for_each_available_child_of_node(bus->dev.of_node, child) {
 303                int addr;
 304
 305                addr = of_mdio_parse_addr(dev, child);
 306                if (addr < 0)
 307                        continue;
 308
 309                if (addr == mdiodev->addr) {
 310                        dev->of_node = child;
 311                        dev->fwnode = of_fwnode_handle(child);
 312                        return;
 313                }
 314        }
 315}
 316#else /* !IS_ENABLED(CONFIG_OF_MDIO) */
 317static inline void of_mdiobus_link_mdiodev(struct mii_bus *mdio,
 318                                           struct mdio_device *mdiodev)
 319{
 320}
 321#endif
 322
 323/**
 324 * mdiobus_create_device_from_board_info - create a full MDIO device given
 325 * a mdio_board_info structure
 326 * @bus: MDIO bus to create the devices on
 327 * @bi: mdio_board_info structure describing the devices
 328 *
 329 * Returns 0 on success or < 0 on error.
 330 */
 331static int mdiobus_create_device(struct mii_bus *bus,
 332                                 struct mdio_board_info *bi)
 333{
 334        struct mdio_device *mdiodev;
 335        int ret = 0;
 336
 337        mdiodev = mdio_device_create(bus, bi->mdio_addr);
 338        if (IS_ERR(mdiodev))
 339                return -ENODEV;
 340
 341        strncpy(mdiodev->modalias, bi->modalias,
 342                sizeof(mdiodev->modalias));
 343        mdiodev->bus_match = mdio_device_bus_match;
 344        mdiodev->dev.platform_data = (void *)bi->platform_data;
 345
 346        ret = mdio_device_register(mdiodev);
 347        if (ret)
 348                mdio_device_free(mdiodev);
 349
 350        return ret;
 351}
 352
 353/**
 354 * __mdiobus_register - bring up all the PHYs on a given bus and attach them to bus
 355 * @bus: target mii_bus
 356 * @owner: module containing bus accessor functions
 357 *
 358 * Description: Called by a bus driver to bring up all the PHYs
 359 *   on a given bus, and attach them to the bus. Drivers should use
 360 *   mdiobus_register() rather than __mdiobus_register() unless they
 361 *   need to pass a specific owner module. MDIO devices which are not
 362 *   PHYs will not be brought up by this function. They are expected to
 363 *   to be explicitly listed in DT and instantiated by of_mdiobus_register().
 364 *
 365 * Returns 0 on success or < 0 on error.
 366 */
 367int __mdiobus_register(struct mii_bus *bus, struct module *owner)
 368{
 369        struct mdio_device *mdiodev;
 370        int i, err;
 371        struct gpio_desc *gpiod;
 372
 373        if (NULL == bus || NULL == bus->name ||
 374            NULL == bus->read || NULL == bus->write)
 375                return -EINVAL;
 376
 377        BUG_ON(bus->state != MDIOBUS_ALLOCATED &&
 378               bus->state != MDIOBUS_UNREGISTERED);
 379
 380        bus->owner = owner;
 381        bus->dev.parent = bus->parent;
 382        bus->dev.class = &mdio_bus_class;
 383        bus->dev.groups = NULL;
 384        dev_set_name(&bus->dev, "%s", bus->id);
 385
 386        err = device_register(&bus->dev);
 387        if (err) {
 388                pr_err("mii_bus %s failed to register\n", bus->id);
 389                return -EINVAL;
 390        }
 391
 392        mutex_init(&bus->mdio_lock);
 393
 394        /* de-assert bus level PHY GPIO reset */
 395        gpiod = devm_gpiod_get_optional(&bus->dev, "reset", GPIOD_OUT_LOW);
 396        if (IS_ERR(gpiod)) {
 397                dev_err(&bus->dev, "mii_bus %s couldn't get reset GPIO\n",
 398                        bus->id);
 399                device_del(&bus->dev);
 400                return PTR_ERR(gpiod);
 401        } else  if (gpiod) {
 402                bus->reset_gpiod = gpiod;
 403
 404                gpiod_set_value_cansleep(gpiod, 1);
 405                udelay(bus->reset_delay_us);
 406                gpiod_set_value_cansleep(gpiod, 0);
 407        }
 408
 409        if (bus->reset)
 410                bus->reset(bus);
 411
 412        for (i = 0; i < PHY_MAX_ADDR; i++) {
 413                if ((bus->phy_mask & (1 << i)) == 0) {
 414                        struct phy_device *phydev;
 415
 416                        phydev = mdiobus_scan(bus, i);
 417                        if (IS_ERR(phydev) && (PTR_ERR(phydev) != -ENODEV)) {
 418                                err = PTR_ERR(phydev);
 419                                goto error;
 420                        }
 421                }
 422        }
 423
 424        mdiobus_setup_mdiodev_from_board_info(bus, mdiobus_create_device);
 425
 426        bus->state = MDIOBUS_REGISTERED;
 427        pr_info("%s: probed\n", bus->name);
 428        return 0;
 429
 430error:
 431        while (--i >= 0) {
 432                mdiodev = bus->mdio_map[i];
 433                if (!mdiodev)
 434                        continue;
 435
 436                mdiodev->device_remove(mdiodev);
 437                mdiodev->device_free(mdiodev);
 438        }
 439
 440        /* Put PHYs in RESET to save power */
 441        if (bus->reset_gpiod)
 442                gpiod_set_value_cansleep(bus->reset_gpiod, 1);
 443
 444        device_del(&bus->dev);
 445        return err;
 446}
 447EXPORT_SYMBOL(__mdiobus_register);
 448
 449void mdiobus_unregister(struct mii_bus *bus)
 450{
 451        struct mdio_device *mdiodev;
 452        int i;
 453
 454        BUG_ON(bus->state != MDIOBUS_REGISTERED);
 455        bus->state = MDIOBUS_UNREGISTERED;
 456
 457        for (i = 0; i < PHY_MAX_ADDR; i++) {
 458                mdiodev = bus->mdio_map[i];
 459                if (!mdiodev)
 460                        continue;
 461
 462                if (mdiodev->reset_gpio)
 463                        gpiod_put(mdiodev->reset_gpio);
 464
 465                mdiodev->device_remove(mdiodev);
 466                mdiodev->device_free(mdiodev);
 467        }
 468
 469        /* Put PHYs in RESET to save power */
 470        if (bus->reset_gpiod)
 471                gpiod_set_value_cansleep(bus->reset_gpiod, 1);
 472
 473        device_del(&bus->dev);
 474}
 475EXPORT_SYMBOL(mdiobus_unregister);
 476
 477/**
 478 * mdiobus_free - free a struct mii_bus
 479 * @bus: mii_bus to free
 480 *
 481 * This function releases the reference to the underlying device
 482 * object in the mii_bus.  If this is the last reference, the mii_bus
 483 * will be freed.
 484 */
 485void mdiobus_free(struct mii_bus *bus)
 486{
 487        /* For compatibility with error handling in drivers. */
 488        if (bus->state == MDIOBUS_ALLOCATED) {
 489                kfree(bus);
 490                return;
 491        }
 492
 493        BUG_ON(bus->state != MDIOBUS_UNREGISTERED);
 494        bus->state = MDIOBUS_RELEASED;
 495
 496        put_device(&bus->dev);
 497}
 498EXPORT_SYMBOL(mdiobus_free);
 499
 500/**
 501 * mdiobus_scan - scan a bus for MDIO devices.
 502 * @bus: mii_bus to scan
 503 * @addr: address on bus to scan
 504 *
 505 * This function scans the MDIO bus, looking for devices which can be
 506 * identified using a vendor/product ID in registers 2 and 3. Not all
 507 * MDIO devices have such registers, but PHY devices typically
 508 * do. Hence this function assumes anything found is a PHY, or can be
 509 * treated as a PHY. Other MDIO devices, such as switches, will
 510 * probably not be found during the scan.
 511 */
 512struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
 513{
 514        struct phy_device *phydev;
 515        int err;
 516
 517        phydev = get_phy_device(bus, addr, false);
 518        if (IS_ERR(phydev))
 519                return phydev;
 520
 521        /*
 522         * For DT, see if the auto-probed phy has a correspoding child
 523         * in the bus node, and set the of_node pointer in this case.
 524         */
 525        of_mdiobus_link_mdiodev(bus, &phydev->mdio);
 526
 527        err = phy_device_register(phydev);
 528        if (err) {
 529                phy_device_free(phydev);
 530                return ERR_PTR(-ENODEV);
 531        }
 532
 533        return phydev;
 534}
 535EXPORT_SYMBOL(mdiobus_scan);
 536
 537/**
 538 * __mdiobus_read - Unlocked version of the mdiobus_read function
 539 * @bus: the mii_bus struct
 540 * @addr: the phy address
 541 * @regnum: register number to read
 542 *
 543 * Read a MDIO bus register. Caller must hold the mdio bus lock.
 544 *
 545 * NOTE: MUST NOT be called from interrupt context.
 546 */
 547int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
 548{
 549        int retval;
 550
 551        WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock));
 552
 553        retval = bus->read(bus, addr, regnum);
 554
 555        trace_mdio_access(bus, 1, addr, regnum, retval, retval);
 556
 557        return retval;
 558}
 559EXPORT_SYMBOL(__mdiobus_read);
 560
 561/**
 562 * __mdiobus_write - Unlocked version of the mdiobus_write function
 563 * @bus: the mii_bus struct
 564 * @addr: the phy address
 565 * @regnum: register number to write
 566 * @val: value to write to @regnum
 567 *
 568 * Write a MDIO bus register. Caller must hold the mdio bus lock.
 569 *
 570 * NOTE: MUST NOT be called from interrupt context.
 571 */
 572int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
 573{
 574        int err;
 575
 576        WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock));
 577
 578        err = bus->write(bus, addr, regnum, val);
 579
 580        trace_mdio_access(bus, 0, addr, regnum, val, err);
 581
 582        return err;
 583}
 584EXPORT_SYMBOL(__mdiobus_write);
 585
 586/**
 587 * mdiobus_read_nested - Nested version of the mdiobus_read function
 588 * @bus: the mii_bus struct
 589 * @addr: the phy address
 590 * @regnum: register number to read
 591 *
 592 * In case of nested MDIO bus access avoid lockdep false positives by
 593 * using mutex_lock_nested().
 594 *
 595 * NOTE: MUST NOT be called from interrupt context,
 596 * because the bus read/write functions may wait for an interrupt
 597 * to conclude the operation.
 598 */
 599int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum)
 600{
 601        int retval;
 602
 603        BUG_ON(in_interrupt());
 604
 605        mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
 606        retval = __mdiobus_read(bus, addr, regnum);
 607        mutex_unlock(&bus->mdio_lock);
 608
 609        return retval;
 610}
 611EXPORT_SYMBOL(mdiobus_read_nested);
 612
 613/**
 614 * mdiobus_read - Convenience function for reading a given MII mgmt register
 615 * @bus: the mii_bus struct
 616 * @addr: the phy address
 617 * @regnum: register number to read
 618 *
 619 * NOTE: MUST NOT be called from interrupt context,
 620 * because the bus read/write functions may wait for an interrupt
 621 * to conclude the operation.
 622 */
 623int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
 624{
 625        int retval;
 626
 627        BUG_ON(in_interrupt());
 628
 629        mutex_lock(&bus->mdio_lock);
 630        retval = __mdiobus_read(bus, addr, regnum);
 631        mutex_unlock(&bus->mdio_lock);
 632
 633        return retval;
 634}
 635EXPORT_SYMBOL(mdiobus_read);
 636
 637/**
 638 * mdiobus_write_nested - Nested version of the mdiobus_write function
 639 * @bus: the mii_bus struct
 640 * @addr: the phy address
 641 * @regnum: register number to write
 642 * @val: value to write to @regnum
 643 *
 644 * In case of nested MDIO bus access avoid lockdep false positives by
 645 * using mutex_lock_nested().
 646 *
 647 * NOTE: MUST NOT be called from interrupt context,
 648 * because the bus read/write functions may wait for an interrupt
 649 * to conclude the operation.
 650 */
 651int mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val)
 652{
 653        int err;
 654
 655        BUG_ON(in_interrupt());
 656
 657        mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
 658        err = __mdiobus_write(bus, addr, regnum, val);
 659        mutex_unlock(&bus->mdio_lock);
 660
 661        return err;
 662}
 663EXPORT_SYMBOL(mdiobus_write_nested);
 664
 665/**
 666 * mdiobus_write - Convenience function for writing a given MII mgmt register
 667 * @bus: the mii_bus struct
 668 * @addr: the phy address
 669 * @regnum: register number to write
 670 * @val: value to write to @regnum
 671 *
 672 * NOTE: MUST NOT be called from interrupt context,
 673 * because the bus read/write functions may wait for an interrupt
 674 * to conclude the operation.
 675 */
 676int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
 677{
 678        int err;
 679
 680        BUG_ON(in_interrupt());
 681
 682        mutex_lock(&bus->mdio_lock);
 683        err = __mdiobus_write(bus, addr, regnum, val);
 684        mutex_unlock(&bus->mdio_lock);
 685
 686        return err;
 687}
 688EXPORT_SYMBOL(mdiobus_write);
 689
 690/**
 691 * mdio_bus_match - determine if given MDIO driver supports the given
 692 *                  MDIO device
 693 * @dev: target MDIO device
 694 * @drv: given MDIO driver
 695 *
 696 * Description: Given a MDIO device, and a MDIO driver, return 1 if
 697 *   the driver supports the device.  Otherwise, return 0. This may
 698 *   require calling the devices own match function, since different classes
 699 *   of MDIO devices have different match criteria.
 700 */
 701static int mdio_bus_match(struct device *dev, struct device_driver *drv)
 702{
 703        struct mdio_device *mdio = to_mdio_device(dev);
 704
 705        if (of_driver_match_device(dev, drv))
 706                return 1;
 707
 708        if (mdio->bus_match)
 709                return mdio->bus_match(dev, drv);
 710
 711        return 0;
 712}
 713
 714static int mdio_uevent(struct device *dev, struct kobj_uevent_env *env)
 715{
 716        int rc;
 717
 718        /* Some devices have extra OF data and an OF-style MODALIAS */
 719        rc = of_device_uevent_modalias(dev, env);
 720        if (rc != -ENODEV)
 721                return rc;
 722
 723        return 0;
 724}
 725
 726struct bus_type mdio_bus_type = {
 727        .name           = "mdio_bus",
 728        .match          = mdio_bus_match,
 729        .uevent         = mdio_uevent,
 730};
 731EXPORT_SYMBOL(mdio_bus_type);
 732
 733int __init mdio_bus_init(void)
 734{
 735        int ret;
 736
 737        ret = class_register(&mdio_bus_class);
 738        if (!ret) {
 739                ret = bus_register(&mdio_bus_type);
 740                if (ret)
 741                        class_unregister(&mdio_bus_class);
 742        }
 743
 744        return ret;
 745}
 746EXPORT_SYMBOL_GPL(mdio_bus_init);
 747
 748#if IS_ENABLED(CONFIG_PHYLIB)
 749void mdio_bus_exit(void)
 750{
 751        class_unregister(&mdio_bus_class);
 752        bus_unregister(&mdio_bus_type);
 753}
 754EXPORT_SYMBOL_GPL(mdio_bus_exit);
 755#else
 756module_init(mdio_bus_init);
 757/* no module_exit, intentional */
 758MODULE_LICENSE("GPL");
 759MODULE_DESCRIPTION("MDIO bus/device layer");
 760#endif
 761