aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/misc/usb251xb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/misc/usb251xb.c')
-rw-r--r--drivers/usb/misc/usb251xb.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/usb/misc/usb251xb.c b/drivers/usb/misc/usb251xb.c
index 4d6ae3795a88..6ca9111d150a 100644
--- a/drivers/usb/misc/usb251xb.c
+++ b/drivers/usb/misc/usb251xb.c
@@ -375,7 +375,8 @@ out_err:
375 375
376#ifdef CONFIG_OF 376#ifdef CONFIG_OF
377static void usb251xb_get_ports_field(struct usb251xb *hub, 377static void usb251xb_get_ports_field(struct usb251xb *hub,
378 const char *prop_name, u8 port_cnt, u8 *fld) 378 const char *prop_name, u8 port_cnt,
379 bool ds_only, u8 *fld)
379{ 380{
380 struct device *dev = hub->dev; 381 struct device *dev = hub->dev;
381 struct property *prop; 382 struct property *prop;
@@ -383,7 +384,7 @@ static void usb251xb_get_ports_field(struct usb251xb *hub,
383 u32 port; 384 u32 port;
384 385
385 of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) { 386 of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) {
386 if ((port >= 1) && (port <= port_cnt)) 387 if ((port >= ds_only ? 1 : 0) && (port <= port_cnt))
387 *fld |= BIT(port); 388 *fld |= BIT(port);
388 else 389 else
389 dev_warn(dev, "port %u doesn't exist\n", port); 390 dev_warn(dev, "port %u doesn't exist\n", port);
@@ -501,15 +502,15 @@ static int usb251xb_get_ofdata(struct usb251xb *hub,
501 502
502 hub->non_rem_dev = USB251XB_DEF_NON_REMOVABLE_DEVICES; 503 hub->non_rem_dev = USB251XB_DEF_NON_REMOVABLE_DEVICES;
503 usb251xb_get_ports_field(hub, "non-removable-ports", data->port_cnt, 504 usb251xb_get_ports_field(hub, "non-removable-ports", data->port_cnt,
504 &hub->non_rem_dev); 505 true, &hub->non_rem_dev);
505 506
506 hub->port_disable_sp = USB251XB_DEF_PORT_DISABLE_SELF; 507 hub->port_disable_sp = USB251XB_DEF_PORT_DISABLE_SELF;
507 usb251xb_get_ports_field(hub, "sp-disabled-ports", data->port_cnt, 508 usb251xb_get_ports_field(hub, "sp-disabled-ports", data->port_cnt,
508 &hub->port_disable_sp); 509 true, &hub->port_disable_sp);
509 510
510 hub->port_disable_bp = USB251XB_DEF_PORT_DISABLE_BUS; 511 hub->port_disable_bp = USB251XB_DEF_PORT_DISABLE_BUS;
511 usb251xb_get_ports_field(hub, "bp-disabled-ports", data->port_cnt, 512 usb251xb_get_ports_field(hub, "bp-disabled-ports", data->port_cnt,
512 &hub->port_disable_bp); 513 true, &hub->port_disable_bp);
513 514
514 hub->max_power_sp = USB251XB_DEF_MAX_POWER_SELF; 515 hub->max_power_sp = USB251XB_DEF_MAX_POWER_SELF;
515 if (!of_property_read_u32(np, "sp-max-total-current-microamp", 516 if (!of_property_read_u32(np, "sp-max-total-current-microamp",
@@ -573,9 +574,7 @@ static int usb251xb_get_ofdata(struct usb251xb *hub,
573 */ 574 */
574 hub->port_swap = USB251XB_DEF_PORT_SWAP; 575 hub->port_swap = USB251XB_DEF_PORT_SWAP;
575 usb251xb_get_ports_field(hub, "swap-dx-lanes", data->port_cnt, 576 usb251xb_get_ports_field(hub, "swap-dx-lanes", data->port_cnt,
576 &hub->port_swap); 577 false, &hub->port_swap);
577 if (of_get_property(np, "swap-us-lanes", NULL))
578 hub->port_swap |= BIT(0);
579 578
580 /* The following parameters are currently not exposed to devicetree, but 579 /* The following parameters are currently not exposed to devicetree, but
581 * may be as soon as needed. 580 * may be as soon as needed.