aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorJohann Neuhauser <johann@it-neuhauser.de>2018-05-17 19:12:35 +0200
committerMathias Kresin <dev@kresin.me>2018-07-18 19:17:46 +0200
commitf2f7802148f3d070b27f65b169efebfc6bf8286d (patch)
tree2ddec30b5a4d27c7a0221e6484711b219a06ad4b /target/linux
parent4c4288728611d334efb777b74e737e1f98e0dc1b (diff)
downloadupstream-f2f7802148f3d070b27f65b169efebfc6bf8286d.tar.gz
upstream-f2f7802148f3d070b27f65b169efebfc6bf8286d.tar.bz2
upstream-f2f7802148f3d070b27f65b169efebfc6bf8286d.zip
lantiq: etop: pass devicetree node to phy driver
Use of_mdiobus_register() to pass the ethernet phy node to the phy drivers. This is needed for the at8030 phy driver which needs to know the GPIO which is connected to the ar8030 reset pin. This driver expects a child in gsw/etop node named "mdio-bus", which has the ethernet phys defined: &gsw { phy-mode = "rmii"; phy-handle = <&phy0>; mtd-mac-address = <&ath9k_cal 0xa91>; mtd-mac-address-increment = <(-2)>; mdio-bus { #address-cells = <1>; #size-cells = <0>; reg = <0>; phy0: ethernet-phy@0 { reg = <0>; reset-gpios = <&gpio 34 GPIO_ACTIVE_LOW>; }; }; }; Fallback to mdiobus_register() if no mdio-bus child node exists. This way we don't need to touch all xway dts files, for which we don't know the actual address on the mdio bus. Signed-off-by: Johann Neuhauser <johann@it-neuhauser.de>
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/lantiq/patches-4.14/0701-NET-lantiq-etop-of-mido.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/target/linux/lantiq/patches-4.14/0701-NET-lantiq-etop-of-mido.patch b/target/linux/lantiq/patches-4.14/0701-NET-lantiq-etop-of-mido.patch
new file mode 100644
index 0000000000..5dc4b81522
--- /dev/null
+++ b/target/linux/lantiq/patches-4.14/0701-NET-lantiq-etop-of-mido.patch
@@ -0,0 +1,37 @@
+--- a/drivers/net/ethernet/lantiq_etop.c
++++ b/drivers/net/ethernet/lantiq_etop.c
+@@ -40,6 +40,7 @@
+ #include <linux/of_net.h>
+ #include <linux/of_irq.h>
+ #include <linux/of_platform.h>
++#include <linux/of_mdio.h>
+
+ #include <asm/checksum.h>
+
+@@ -567,7 +568,8 @@ static int
+ ltq_etop_mdio_init(struct net_device *dev)
+ {
+ struct ltq_etop_priv *priv = netdev_priv(dev);
+- int err;
++ struct device_node *mdio_np = NULL;
++ int err, ret;
+
+ priv->mii_bus = mdiobus_alloc();
+ if (!priv->mii_bus) {
+@@ -587,7 +589,15 @@ ltq_etop_mdio_init(struct net_device *de
+ priv->mii_bus->name = "ltq_mii";
+ snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
+ priv->pdev->name, priv->pdev->id);
+- if (mdiobus_register(priv->mii_bus)) {
++
++ mdio_np = of_get_child_by_name(priv->pdev->dev.of_node, "mdio-bus");
++
++ if (mdio_np)
++ ret = of_mdiobus_register(priv->mii_bus, mdio_np);
++ else
++ ret = mdiobus_register(priv->mii_bus);
++
++ if (ret) {
+ err = -ENXIO;
+ goto err_out_free_mdiobus;
+ }