lkml.org 
[lkml]   [2019]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 01/14] net: phy: adin: add support for Analog Devices PHYs
    Date
    This change adds support for Analog Devices Industrial Ethernet PHYs.
    Particularly the PHYs this driver adds support for:
    * ADIN1200 - Robust, Industrial, Low Power 10/100 Ethernet PHY
    * ADIN1300 - Robust, Industrial, Low Latency 10/100/1000 Gigabit
    Ethernet PHY

    The 2 chips are register compatible with one another. The main difference
    being that ADIN1200 doesn't operate in gigabit mode.

    The chips can be operated by the Generic PHY driver as well via the
    standard IEEE PHY registers (0x0000 - 0x000F) which are supported by the
    kernel as well. This assumes that configuration of the PHY has been done
    completely in HW, according to spec.

    Configuration can also be done via registers, which will be supported by
    this driver.

    Datasheets:
    https://www.analog.com/media/en/technical-documentation/data-sheets/ADIN1300.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/ADIN1200.pdf

    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
    ---
    MAINTAINERS | 7 ++++++
    drivers/net/phy/Kconfig | 9 ++++++++
    drivers/net/phy/Makefile | 1 +
    drivers/net/phy/adin.c | 49 ++++++++++++++++++++++++++++++++++++++++
    4 files changed, 66 insertions(+)
    create mode 100644 drivers/net/phy/adin.c

    diff --git a/MAINTAINERS b/MAINTAINERS
    index e352550a6895..e8aa8a667864 100644
    --- a/MAINTAINERS
    +++ b/MAINTAINERS
    @@ -938,6 +938,13 @@ S: Supported
    F: drivers/mux/adgs1408.c
    F: Documentation/devicetree/bindings/mux/adi,adgs1408.txt

    +ANALOG DEVICES INC ADIN DRIVER
    +M: Alexandru Ardelean <alexaundru.ardelean@analog.com>
    +L: netdev@vger.kernel.org
    +W: http://ez.analog.com/community/linux-device-drivers
    +S: Supported
    +F: drivers/net/phy/adin.c
    +
    ANALOG DEVICES INC ADIS DRIVER LIBRARY
    M: Alexandru Ardelean <alexandru.ardelean@analog.com>
    S: Supported
    diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
    index 48ca213c0ada..03be30cde552 100644
    --- a/drivers/net/phy/Kconfig
    +++ b/drivers/net/phy/Kconfig
    @@ -257,6 +257,15 @@ config SFP
    depends on HWMON || HWMON=n
    select MDIO_I2C

    +config ADIN_PHY
    + tristate "Analog Devices Industrial Ethernet PHYs"
    + help
    + Adds support for the Analog Devices Industrial Ethernet PHYs.
    + Currently supports the:
    + - ADIN1200 - Robust,Industrial, Low Power 10/100 Ethernet PHY
    + - ADIN1300 - Robust,Industrial, Low Latency 10/100/1000 Gigabit
    + Ethernet PHY
    +
    config AMD_PHY
    tristate "AMD PHYs"
    ---help---
    diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
    index ba07c27e4208..a03437e091f3 100644
    --- a/drivers/net/phy/Makefile
    +++ b/drivers/net/phy/Makefile
    @@ -47,6 +47,7 @@ obj-$(CONFIG_SFP) += sfp.o
    sfp-obj-$(CONFIG_SFP) += sfp-bus.o
    obj-y += $(sfp-obj-y) $(sfp-obj-m)

    +obj-$(CONFIG_ADIN_PHY) += adin.o
    obj-$(CONFIG_AMD_PHY) += amd.o
    aquantia-objs += aquantia_main.o
    ifdef CONFIG_HWMON
    diff --git a/drivers/net/phy/adin.c b/drivers/net/phy/adin.c
    new file mode 100644
    index 000000000000..6d7af4743957
    --- /dev/null
    +++ b/drivers/net/phy/adin.c
    @@ -0,0 +1,49 @@
    +// SPDX-License-Identifier: GPL-2.0+
    +/**
    + * Driver for Analog Devices Industrial Ethernet PHYs
    + *
    + * Copyright 2019 Analog Devices Inc.
    + */
    +#include <linux/kernel.h>
    +#include <linux/errno.h>
    +#include <linux/init.h>
    +#include <linux/module.h>
    +#include <linux/mii.h>
    +#include <linux/phy.h>
    +
    +#define PHY_ID_ADIN1200 0x0283bc20
    +#define PHY_ID_ADIN1300 0x0283bc30
    +
    +static int adin_config_init(struct phy_device *phydev)
    +{
    + return genphy_config_init(phydev);
    +}
    +
    +static struct phy_driver adin_driver[] = {
    + {
    + PHY_ID_MATCH_MODEL(PHY_ID_ADIN1200),
    + .name = "ADIN1200",
    + .config_init = adin_config_init,
    + .config_aneg = genphy_config_aneg,
    + .read_status = genphy_read_status,
    + },
    + {
    + PHY_ID_MATCH_MODEL(PHY_ID_ADIN1300),
    + .name = "ADIN1300",
    + .config_init = adin_config_init,
    + .config_aneg = genphy_config_aneg,
    + .read_status = genphy_read_status,
    + },
    +};
    +
    +module_phy_driver(adin_driver);
    +
    +static struct mdio_device_id __maybe_unused adin_tbl[] = {
    + { PHY_ID_MATCH_MODEL(PHY_ID_ADIN1200) },
    + { PHY_ID_MATCH_MODEL(PHY_ID_ADIN1300) },
    + { }
    +};
    +
    +MODULE_DEVICE_TABLE(mdio, adin_tbl);
    +MODULE_DESCRIPTION("Analog Devices Industrial Ethernet PHY driver");
    +MODULE_LICENSE("GPL");
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-12 13:26    [W:4.316 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site