From 0b58bc057607221120779fc57196288d5edd0f31 Mon Sep 17 00:00:00 2001 From: juhosg Date: Sat, 26 Jun 2010 19:16:34 +0000 Subject: generic: rtl8366: introduce rtl8366_smi_rmwr function git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21919 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../generic-2.6/files/drivers/net/phy/rtl8366rb.c | 97 +++++++--------------- 1 file changed, 30 insertions(+), 67 deletions(-) (limited to 'target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c') diff --git a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c index eaff759b3..83edf8f94 100644 --- a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c @@ -629,25 +629,14 @@ static int rtl8366rb_get_vlan_port_pvid(struct rtl8366_smi *smi, int port, static int rtl8366rb_set_port_vlan_index(struct rtl8366_smi *smi, int port, int index) { - u32 data; - int err; - if (port >= RTL8366_NUM_PORTS || index >= RTL8366_NUM_VLANS) return -EINVAL; - err = rtl8366_smi_read_reg(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), - &data); - if (err) - return err; - - data &= ~(RTL8366S_PORT_VLAN_CTRL_MASK << - RTL8366S_PORT_VLAN_CTRL_SHIFT(port)); - data |= (index & RTL8366S_PORT_VLAN_CTRL_MASK) << - RTL8366S_PORT_VLAN_CTRL_SHIFT(port); - - err = rtl8366_smi_write_reg(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), - data); - return err; + return rtl8366_smi_rmwr(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), + RTL8366S_PORT_VLAN_CTRL_MASK << + RTL8366S_PORT_VLAN_CTRL_SHIFT(port), + (index & RTL8366S_PORT_VLAN_CTRL_MASK) << + RTL8366S_PORT_VLAN_CTRL_SHIFT(port)); } static int rtl8366rb_set_vlan_port_pvid(struct rtl8366_smi *smi, int port, @@ -721,30 +710,16 @@ static int rtl8366rb_set_vlan_port_pvid(struct rtl8366_smi *smi, int port, static int rtl8366rb_vlan_set_vlan(struct rtl8366_smi *smi, int enable) { - u32 data = 0; - - rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data); - - if (enable) - data |= RTL8366_CHIP_CTRL_VLAN; - else - data &= ~RTL8366_CHIP_CTRL_VLAN; - - return rtl8366_smi_write_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, data); + return rtl8366_smi_rmwr(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, + RTL8366_CHIP_CTRL_VLAN, + (enable) ? RTL8366_CHIP_CTRL_VLAN : 0); } static int rtl8366rb_vlan_set_4ktable(struct rtl8366_smi *smi, int enable) { - u32 data = 0; - - rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data); - - if (enable) - data |= RTL8366_CHIP_CTRL_VLAN_4KTB; - else - data &= ~RTL8366_CHIP_CTRL_VLAN_4KTB; - - return rtl8366_smi_write_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, data); + return rtl8366_smi_rmwr(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, + RTL8366_CHIP_CTRL_VLAN_4KTB, + (enable) ? RTL8366_CHIP_CTRL_VLAN_4KTB : 0); } static int rtl8366rb_reset_vlan(struct rtl8366_smi *smi) @@ -1013,15 +988,12 @@ static int rtl8366rb_sw_reset_mibs(struct switch_dev *dev, struct switch_val *val) { struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - u32 data = 0; + int err = 0; - if (val->value.i == 1) { - rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); - data |= (1 << 2); - rtl8366_smi_write_reg(smi, RTL8366S_MIB_CTRL_REG, data); - } + if (val->value.i == 1) + err = rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 0, (1 << 2)); - return 0; + return err; } static int rtl8366rb_sw_get_vlan_enable(struct switch_dev *dev, @@ -1069,19 +1041,13 @@ static int rtl8366rb_sw_set_blinkrate(struct switch_dev *dev, struct switch_val *val) { struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - u32 data; if (val->value.i >= 6) return -EINVAL; - rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); - - data &= ~RTL8366_LED_BLINKRATE_MASK; - data |= val->value.i; - - rtl8366_smi_write_reg(smi, RTL8366_LED_BLINKRATE_REG, data); - - return 0; + return rtl8366_smi_rmwr(smi, RTL8366_LED_BLINKRATE_REG, + RTL8366_LED_BLINKRATE_MASK, + val->value.i); } static int rtl8366rb_sw_set_vlan_enable(struct switch_dev *dev, @@ -1208,23 +1174,24 @@ static int rtl8366rb_sw_set_port_led(struct switch_dev *dev, struct switch_val *val) { struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - u32 data = 0; + u32 data; + u32 mask; + u32 reg; if (val->port_vlan >= RTL8366_NUM_PORTS) return -EINVAL; if (val->port_vlan == RTL8366_PORT_NUM_CPU) { - rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); - data = (data & (~(0xF << 4))) | (val->value.i << 4); - rtl8366_smi_write_reg(smi, RTL8366_LED_BLINKRATE_REG, data); + reg = RTL8366_LED_BLINKRATE_REG; + mask = 0xF << 4; + data = val->value.i << 4; } else { - rtl8366_smi_read_reg(smi, RTL8366_LED_CTRL_REG, &data); - data = (data & (~(0xF << (val->port_vlan * 4)))) | - (val->value.i << (val->port_vlan * 4)); - rtl8366_smi_write_reg(smi, RTL8366_LED_CTRL_REG, data); + reg = RTL8366_LED_CTRL_REG; + mask = 0xF << (val->port_vlan * 4), + data = val->value.i << (val->port_vlan * 4); } - return 0; + return rtl8366_smi_rmwr(smi, RTL8366_LED_BLINKRATE_REG, mask, data); } static int rtl8366rb_sw_get_port_led(struct switch_dev *dev, @@ -1248,16 +1215,12 @@ static int rtl8366rb_sw_reset_port_mibs(struct switch_dev *dev, struct switch_val *val) { struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); - u32 data = 0; if (val->port_vlan >= RTL8366_NUM_PORTS) return -EINVAL; - rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); - data |= (1 << (val->port_vlan + 3)); - rtl8366_smi_write_reg(smi, RTL8366S_MIB_CTRL_REG, data); - - return 0; + return rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, + 0, (1 << (val->port_vlan + 3))); } static int rtl8366rb_sw_get_port_mib(struct switch_dev *dev, -- cgit v1.2.3