Changeset 21938


Ignore:
Timestamp:
2010-06-26T21:54:05+02:00 (7 years ago)
Author:
juhosg
Message:

backfire: generic: rtl8366: introduce rtl8366_smi_rmwr function (backport of r21919)

Location:
branches/backfire/target/linux/generic-2.6/files/drivers/net/phy
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366_smi.c

    r21930 r21938  
    266266} 
    267267EXPORT_SYMBOL_GPL(rtl8366_smi_write_reg); 
     268 
     269int rtl8366_smi_rmwr(struct rtl8366_smi *smi, u32 addr, u32 mask, u32 data) 
     270{ 
     271        u32 t; 
     272        int err; 
     273 
     274        err = rtl8366_smi_read_reg(smi, addr, &t); 
     275        if (err) 
     276                return err; 
     277 
     278        err = rtl8366_smi_write_reg(smi, addr, (t & ~mask) | data); 
     279        return err; 
     280 
     281} 
     282EXPORT_SYMBOL_GPL(rtl8366_smi_rmwr); 
    268283 
    269284static int rtl8366_smi_mii_init(struct rtl8366_smi *smi) 
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366_smi.h

    r21934 r21938  
    5454int rtl8366_smi_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data); 
    5555int rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data); 
     56int rtl8366_smi_rmwr(struct rtl8366_smi *smi, u32 addr, u32 mask, u32 data); 
    5657 
    5758#endif /*  _RTL8366_SMI_H */ 
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c

    r21936 r21938  
    630630                                        int index) 
    631631{ 
    632         u32 data; 
    633         int err; 
    634  
    635632        if (port >= RTL8366_NUM_PORTS || index >= RTL8366_NUM_VLANS) 
    636633                return -EINVAL; 
    637634 
    638         err = rtl8366_smi_read_reg(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), 
    639                                    &data); 
    640         if (err) 
    641                 return err; 
    642  
    643         data &= ~(RTL8366S_PORT_VLAN_CTRL_MASK << 
    644                   RTL8366S_PORT_VLAN_CTRL_SHIFT(port)); 
    645         data |= (index & RTL8366S_PORT_VLAN_CTRL_MASK) << 
    646                  RTL8366S_PORT_VLAN_CTRL_SHIFT(port); 
    647  
    648         err = rtl8366_smi_write_reg(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), 
    649                                     data); 
    650         return err; 
     635        return rtl8366_smi_rmwr(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), 
     636                                RTL8366S_PORT_VLAN_CTRL_MASK << 
     637                                        RTL8366S_PORT_VLAN_CTRL_SHIFT(port), 
     638                                (index & RTL8366S_PORT_VLAN_CTRL_MASK) << 
     639                                        RTL8366S_PORT_VLAN_CTRL_SHIFT(port)); 
    651640} 
    652641 
     
    722711static int rtl8366rb_vlan_set_vlan(struct rtl8366_smi *smi, int enable) 
    723712{ 
    724         u32 data = 0; 
    725  
    726         rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data); 
    727  
    728         if (enable) 
    729                 data |= RTL8366_CHIP_CTRL_VLAN; 
    730         else 
    731                 data &= ~RTL8366_CHIP_CTRL_VLAN; 
    732  
    733         return rtl8366_smi_write_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, data); 
     713        return rtl8366_smi_rmwr(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, 
     714                                RTL8366_CHIP_CTRL_VLAN, 
     715                                (enable) ? RTL8366_CHIP_CTRL_VLAN : 0); 
    734716} 
    735717 
    736718static int rtl8366rb_vlan_set_4ktable(struct rtl8366_smi *smi, int enable) 
    737719{ 
    738         u32 data = 0; 
    739  
    740         rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data); 
    741  
    742         if (enable) 
    743                 data |= RTL8366_CHIP_CTRL_VLAN_4KTB; 
    744         else 
    745                 data &= ~RTL8366_CHIP_CTRL_VLAN_4KTB; 
    746  
    747         return rtl8366_smi_write_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, data); 
     720        return rtl8366_smi_rmwr(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, 
     721                                RTL8366_CHIP_CTRL_VLAN_4KTB, 
     722                                (enable) ? RTL8366_CHIP_CTRL_VLAN_4KTB : 0); 
    748723} 
    749724 
     
    1014989{ 
    1015990        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1016         u32 data = 0; 
    1017  
    1018         if (val->value.i == 1) { 
    1019                 rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); 
    1020                 data |= (1 << 2); 
    1021                 rtl8366_smi_write_reg(smi, RTL8366S_MIB_CTRL_REG, data); 
    1022         } 
    1023  
    1024         return 0; 
     991        int err = 0; 
     992 
     993        if (val->value.i == 1) 
     994                err = rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 0, (1 << 2)); 
     995 
     996        return err; 
    1025997} 
    1026998 
     
    10701042{ 
    10711043        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1072         u32 data; 
    10731044 
    10741045        if (val->value.i >= 6) 
    10751046                return -EINVAL; 
    10761047 
    1077         rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); 
    1078  
    1079         data &= ~RTL8366_LED_BLINKRATE_MASK; 
    1080         data |= val->value.i; 
    1081  
    1082         rtl8366_smi_write_reg(smi, RTL8366_LED_BLINKRATE_REG, data); 
    1083  
    1084         return 0; 
     1048        return rtl8366_smi_rmwr(smi, RTL8366_LED_BLINKRATE_REG, 
     1049                                RTL8366_LED_BLINKRATE_MASK, 
     1050                                val->value.i); 
    10851051} 
    10861052 
     
    12091175{ 
    12101176        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1211         u32 data = 0; 
     1177        u32 data; 
     1178        u32 mask; 
     1179        u32 reg; 
    12121180 
    12131181        if (val->port_vlan >= RTL8366_NUM_PORTS) 
     
    12151183 
    12161184        if (val->port_vlan == RTL8366_PORT_NUM_CPU) { 
    1217                 rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); 
    1218                 data = (data & (~(0xF << 4))) | (val->value.i << 4); 
    1219                 rtl8366_smi_write_reg(smi, RTL8366_LED_BLINKRATE_REG, data); 
     1185                reg = RTL8366_LED_BLINKRATE_REG; 
     1186                mask = 0xF << 4; 
     1187                data = val->value.i << 4; 
    12201188        } else { 
    1221                 rtl8366_smi_read_reg(smi, RTL8366_LED_CTRL_REG, &data); 
    1222                 data = (data & (~(0xF << (val->port_vlan * 4)))) | 
    1223                         (val->value.i << (val->port_vlan * 4)); 
    1224                 rtl8366_smi_write_reg(smi, RTL8366_LED_CTRL_REG, data); 
    1225         } 
    1226  
    1227         return 0; 
     1189                reg = RTL8366_LED_CTRL_REG; 
     1190                mask = 0xF << (val->port_vlan * 4), 
     1191                data = val->value.i << (val->port_vlan * 4); 
     1192        } 
     1193 
     1194        return rtl8366_smi_rmwr(smi, RTL8366_LED_BLINKRATE_REG, mask, data); 
    12281195} 
    12291196 
     
    12491216{ 
    12501217        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1251         u32 data = 0; 
    12521218 
    12531219        if (val->port_vlan >= RTL8366_NUM_PORTS) 
    12541220                return -EINVAL; 
    12551221 
    1256         rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); 
    1257         data |= (1 << (val->port_vlan + 3)); 
    1258         rtl8366_smi_write_reg(smi, RTL8366S_MIB_CTRL_REG, data); 
    1259  
    1260         return 0; 
     1222        return rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 
     1223                                0, (1 << (val->port_vlan + 3))); 
    12611224} 
    12621225 
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c

    r21937 r21938  
    618618                                        int index) 
    619619{ 
    620         u32 data; 
    621         int err; 
    622  
    623620        if (port >= RTL8366_NUM_PORTS || index >= RTL8366_NUM_VLANS) 
    624621                return -EINVAL; 
    625622 
    626         err = rtl8366_smi_read_reg(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), 
    627                                    &data); 
    628         if (err) 
    629                 return err; 
    630  
    631         data &= ~(RTL8366S_PORT_VLAN_CTRL_MASK << 
    632                   RTL8366S_PORT_VLAN_CTRL_SHIFT(port)); 
    633         data |= (index & RTL8366S_PORT_VLAN_CTRL_MASK) << 
    634                  RTL8366S_PORT_VLAN_CTRL_SHIFT(port); 
    635  
    636         err = rtl8366_smi_write_reg(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), 
    637                                     data); 
    638         return err; 
     623        return rtl8366_smi_rmwr(smi, RTL8366S_PORT_VLAN_CTRL_REG(port), 
     624                                RTL8366S_PORT_VLAN_CTRL_MASK << 
     625                                        RTL8366S_PORT_VLAN_CTRL_SHIFT(port), 
     626                                (index & RTL8366S_PORT_VLAN_CTRL_MASK) << 
     627                                        RTL8366S_PORT_VLAN_CTRL_SHIFT(port)); 
    639628} 
    640629 
     
    709698static int rtl8366s_vlan_set_vlan(struct rtl8366_smi *smi, int enable) 
    710699{ 
    711         u32 data = 0; 
    712  
    713         rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data); 
    714  
    715         if (enable) 
    716                 data |= RTL8366_CHIP_CTRL_VLAN; 
    717         else 
    718                 data &= ~RTL8366_CHIP_CTRL_VLAN; 
    719  
    720         return rtl8366_smi_write_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, data); 
     700        return rtl8366_smi_rmwr(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, 
     701                                RTL8366_CHIP_CTRL_VLAN, 
     702                                (enable) ? RTL8366_CHIP_CTRL_VLAN : 0); 
    721703} 
    722704 
    723705static int rtl8366s_vlan_set_4ktable(struct rtl8366_smi *smi, int enable) 
    724706{ 
    725         u32 data = 0; 
    726  
    727         rtl8366_smi_read_reg(smi, RTL8366S_VLAN_TB_CTRL_REG, &data); 
    728  
    729         if (enable) 
    730                 data |= 1; 
    731         else 
    732                 data &= ~1; 
    733  
    734         return rtl8366_smi_write_reg(smi, RTL8366S_VLAN_TB_CTRL_REG, data); 
     707        return rtl8366_smi_rmwr(smi, RTL8366S_VLAN_TB_CTRL_REG, 
     708                                1, (enable) ? 1 : 0); 
    735709} 
    736710 
     
    1001975{ 
    1002976        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1003         u32 data = 0; 
    1004  
    1005         if (val->value.i == 1) { 
    1006                 rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); 
    1007                 data |= (1 << 2); 
    1008                 rtl8366_smi_write_reg(smi, RTL8366S_MIB_CTRL_REG, data); 
    1009         } 
    1010  
    1011         return 0; 
     977        int err = 0; 
     978 
     979        if (val->value.i == 1) 
     980                err = rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 0, (1 << 2)); 
     981 
     982        return err; 
    1012983} 
    1013984 
     
    10571028{ 
    10581029        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1059         u32 data; 
    10601030 
    10611031        if (val->value.i >= 6) 
    10621032                return -EINVAL; 
    10631033 
    1064         rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); 
    1065  
    1066         data &= ~RTL8366_LED_BLINKRATE_MASK; 
    1067         data |= val->value.i; 
    1068  
    1069         rtl8366_smi_write_reg(smi, RTL8366_LED_BLINKRATE_REG, data); 
    1070  
    1071         return 0; 
     1034        return rtl8366_smi_rmwr(smi, RTL8366_LED_BLINKRATE_REG, 
     1035                                RTL8366_LED_BLINKRATE_MASK, 
     1036                                val->value.i); 
    10721037} 
    10731038 
     
    11961161{ 
    11971162        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1198         u32 data = 0; 
     1163        u32 data; 
     1164        u32 mask; 
     1165        u32 reg; 
    11991166 
    12001167        if (val->port_vlan >= RTL8366_NUM_PORTS || 
     
    12031170 
    12041171        if (val->port_vlan == RTL8366_PORT_NUM_CPU) { 
    1205                 rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); 
    1206                 data = (data & (~(0xF << 4))) | (val->value.i << 4); 
    1207                 rtl8366_smi_write_reg(smi, RTL8366_LED_BLINKRATE_REG, data); 
     1172                reg = RTL8366_LED_BLINKRATE_REG; 
     1173                mask = 0xF << 4; 
     1174                data = val->value.i << 4; 
    12081175        } else { 
    1209                 rtl8366_smi_read_reg(smi, RTL8366_LED_CTRL_REG, &data); 
    1210                 data = (data & (~(0xF << (val->port_vlan * 4)))) | 
    1211                         (val->value.i << (val->port_vlan * 4)); 
    1212                 rtl8366_smi_write_reg(smi, RTL8366_LED_CTRL_REG, data); 
    1213         } 
    1214  
    1215         return 0; 
     1176                reg = RTL8366_LED_CTRL_REG; 
     1177                mask = 0xF << (val->port_vlan * 4), 
     1178                data = val->value.i << (val->port_vlan * 4); 
     1179        } 
     1180 
     1181        return rtl8366_smi_rmwr(smi, RTL8366_LED_BLINKRATE_REG, mask, data); 
    12161182} 
    12171183 
     
    12371203{ 
    12381204        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    1239         u32 data = 0; 
    12401205 
    12411206        if (val->port_vlan >= RTL8366_NUM_PORTS) 
    12421207                return -EINVAL; 
    12431208 
    1244         rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); 
    1245         data |= (1 << (val->port_vlan + 3)); 
    1246         rtl8366_smi_write_reg(smi, RTL8366S_MIB_CTRL_REG, data); 
    1247  
    1248         return 0; 
     1209 
     1210        return rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 
     1211                                0, (1 << (val->port_vlan + 3))); 
    12491212} 
    12501213 
Note: See TracChangeset for help on using the changeset viewer.