From feb25f1a5bb46b5b82dee078d3039d3f488ae767 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 30 Nov 2016 11:34:32 +0100 Subject: [PATCH] kernel: add support for the AT8032 PHY This PHY is used on the Ubiquiti Networks NanoStation Loco XW Signed-off-by: Felix Fietkau --- ...et-phy-at803x-add-support-for-AT8032.patch | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 target/linux/generic/patches-4.4/739-net-phy-at803x-add-support-for-AT8032.patch diff --git a/target/linux/generic/patches-4.4/739-net-phy-at803x-add-support-for-AT8032.patch b/target/linux/generic/patches-4.4/739-net-phy-at803x-add-support-for-AT8032.patch new file mode 100644 index 0000000000..4455ec49e1 --- /dev/null +++ b/target/linux/generic/patches-4.4/739-net-phy-at803x-add-support-for-AT8032.patch @@ -0,0 +1,65 @@ +From: Felix Fietkau +Date: Wed, 30 Nov 2016 11:31:03 +0100 +Subject: [PATCH] net: phy: at803x: add support for AT8032 + +Like AT8030, this PHY needs the GPIO reset workaround + +Signed-off-by: Felix Fietkau +--- + +--- a/drivers/net/phy/at803x.c ++++ b/drivers/net/phy/at803x.c +@@ -55,6 +55,7 @@ + #define AT803X_PHY_ID_MASK 0xffffffef + #define ATH8030_PHY_ID 0x004dd076 + #define ATH8031_PHY_ID 0x004dd074 ++#define ATH8032_PHY_ID 0x004dd023 + #define ATH8035_PHY_ID 0x004dd072 + + MODULE_DESCRIPTION("Atheros 803x PHY driver"); +@@ -250,7 +251,8 @@ static int at803x_probe(struct phy_devic + if (!priv) + return -ENOMEM; + +- if (phydev->drv->phy_id != ATH8030_PHY_ID) ++ if (phydev->drv->phy_id != ATH8030_PHY_ID && ++ phydev->drv->phy_id != ATH8032_PHY_ID) + goto does_not_require_reset_workaround; + + gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); +@@ -478,6 +480,27 @@ static struct phy_driver at803x_driver[] + .driver = { + .owner = THIS_MODULE, + }, ++}, { ++ /* ATHEROS 8032 */ ++ .phy_id = ATH8032_PHY_ID, ++ .name = "Atheros 8032 ethernet", ++ .phy_id_mask = AT803X_PHY_ID_MASK, ++ .probe = at803x_probe, ++ .config_init = at803x_config_init, ++ .link_change_notify = at803x_link_change_notify, ++ .set_wol = at803x_set_wol, ++ .get_wol = at803x_get_wol, ++ .suspend = at803x_suspend, ++ .resume = at803x_resume, ++ .features = PHY_GBIT_FEATURES, ++ .flags = PHY_HAS_INTERRUPT, ++ .config_aneg = genphy_config_aneg, ++ .read_status = genphy_read_status, ++ .ack_interrupt = &at803x_ack_interrupt, ++ .config_intr = &at803x_config_intr, ++ .driver = { ++ .owner = THIS_MODULE, ++ }, + } }; + + module_phy_driver(at803x_driver); +@@ -485,6 +508,7 @@ module_phy_driver(at803x_driver); + static struct mdio_device_id __maybe_unused atheros_tbl[] = { + { ATH8030_PHY_ID, AT803X_PHY_ID_MASK }, + { ATH8031_PHY_ID, AT803X_PHY_ID_MASK }, ++ { ATH8032_PHY_ID, AT803X_PHY_ID_MASK }, + { ATH8035_PHY_ID, AT803X_PHY_ID_MASK }, + { } + };