mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 01:22:25 +00:00
86 lines
2.3 KiB
Diff
86 lines
2.3 KiB
Diff
--- a/drivers/net/phy/Kconfig
|
|
+++ b/drivers/net/phy/Kconfig
|
|
@@ -345,6 +345,11 @@ config SFP
|
|
depends on HWMON || HWMON=n
|
|
select MDIO_I2C
|
|
|
|
+config AIROHA_AN8801_PHY
|
|
+ tristate "Drivers for Airoha AN8801 Gigabit PHYs"
|
|
+ ---help---
|
|
+ Currently supports the Airoha AN8801 PHY.
|
|
+
|
|
config AIROHA_EN8801SC_PHY
|
|
tristate "Drivers for Airoha EN8801S Gigabit PHYs for MediaTek SoC."
|
|
---help---
|
|
--- a/drivers/net/phy/Makefile
|
|
+++ b/drivers/net/phy/Makefile
|
|
@@ -74,6 +74,7 @@ endif
|
|
ifdef CONFIG_AQUANTIA_PHY_MIB
|
|
aquantia-objs += aquantia_mib.o
|
|
endif
|
|
+obj-$(CONFIG_AIROHA_AN8801_PHY) += an8801.o
|
|
obj-$(CONFIG_AIROHA_EN8801SC_PHY) += en8801sc.o
|
|
air_en8811h-y := air_en8811h_main.o air_en8811h_api.o
|
|
obj-$(CONFIG_AIROHA_EN8811H_PHY) += air_en8811h.o
|
|
--- a/drivers/net/phy/phylink.c
|
|
+++ b/drivers/net/phy/phylink.c
|
|
@@ -870,12 +870,17 @@
|
|
of_node_put(phy_node);
|
|
|
|
if (!phy_dev)
|
|
- return -ENODEV;
|
|
-
|
|
+ {
|
|
+ phylink_info(pl, "[phylink] reload phy-handle2. %s %d\n",__func__, __LINE__);
|
|
+ phy_node = of_parse_phandle(dn, "phy-handle2", 0);
|
|
+ phy_dev = of_phy_attach(pl->netdev, phy_node, flags, pl->link_interface);
|
|
+ if (!phy_dev)
|
|
+ return -ENODEV;
|
|
+ }
|
|
+
|
|
ret = phylink_bringup_phy(pl, phy_dev, pl->link_config.interface);
|
|
if (ret)
|
|
phy_detach(phy_dev);
|
|
-
|
|
return ret;
|
|
}
|
|
EXPORT_SYMBOL_GPL(phylink_of_phy_connect);
|
|
--- a/drivers/of/of_mdio.c
|
|
+++ b/drivers/of/of_mdio.c
|
|
@@ -226,7 +226,9 @@
|
|
return rc;
|
|
|
|
/* Loop over the child nodes and register a phy_device for each phy */
|
|
+ int an8801=0;
|
|
for_each_available_child_of_node(np, child) {
|
|
+ if(an8801==1)break;
|
|
addr = of_mdio_parse_addr(&mdio->dev, child);
|
|
if (addr < 0) {
|
|
scanphys = true;
|
|
@@ -234,7 +236,25 @@
|
|
}
|
|
|
|
if (of_mdiobus_child_is_phy(child))
|
|
+ {
|
|
+ if(addr==30)
|
|
+ {
|
|
+ int phy_id ;
|
|
+
|
|
+ phy_id = mdiobus_read(mdio, addr, MII_PHYSID1) << 16 ;
|
|
+ phy_id = phy_id + mdiobus_read(mdio, addr, MII_PHYSID2);
|
|
+ dev_info(&mdio->dev, "[of_mdio] %s %d addr:%d phy_id:0x%x \n",__func__, __LINE__, addr, phy_id);
|
|
+
|
|
+ if (phy_id==0 || phy_id==0x1a750000)
|
|
+ {
|
|
+ dev_info(&mdio->dev, "[of_mdio] %s %d continue \n",__func__, __LINE__);
|
|
+ continue;
|
|
+ }
|
|
+ else
|
|
+ an8801=1;
|
|
+ }
|
|
rc = of_mdiobus_register_phy(mdio, child, addr);
|
|
+ }
|
|
else
|
|
rc = of_mdiobus_register_device(mdio, child, addr);
|
|
|