net: dsa: microchip: look for phy-mode in port nodes
[linux-2.6-microblaze.git] / drivers / net / dsa / microchip / ksz_common.c
index 8d53b12..8e755b5 100644 (file)
@@ -388,6 +388,8 @@ int ksz_switch_register(struct ksz_device *dev,
                        const struct ksz_dev_ops *ops)
 {
        phy_interface_t interface;
+       struct device_node *port;
+       unsigned int port_num;
        int ret;
 
        if (dev->pdata)
@@ -421,10 +423,19 @@ int ksz_switch_register(struct ksz_device *dev,
        /* Host port interface will be self detected, or specifically set in
         * device tree.
         */
+       for (port_num = 0; port_num < dev->port_cnt; ++port_num)
+               dev->ports[port_num].interface = PHY_INTERFACE_MODE_NA;
        if (dev->dev->of_node) {
                ret = of_get_phy_mode(dev->dev->of_node, &interface);
                if (ret == 0)
-                       dev->interface = interface;
+                       dev->compat_interface = interface;
+               for_each_available_child_of_node(dev->dev->of_node, port) {
+                       if (of_property_read_u32(port, "reg", &port_num))
+                               continue;
+                       if (port_num >= dev->port_cnt)
+                               return -EINVAL;
+                       of_get_phy_mode(port, &dev->ports[port_num].interface);
+               }
                dev->synclko_125 = of_property_read_bool(dev->dev->of_node,
                                                         "microchip,synclko-125");
        }