diff options
Diffstat (limited to 'drivers/net/dsa/microchip/ksz_common.c')
| -rw-r--r-- | drivers/net/dsa/microchip/ksz_common.c | 17 | 
1 files changed, 16 insertions, 1 deletions
| diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 8d53b12d40a8..c796d42730ba 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -387,7 +387,9 @@ EXPORT_SYMBOL(ksz_switch_alloc);  int ksz_switch_register(struct ksz_device *dev,  			const struct ksz_dev_ops *ops)  { +	struct device_node *port, *ports;  	phy_interface_t interface; +	unsigned int port_num;  	int ret;  	if (dev->pdata) @@ -421,10 +423,23 @@ 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; +		ports = of_get_child_by_name(dev->dev->of_node, "ports"); +		if (ports) +			for_each_available_child_of_node(ports, 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");  	} |