diff options
Diffstat (limited to 'drivers/usb/misc/usb251xb.c')
-rw-r--r-- | drivers/usb/misc/usb251xb.c | 15 |
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 |
377 | static void usb251xb_get_ports_field(struct usb251xb *hub, | 377 | static 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. |