mpc85xx: fix up kernel config and make the target boot on the MPC8568E-MDS-PB board
[openwrt.git] / target / linux / generic / files / drivers / net / phy / rtl8366s.c
index 896333c..f9a4c8c 100644 (file)
@@ -25,6 +25,7 @@
 #define RTL8366S_PHY_NO_MAX    4
 #define RTL8366S_PHY_PAGE_MAX  7
 #define RTL8366S_PHY_ADDR_MAX  31
+#define RTL8366S_PHY_WAN       4
 
 /* Switch Global Configuration register */
 #define RTL8366S_SGCR                          0x0000
@@ -593,7 +594,12 @@ static int rtl8366s_enable_vlan4k(struct rtl8366_smi *smi, int enable)
 
 static int rtl8366s_is_vlan_valid(struct rtl8366_smi *smi, unsigned vlan)
 {
-       if (vlan == 0 || vlan >= RTL8366S_NUM_VLANS)
+       unsigned max = RTL8366S_NUM_VLANS;
+
+       if (smi->vlan4k_enabled)
+               max = RTL8366S_NUM_VIDS - 1;
+
+       if (vlan == 0 || vlan >= max)
                return 0;
 
        return 1;
@@ -909,7 +915,7 @@ static int rtl8366s_switch_init(struct rtl8366_smi *smi)
        dev->name = "RTL8366S";
        dev->cpu_port = RTL8366S_PORT_NUM_CPU;
        dev->ports = RTL8366S_NUM_PORTS;
-       dev->vlans = RTL8366S_NUM_VLANS;
+       dev->vlans = RTL8366S_NUM_VIDS;
        dev->ops = &rtl8366_ops;
        dev->devname = dev_name(smi->parent);
 
@@ -1021,7 +1027,7 @@ static struct rtl8366_smi_ops rtl8366s_smi_ops = {
        .enable_vlan4k  = rtl8366s_enable_vlan4k,
 };
 
-static int __init rtl8366s_probe(struct platform_device *pdev)
+static int __devinit rtl8366s_probe(struct platform_device *pdev)
 {
        static int rtl8366_smi_version_printed;
        struct rtl8366s_platform_data *pdata;
@@ -1085,6 +1091,10 @@ static int rtl8366s_phy_config_init(struct phy_device *phydev)
 
 static int rtl8366s_phy_config_aneg(struct phy_device *phydev)
 {
+       /* phy 4 might be connected to a second mac, allow aneg config */
+       if (phydev->addr == RTL8366S_PHY_WAN)
+               return genphy_config_aneg(phydev);
+
        return 0;
 }
 
This page took 0.022883 seconds and 4 git commands to generate.