// SPDX-License-Identifier: GPL-2.0+ /* Realtek MDIO interface driver * * ASICs we intend to support with this driver: * * RTL8366 - The original version, apparently * RTL8369 - Similar enough to have the same datsheet as RTL8366 * RTL8366RB - Probably reads out "RTL8366 revision B", has a quite * different register layout from the other two * RTL8366S - Is this "RTL8366 super"? * RTL8367 - Has an OpenWRT driver as well * RTL8368S - Seems to be an alternative name for RTL8366RB * RTL8370 - Also uses SMI * * Copyright (C) 2017 Linus Walleij <[email protected]> * Copyright (C) 2010 Antti Seppälä <[email protected]> * Copyright (C) 2010 Roman Yeryomin <[email protected]> * Copyright (C) 2011 Colin Leitner <[email protected]> * Copyright (C) 2009-2010 Gabor Juhos <[email protected]> */ #include <linux/module.h> #include <linux/of.h> #include <linux/overflow.h> #include <linux/regmap.h> #include "realtek.h" #include "realtek-mdio.h" #include "rtl83xx.h" /* Read/write via mdiobus */ #define REALTEK_MDIO_CTRL0_REG … #define REALTEK_MDIO_START_REG … #define REALTEK_MDIO_CTRL1_REG … #define REALTEK_MDIO_ADDRESS_REG … #define REALTEK_MDIO_DATA_WRITE_REG … #define REALTEK_MDIO_DATA_READ_REG … #define REALTEK_MDIO_START_OP … #define REALTEK_MDIO_ADDR_OP … #define REALTEK_MDIO_READ_OP … #define REALTEK_MDIO_WRITE_OP … static int realtek_mdio_write(void *ctx, u32 reg, u32 val) { … } static int realtek_mdio_read(void *ctx, u32 reg, u32 *val) { … } static const struct realtek_interface_info realtek_mdio_info = …; /** * realtek_mdio_probe() - Probe a platform device for an MDIO-connected switch * @mdiodev: mdio_device to probe on. * * This function should be used as the .probe in an mdio_driver. After * calling the common probe function for both interfaces, it initializes the * values specific for MDIO-connected devices. Finally, it calls a common * function to register the DSA switch. * * Context: Can sleep. Takes and releases priv->map_lock. * Return: Returns 0 on success, a negative error on failure. */ int realtek_mdio_probe(struct mdio_device *mdiodev) { … } EXPORT_SYMBOL_NS_GPL(…); /** * realtek_mdio_remove() - Remove the driver of an MDIO-connected switch * @mdiodev: mdio_device to be removed. * * This function should be used as the .remove_new in an mdio_driver. First * it unregisters the DSA switch and then it calls the common remove function. * * Context: Can sleep. * Return: Nothing. */ void realtek_mdio_remove(struct mdio_device *mdiodev) { … } EXPORT_SYMBOL_NS_GPL(…); /** * realtek_mdio_shutdown() - Shutdown the driver of a MDIO-connected switch * @mdiodev: mdio_device shutting down. * * This function should be used as the .shutdown in a platform_driver. It calls * the common shutdown function. * * Context: Can sleep. * Return: Nothing. */ void realtek_mdio_shutdown(struct mdio_device *mdiodev) { … } EXPORT_SYMBOL_NS_GPL(…);