From e931ffd678298d07d90618bb4e0685e6e1235301 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Sun, 29 Apr 2012 18:29:31 +0000 Subject: [PATCH] linux: rtl836x: add a generic reset_switch function SVN-Revision: 31536 --- .../files/drivers/net/phy/rtl8366_smi.c | 25 +++++++++++++++++ .../files/drivers/net/phy/rtl8366_smi.h | 1 + .../generic/files/drivers/net/phy/rtl8366rb.c | 26 +----------------- .../generic/files/drivers/net/phy/rtl8366s.c | 26 +----------------- .../generic/files/drivers/net/phy/rtl8367.c | 27 +------------------ 5 files changed, 29 insertions(+), 76 deletions(-) diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c index 434cbfbb85..271e2b513a 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c @@ -933,6 +933,31 @@ static void rtl8366_smi_mii_cleanup(struct rtl8366_smi *smi) mdiobus_free(smi->mii_bus); } +int rtl8366_sw_reset_switch(struct switch_dev *dev) +{ + struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); + int err; + + err = smi->ops->reset_chip(smi); + if (err) + return err; + + err = smi->ops->setup(smi); + if (err) + return err; + + err = rtl8366_reset_vlan(smi); + if (err) + return err; + + err = rtl8366_enable_vlan(smi, 1); + if (err) + return err; + + return rtl8366_enable_all_ports(smi, 1); +} +EXPORT_SYMBOL_GPL(rtl8366_sw_reset_switch); + int rtl8366_sw_get_port_pvid(struct switch_dev *dev, int port, int *val) { struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h index 1105ce47fc..5c60a3093f 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h @@ -121,6 +121,7 @@ static inline struct rtl8366_smi *sw_to_rtl8366_smi(struct switch_dev *sw) return container_of(sw, struct rtl8366_smi, sw_dev); } +int rtl8366_sw_reset_switch(struct switch_dev *dev); int rtl8366_sw_get_port_pvid(struct switch_dev *dev, int port, int *val); int rtl8366_sw_set_port_pvid(struct switch_dev *dev, int port, int val); int rtl8366_sw_get_port_mib(struct switch_dev *dev, diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c index 2323abf3b5..3901602f93 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c @@ -933,30 +933,6 @@ static int rtl8366rb_sw_reset_port_mibs(struct switch_dev *dev, RTL8366RB_MIB_CTRL_PORT_RESET(val->port_vlan)); } -static int rtl8366rb_sw_reset_switch(struct switch_dev *dev) -{ - struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - int err; - - err = rtl8366rb_reset_chip(smi); - if (err) - return err; - - err = rtl8366rb_setup(smi); - if (err) - return err; - - err = rtl8366_reset_vlan(smi); - if (err) - return err; - - err = rtl8366_enable_vlan(smi, 1); - if (err) - return err; - - return rtl8366_enable_all_ports(smi, 1); -} - static struct switch_attr rtl8366rb_globals[] = { { .type = SWITCH_TYPE_INT, @@ -1084,7 +1060,7 @@ static const struct switch_dev_ops rtl8366_ops = { .set_vlan_ports = rtl8366_sw_set_vlan_ports, .get_port_pvid = rtl8366_sw_get_port_pvid, .set_port_pvid = rtl8366_sw_set_port_pvid, - .reset_switch = rtl8366rb_sw_reset_switch, + .reset_switch = rtl8366_sw_reset_switch, .get_port_link = rtl8366rb_sw_get_port_link, }; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c index b31d0be2f5..21f743926a 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c @@ -833,30 +833,6 @@ static int rtl8366s_sw_reset_port_mibs(struct switch_dev *dev, 0, (1 << (val->port_vlan + 3))); } -static int rtl8366s_sw_reset_switch(struct switch_dev *dev) -{ - struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - int err; - - err = rtl8366s_reset_chip(smi); - if (err) - return err; - - err = rtl8366s_setup(smi); - if (err) - return err; - - err = rtl8366_reset_vlan(smi); - if (err) - return err; - - err = rtl8366_enable_vlan(smi, 1); - if (err) - return err; - - return rtl8366_enable_all_ports(smi, 1); -} - static struct switch_attr rtl8366s_globals[] = { { .type = SWITCH_TYPE_INT, @@ -964,7 +940,7 @@ static const struct switch_dev_ops rtl8366_ops = { .set_vlan_ports = rtl8366_sw_set_vlan_ports, .get_port_pvid = rtl8366_sw_get_port_pvid, .set_port_pvid = rtl8366_sw_set_port_pvid, - .reset_switch = rtl8366s_sw_reset_switch, + .reset_switch = rtl8366_sw_reset_switch, .get_port_link = rtl8366s_sw_get_port_link, }; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367.c b/target/linux/generic/files/drivers/net/phy/rtl8367.c index 9959ee3dae..d60af022a7 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8367.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8367.c @@ -1475,31 +1475,6 @@ static int rtl8367_sw_reset_port_mibs(struct switch_dev *dev, RTL8367_MIB_CTRL_PORT_RESET_MASK(port % 8)); } -static int rtl8367_sw_reset_switch(struct switch_dev *dev) -{ - struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - int err; - - err = rtl8367_reset_chip(smi); - if (err) - return err; - - - err = rtl8367_setup(smi); - if (err) - return err; - - err = rtl8366_reset_vlan(smi); - if (err) - return err; - - err = rtl8366_enable_vlan(smi, 1); - if (err) - return err; - - return rtl8366_enable_all_ports(smi, 1); -} - static struct switch_attr rtl8367_globals[] = { { .type = SWITCH_TYPE_INT, @@ -1578,7 +1553,7 @@ static const struct switch_dev_ops rtl8366m_ops = { .set_vlan_ports = rtl8366_sw_set_vlan_ports, .get_port_pvid = rtl8366_sw_get_port_pvid, .set_port_pvid = rtl8366_sw_set_port_pvid, - .reset_switch = rtl8367_sw_reset_switch, + .reset_switch = rtl8366_sw_reset_switch, .get_port_link = rtl8367_sw_get_port_link, }; -- 2.30.2