Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c102981 authored by Alexandru Ardelean's avatar Alexandru Ardelean Committed by David S. Miller
Browse files

net: phy: adin: add support for Analog Devices PHYs

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: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarAlexandru Ardelean <alexandru.ardelean@analog.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 459c5fb4
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
+9 −0
Original line number Diff line number Diff line
@@ -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---
+1 −0
Original line number Diff line number Diff line
@@ -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

drivers/net/phy/adin.c

0 → 100644
+49 −0
Original line number Diff line number Diff line
// 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");