generic: rtl8366: add enable_port helper
[openwrt/svn-archive/archive.git] / target / linux / generic / files / drivers / net / phy / rtl8366rb.c
index 55731baf31c6f67eebbafebc692799fd1aa8dce7..492ed25351be9c7594b8b20f3d3ab948e9e92087 100644 (file)
@@ -458,8 +458,8 @@ static int rtl8366rb_set_vlan_4k(struct rtl8366_smi *smi,
        int i;
 
        if (vlan4k->vid >= RTL8366RB_NUM_VIDS ||
-           vlan4k->member > RTL8366RB_PORT_ALL ||
-           vlan4k->untag > RTL8366RB_PORT_ALL ||
+           vlan4k->member > RTL8366RB_VLAN_MEMBER_MASK ||
+           vlan4k->untag > RTL8366RB_VLAN_UNTAG_MASK ||
            vlan4k->fid > RTL8366RB_FIDMAX)
                return -EINVAL;
 
@@ -525,8 +525,8 @@ static int rtl8366rb_set_vlan_mc(struct rtl8366_smi *smi, u32 index,
        if (index >= RTL8366RB_NUM_VLANS ||
            vlanmc->vid >= RTL8366RB_NUM_VIDS ||
            vlanmc->priority > RTL8366RB_PRIORITYMAX ||
-           vlanmc->member > RTL8366RB_PORT_ALL ||
-           vlanmc->untag > RTL8366RB_PORT_ALL ||
+           vlanmc->member > RTL8366RB_VLAN_MEMBER_MASK ||
+           vlanmc->untag > RTL8366RB_VLAN_UNTAG_MASK ||
            vlanmc->fid > RTL8366RB_FIDMAX)
                return -EINVAL;
 
@@ -607,6 +607,12 @@ static int rtl8366rb_enable_vlan4k(struct rtl8366_smi *smi, int enable)
                                (enable) ? RTL8366RB_SGCR_EN_VLAN_4KTB : 0);
 }
 
+static int rtl8366rb_enable_port(struct rtl8366_smi *smi, int port, int enable)
+{
+       return rtl8366_smi_rmwr(smi, RTL8366RB_PECR, (1 << port),
+                               (enable) ? 0 : (1 << port));
+}
+
 static int rtl8366rb_sw_reset_mibs(struct switch_dev *dev,
                                  const struct switch_attr *attr,
                                  struct switch_val *val)
@@ -1214,6 +1220,7 @@ static struct rtl8366_smi_ops rtl8366rb_smi_ops = {
        .is_vlan_valid  = rtl8366rb_is_vlan_valid,
        .enable_vlan    = rtl8366rb_enable_vlan,
        .enable_vlan4k  = rtl8366rb_enable_vlan4k,
+       .enable_port    = rtl8366rb_enable_port,
 };
 
 static int __devinit rtl8366rb_probe(struct platform_device *pdev)