[OpenWrt-Devel] [PATCH 2/2] b53: support setting port link state

Rafał Miłecki zajec5 at gmail.com
Wed Jan 6 14:02:48 EST 2016


Signed-off-by: Rafał Miłecki <zajec5 at gmail.com>
---
 .../generic/files/drivers/net/phy/b53/b53_common.c | 40 ++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
index 859d8d1..42a1679 100644
--- a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
+++ b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
@@ -25,6 +25,7 @@
 #include <linux/module.h>
 #include <linux/switch.h>
 #include <linux/platform_data/b53.h>
+#include <uapi/linux/mii.h>
 
 #include "b53_regs.h"
 #include "b53_priv.h"
@@ -794,6 +795,42 @@ static int b53_port_get_link(struct switch_dev *dev, int port,
 
 }
 
+static int b53_port_set_link(struct switch_dev *dev, int port,
+			     struct switch_port_link *link)
+{
+	struct b53_device *priv = sw_to_b53(dev);
+
+	if (!priv->ops->phy_write16)
+		return -ENOTSUPP;
+
+	if (link->aneg) {
+		b53_phy_write16(priv, port, MII_BMCR, 0x0000);
+		b53_phy_write16(priv, port, MII_BMCR, BMCR_ANENABLE | BMCR_ANRESTART);
+	} else {
+		u16 bmcr = 0;
+
+		if (link->duplex)
+			bmcr |= BMCR_FULLDPLX;
+
+		switch (link->speed) {
+		case SWITCH_PORT_SPEED_10:
+			break;
+		case SWITCH_PORT_SPEED_100:
+			bmcr |= BMCR_SPEED100;
+			break;
+		case SWITCH_PORT_SPEED_1000:
+			bmcr |= BMCR_SPEED1000;
+			break;
+		default:
+			return -ENOTSUPP;
+		}
+
+		b53_phy_write16(priv, port, MII_BMCR, bmcr);
+	}
+
+	return 0;
+}
+
 static int b53_global_reset_switch(struct switch_dev *dev)
 {
 	struct b53_device *priv = sw_to_b53(dev);
@@ -1002,6 +1039,7 @@ static const struct switch_dev_ops b53_switch_ops_25 = {
 	.apply_config = b53_global_apply_config,
 	.reset_switch = b53_global_reset_switch,
 	.get_port_link = b53_port_get_link,
+	.set_port_link = b53_port_set_link,
 };
 
 static const struct switch_dev_ops b53_switch_ops_65 = {
@@ -1025,6 +1063,7 @@ static const struct switch_dev_ops b53_switch_ops_65 = {
 	.apply_config = b53_global_apply_config,
 	.reset_switch = b53_global_reset_switch,
 	.get_port_link = b53_port_get_link,
+	.set_port_link = b53_port_set_link,
 };
 
 static const struct switch_dev_ops b53_switch_ops = {
@@ -1048,6 +1087,7 @@ static const struct switch_dev_ops b53_switch_ops = {
 	.apply_config = b53_global_apply_config,
 	.reset_switch = b53_global_reset_switch,
 	.get_port_link = b53_port_get_link,
+	.set_port_link = b53_port_set_link,
 };
 
 struct b53_chip_data {
-- 
1.8.4.5
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list