|
@@ -574,7 +574,7 @@ static int dsa_of_probe(struct device *dev)
|
|
|
{
|
|
|
struct device_node *np = dev->of_node;
|
|
|
struct device_node *child, *mdio, *ethernet, *port, *link;
|
|
|
- struct mii_bus *mdio_bus;
|
|
|
+ struct mii_bus *mdio_bus, *mdio_bus_switch;
|
|
|
struct net_device *ethernet_dev;
|
|
|
struct dsa_platform_data *pd;
|
|
|
struct dsa_chip_data *cd;
|
|
@@ -636,6 +636,16 @@ static int dsa_of_probe(struct device *dev)
|
|
|
if (!of_property_read_u32(child, "eeprom-length", &eeprom_len))
|
|
|
cd->eeprom_len = eeprom_len;
|
|
|
|
|
|
+ mdio = of_parse_phandle(child, "mii-bus", 0);
|
|
|
+ if (mdio) {
|
|
|
+ mdio_bus_switch = of_mdio_find_bus(mdio);
|
|
|
+ if (!mdio_bus_switch) {
|
|
|
+ ret = -EPROBE_DEFER;
|
|
|
+ goto out_free_chip;
|
|
|
+ }
|
|
|
+ cd->host_dev = &mdio_bus_switch->dev;
|
|
|
+ }
|
|
|
+
|
|
|
for_each_available_child_of_node(child, port) {
|
|
|
port_reg = of_get_property(port, "reg", NULL);
|
|
|
if (!port_reg)
|