1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * usb port device code 4 * 5 * Copyright (C) 2012 Intel Corp 6 * 7 * Author: Lan Tianyu <tianyu.lan@intel.com> 8 */ 9 10 #include <linux/kstrtox.h> 11 #include <linux/slab.h> 12 #include <linux/sysfs.h> 13 #include <linux/pm_qos.h> 14 #include <linux/component.h> 15 #include <linux/usb/of.h> 16 17 #include "hub.h" 18 19 static int usb_port_block_power_off; 20 21 static const struct attribute_group *port_dev_group[]; 22 23 static ssize_t early_stop_show(struct device *dev, 24 struct device_attribute *attr, char *buf) 25 { 26 struct usb_port *port_dev = to_usb_port(dev); 27 28 return sysfs_emit(buf, "%s\n", port_dev->early_stop ? "yes" : "no"); 29 } 30 31 static ssize_t early_stop_store(struct device *dev, struct device_attribute *attr, 32 const char *buf, size_t count) 33 { 34 struct usb_port *port_dev = to_usb_port(dev); 35 bool value; 36 37 if (kstrtobool(buf, &value)) 38 return -EINVAL; 39 40 if (value) 41 port_dev->early_stop = 1; 42 else 43 port_dev->early_stop = 0; 44 45 return count; 46 } 47 static DEVICE_ATTR_RW(early_stop); 48 49 static ssize_t disable_show(struct device *dev, 50 struct device_attribute *attr, char *buf) 51 { 52 struct usb_port *port_dev = to_usb_port(dev); 53 struct usb_device *hdev = to_usb_device(dev->parent->parent); 54 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 55 struct usb_interface *intf = to_usb_interface(dev->parent); 56 int port1 = port_dev->portnum; 57 u16 portstatus, unused; 58 bool disabled; 59 int rc; 60 struct kernfs_node *kn; 61 62 if (!hub) 63 return -ENODEV; 64 hub_get(hub); 65 rc = usb_autopm_get_interface(intf); 66 if (rc < 0) 67 goto out_hub_get; 68 69 /* 70 * Prevent deadlock if another process is concurrently 71 * trying to unregister hdev. 72 */ 73 kn = sysfs_break_active_protection(&dev->kobj, &attr->attr); 74 if (!kn) { 75 rc = -ENODEV; 76 goto out_autopm; 77 } 78 usb_lock_device(hdev); 79 if (hub->disconnected) { 80 rc = -ENODEV; 81 goto out_hdev_lock; 82 } 83 84 usb_hub_port_status(hub, port1, &portstatus, &unused); 85 disabled = !usb_port_is_power_on(hub, portstatus); 86 87 out_hdev_lock: 88 usb_unlock_device(hdev); 89 sysfs_unbreak_active_protection(kn); 90 out_autopm: 91 usb_autopm_put_interface(intf); 92 out_hub_get: 93 hub_put(hub); 94 95 if (rc) 96 return rc; 97 98 return sysfs_emit(buf, "%s\n", disabled ? "1" : "0"); 99 } 100 101 static ssize_t disable_store(struct device *dev, struct device_attribute *attr, 102 const char *buf, size_t count) 103 { 104 struct usb_port *port_dev = to_usb_port(dev); 105 struct usb_device *hdev = to_usb_device(dev->parent->parent); 106 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 107 struct usb_interface *intf = to_usb_interface(dev->parent); 108 int port1 = port_dev->portnum; 109 bool disabled; 110 int rc; 111 struct kernfs_node *kn; 112 113 if (!hub) 114 return -ENODEV; 115 rc = kstrtobool(buf, &disabled); 116 if (rc) 117 return rc; 118 119 hub_get(hub); 120 rc = usb_autopm_get_interface(intf); 121 if (rc < 0) 122 goto out_hub_get; 123 124 /* 125 * Prevent deadlock if another process is concurrently 126 * trying to unregister hdev. 127 */ 128 kn = sysfs_break_active_protection(&dev->kobj, &attr->attr); 129 if (!kn) { 130 rc = -ENODEV; 131 goto out_autopm; 132 } 133 usb_lock_device(hdev); 134 if (hub->disconnected) { 135 rc = -ENODEV; 136 goto out_hdev_lock; 137 } 138 139 if (disabled && port_dev->child) 140 usb_disconnect(&port_dev->child); 141 142 rc = usb_hub_set_port_power(hdev, hub, port1, !disabled); 143 144 if (disabled) { 145 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION); 146 if (!port_dev->is_superspeed) 147 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); 148 } 149 150 if (!rc) 151 rc = count; 152 153 out_hdev_lock: 154 usb_unlock_device(hdev); 155 sysfs_unbreak_active_protection(kn); 156 out_autopm: 157 usb_autopm_put_interface(intf); 158 out_hub_get: 159 hub_put(hub); 160 161 return rc; 162 } 163 static DEVICE_ATTR_RW(disable); 164 165 static ssize_t location_show(struct device *dev, 166 struct device_attribute *attr, char *buf) 167 { 168 struct usb_port *port_dev = to_usb_port(dev); 169 170 return sysfs_emit(buf, "0x%08x\n", port_dev->location); 171 } 172 static DEVICE_ATTR_RO(location); 173 174 static ssize_t connect_type_show(struct device *dev, 175 struct device_attribute *attr, char *buf) 176 { 177 struct usb_port *port_dev = to_usb_port(dev); 178 char *result; 179 180 switch (port_dev->connect_type) { 181 case USB_PORT_CONNECT_TYPE_HOT_PLUG: 182 result = "hotplug"; 183 break; 184 case USB_PORT_CONNECT_TYPE_HARD_WIRED: 185 result = "hardwired"; 186 break; 187 case USB_PORT_NOT_USED: 188 result = "not used"; 189 break; 190 default: 191 result = "unknown"; 192 break; 193 } 194 195 return sysfs_emit(buf, "%s\n", result); 196 } 197 static DEVICE_ATTR_RO(connect_type); 198 199 static ssize_t state_show(struct device *dev, 200 struct device_attribute *attr, char *buf) 201 { 202 struct usb_port *port_dev = to_usb_port(dev); 203 enum usb_device_state state = READ_ONCE(port_dev->state); 204 205 return sysfs_emit(buf, "%s\n", usb_state_string(state)); 206 } 207 static DEVICE_ATTR_RO(state); 208 209 static ssize_t over_current_count_show(struct device *dev, 210 struct device_attribute *attr, char *buf) 211 { 212 struct usb_port *port_dev = to_usb_port(dev); 213 214 return sysfs_emit(buf, "%u\n", port_dev->over_current_count); 215 } 216 static DEVICE_ATTR_RO(over_current_count); 217 218 static ssize_t quirks_show(struct device *dev, 219 struct device_attribute *attr, char *buf) 220 { 221 struct usb_port *port_dev = to_usb_port(dev); 222 223 return sysfs_emit(buf, "%08x\n", port_dev->quirks); 224 } 225 226 static ssize_t quirks_store(struct device *dev, struct device_attribute *attr, 227 const char *buf, size_t count) 228 { 229 struct usb_port *port_dev = to_usb_port(dev); 230 u32 value; 231 232 if (kstrtou32(buf, 16, &value)) 233 return -EINVAL; 234 235 port_dev->quirks = value; 236 return count; 237 } 238 static DEVICE_ATTR_RW(quirks); 239 240 static ssize_t usb3_lpm_permit_show(struct device *dev, 241 struct device_attribute *attr, char *buf) 242 { 243 struct usb_port *port_dev = to_usb_port(dev); 244 const char *p; 245 246 if (port_dev->usb3_lpm_u1_permit) { 247 if (port_dev->usb3_lpm_u2_permit) 248 p = "u1_u2"; 249 else 250 p = "u1"; 251 } else { 252 if (port_dev->usb3_lpm_u2_permit) 253 p = "u2"; 254 else 255 p = "0"; 256 } 257 258 return sysfs_emit(buf, "%s\n", p); 259 } 260 261 static ssize_t usb3_lpm_permit_store(struct device *dev, 262 struct device_attribute *attr, 263 const char *buf, size_t count) 264 { 265 struct usb_port *port_dev = to_usb_port(dev); 266 struct usb_device *udev = port_dev->child; 267 struct usb_hcd *hcd; 268 269 if (!strncmp(buf, "u1_u2", 5)) { 270 port_dev->usb3_lpm_u1_permit = 1; 271 port_dev->usb3_lpm_u2_permit = 1; 272 273 } else if (!strncmp(buf, "u1", 2)) { 274 port_dev->usb3_lpm_u1_permit = 1; 275 port_dev->usb3_lpm_u2_permit = 0; 276 277 } else if (!strncmp(buf, "u2", 2)) { 278 port_dev->usb3_lpm_u1_permit = 0; 279 port_dev->usb3_lpm_u2_permit = 1; 280 281 } else if (!strncmp(buf, "0", 1)) { 282 port_dev->usb3_lpm_u1_permit = 0; 283 port_dev->usb3_lpm_u2_permit = 0; 284 } else 285 return -EINVAL; 286 287 /* If device is connected to the port, disable or enable lpm 288 * to make new u1 u2 setting take effect immediately. 289 */ 290 if (udev) { 291 hcd = bus_to_hcd(udev->bus); 292 if (!hcd) 293 return -EINVAL; 294 usb_lock_device(udev); 295 mutex_lock(hcd->bandwidth_mutex); 296 if (!usb_disable_lpm(udev)) 297 usb_enable_lpm(udev); 298 mutex_unlock(hcd->bandwidth_mutex); 299 usb_unlock_device(udev); 300 } 301 302 return count; 303 } 304 static DEVICE_ATTR_RW(usb3_lpm_permit); 305 306 static struct attribute *port_dev_attrs[] = { 307 &dev_attr_connect_type.attr, 308 &dev_attr_state.attr, 309 &dev_attr_location.attr, 310 &dev_attr_quirks.attr, 311 &dev_attr_over_current_count.attr, 312 &dev_attr_disable.attr, 313 &dev_attr_early_stop.attr, 314 NULL, 315 }; 316 317 static const struct attribute_group port_dev_attr_grp = { 318 .attrs = port_dev_attrs, 319 }; 320 321 static const struct attribute_group *port_dev_group[] = { 322 &port_dev_attr_grp, 323 NULL, 324 }; 325 326 static struct attribute *port_dev_usb3_attrs[] = { 327 &dev_attr_usb3_lpm_permit.attr, 328 NULL, 329 }; 330 331 static const struct attribute_group port_dev_usb3_attr_grp = { 332 .attrs = port_dev_usb3_attrs, 333 }; 334 335 static const struct attribute_group *port_dev_usb3_group[] = { 336 &port_dev_attr_grp, 337 &port_dev_usb3_attr_grp, 338 NULL, 339 }; 340 341 static void usb_port_device_release(struct device *dev) 342 { 343 struct usb_port *port_dev = to_usb_port(dev); 344 345 kfree(port_dev->req); 346 kfree(port_dev); 347 } 348 349 #ifdef CONFIG_PM 350 static int usb_port_runtime_resume(struct device *dev) 351 { 352 struct usb_port *port_dev = to_usb_port(dev); 353 struct usb_device *hdev = to_usb_device(dev->parent->parent); 354 struct usb_interface *intf = to_usb_interface(dev->parent); 355 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 356 struct usb_device *udev = port_dev->child; 357 struct usb_port *peer = port_dev->peer; 358 int port1 = port_dev->portnum; 359 int retval; 360 361 if (!hub) 362 return -EINVAL; 363 if (hub->in_reset) { 364 set_bit(port1, hub->power_bits); 365 return 0; 366 } 367 368 /* 369 * Power on our usb3 peer before this usb2 port to prevent a usb3 370 * device from degrading to its usb2 connection 371 */ 372 if (!port_dev->is_superspeed && peer) 373 pm_runtime_get_sync(&peer->dev); 374 375 retval = usb_autopm_get_interface(intf); 376 if (retval < 0) 377 return retval; 378 379 retval = usb_hub_set_port_power(hdev, hub, port1, true); 380 msleep(hub_power_on_good_delay(hub)); 381 if (udev && !retval) { 382 /* 383 * Our preference is to simply wait for the port to reconnect, 384 * as that is the lowest latency method to restart the port. 385 * However, there are cases where toggling port power results in 386 * the host port and the device port getting out of sync causing 387 * a link training live lock. Upon timeout, flag the port as 388 * needing warm reset recovery (to be performed later by 389 * usb_port_resume() as requested via usb_wakeup_notification()) 390 */ 391 if (hub_port_debounce_be_connected(hub, port1) < 0) { 392 dev_dbg(&port_dev->dev, "reconnect timeout\n"); 393 if (hub_is_superspeed(hdev)) 394 set_bit(port1, hub->warm_reset_bits); 395 } 396 397 /* Force the child awake to revalidate after the power loss. */ 398 if (!test_and_set_bit(port1, hub->child_usage_bits)) { 399 pm_runtime_get_noresume(&port_dev->dev); 400 pm_request_resume(&udev->dev); 401 } 402 } 403 404 usb_autopm_put_interface(intf); 405 406 return retval; 407 } 408 409 static int usb_port_runtime_suspend(struct device *dev) 410 { 411 struct usb_port *port_dev = to_usb_port(dev); 412 struct usb_device *hdev = to_usb_device(dev->parent->parent); 413 struct usb_interface *intf = to_usb_interface(dev->parent); 414 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 415 struct usb_port *peer = port_dev->peer; 416 int port1 = port_dev->portnum; 417 int retval; 418 419 if (!hub) 420 return -EINVAL; 421 if (hub->in_reset) 422 return -EBUSY; 423 424 if (dev_pm_qos_flags(&port_dev->dev, PM_QOS_FLAG_NO_POWER_OFF) 425 == PM_QOS_FLAGS_ALL) 426 return -EAGAIN; 427 428 if (usb_port_block_power_off) 429 return -EBUSY; 430 431 retval = usb_autopm_get_interface(intf); 432 if (retval < 0) 433 return retval; 434 435 retval = usb_hub_set_port_power(hdev, hub, port1, false); 436 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION); 437 if (!port_dev->is_superspeed) 438 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); 439 usb_autopm_put_interface(intf); 440 441 /* 442 * Our peer usb3 port may now be able to suspend, so 443 * asynchronously queue a suspend request to observe that this 444 * usb2 port is now off. 445 */ 446 if (!port_dev->is_superspeed && peer) 447 pm_runtime_put(&peer->dev); 448 449 return retval; 450 } 451 #endif 452 453 static void usb_port_shutdown(struct device *dev) 454 { 455 struct usb_port *port_dev = to_usb_port(dev); 456 struct usb_device *udev = port_dev->child; 457 458 if (udev && !udev->port_is_suspended) { 459 usb_disable_usb2_hardware_lpm(udev); 460 usb_unlocked_disable_lpm(udev); 461 } 462 } 463 464 static const struct dev_pm_ops usb_port_pm_ops = { 465 #ifdef CONFIG_PM 466 .runtime_suspend = usb_port_runtime_suspend, 467 .runtime_resume = usb_port_runtime_resume, 468 #endif 469 }; 470 471 const struct device_type usb_port_device_type = { 472 .name = "usb_port", 473 .release = usb_port_device_release, 474 .pm = &usb_port_pm_ops, 475 }; 476 477 static struct device_driver usb_port_driver = { 478 .name = "usb", 479 .owner = THIS_MODULE, 480 .shutdown = usb_port_shutdown, 481 }; 482 483 static int link_peers(struct usb_port *left, struct usb_port *right) 484 { 485 struct usb_port *ss_port, *hs_port; 486 int rc; 487 488 if (left->peer == right && right->peer == left) 489 return 0; 490 491 if (left->peer || right->peer) { 492 struct usb_port *lpeer = left->peer; 493 struct usb_port *rpeer = right->peer; 494 char *method; 495 496 if (left->location && left->location == right->location) 497 method = "location"; 498 else 499 method = "default"; 500 501 pr_debug("usb: failed to peer %s and %s by %s (%s:%s) (%s:%s)\n", 502 dev_name(&left->dev), dev_name(&right->dev), method, 503 dev_name(&left->dev), 504 lpeer ? dev_name(&lpeer->dev) : "none", 505 dev_name(&right->dev), 506 rpeer ? dev_name(&rpeer->dev) : "none"); 507 return -EBUSY; 508 } 509 510 rc = sysfs_create_link(&left->dev.kobj, &right->dev.kobj, "peer"); 511 if (rc) 512 return rc; 513 rc = sysfs_create_link(&right->dev.kobj, &left->dev.kobj, "peer"); 514 if (rc) { 515 sysfs_remove_link(&left->dev.kobj, "peer"); 516 return rc; 517 } 518 519 /* 520 * We need to wake the HiSpeed port to make sure we don't race 521 * setting ->peer with usb_port_runtime_suspend(). Otherwise we 522 * may miss a suspend event for the SuperSpeed port. 523 */ 524 if (left->is_superspeed) { 525 ss_port = left; 526 WARN_ON(right->is_superspeed); 527 hs_port = right; 528 } else { 529 ss_port = right; 530 WARN_ON(!right->is_superspeed); 531 hs_port = left; 532 } 533 pm_runtime_get_sync(&hs_port->dev); 534 535 left->peer = right; 536 right->peer = left; 537 538 /* 539 * The SuperSpeed reference is dropped when the HiSpeed port in 540 * this relationship suspends, i.e. when it is safe to allow a 541 * SuperSpeed connection to drop since there is no risk of a 542 * device degrading to its powered-off HiSpeed connection. 543 * 544 * Also, drop the HiSpeed ref taken above. 545 */ 546 pm_runtime_get_sync(&ss_port->dev); 547 pm_runtime_put(&hs_port->dev); 548 549 return 0; 550 } 551 552 static void link_peers_report(struct usb_port *left, struct usb_port *right) 553 { 554 int rc; 555 556 rc = link_peers(left, right); 557 if (rc == 0) { 558 dev_dbg(&left->dev, "peered to %s\n", dev_name(&right->dev)); 559 } else { 560 dev_dbg(&left->dev, "failed to peer to %s (%d)\n", 561 dev_name(&right->dev), rc); 562 pr_warn_once("usb: port power management may be unreliable\n"); 563 usb_port_block_power_off = 1; 564 } 565 } 566 567 static void unlink_peers(struct usb_port *left, struct usb_port *right) 568 { 569 struct usb_port *ss_port, *hs_port; 570 571 WARN(right->peer != left || left->peer != right, 572 "%s and %s are not peers?\n", 573 dev_name(&left->dev), dev_name(&right->dev)); 574 575 /* 576 * We wake the HiSpeed port to make sure we don't race its 577 * usb_port_runtime_resume() event which takes a SuperSpeed ref 578 * when ->peer is !NULL. 579 */ 580 if (left->is_superspeed) { 581 ss_port = left; 582 hs_port = right; 583 } else { 584 ss_port = right; 585 hs_port = left; 586 } 587 588 pm_runtime_get_sync(&hs_port->dev); 589 590 sysfs_remove_link(&left->dev.kobj, "peer"); 591 right->peer = NULL; 592 sysfs_remove_link(&right->dev.kobj, "peer"); 593 left->peer = NULL; 594 595 /* Drop the SuperSpeed ref held on behalf of the active HiSpeed port */ 596 pm_runtime_put(&ss_port->dev); 597 598 /* Drop the ref taken above */ 599 pm_runtime_put(&hs_port->dev); 600 } 601 602 /* 603 * For each usb hub device in the system check to see if it is in the 604 * peer domain of the given port_dev, and if it is check to see if it 605 * has a port that matches the given port by location 606 */ 607 static int match_location(struct usb_device *peer_hdev, void *p) 608 { 609 int port1; 610 struct usb_hcd *hcd, *peer_hcd; 611 struct usb_port *port_dev = p, *peer; 612 struct usb_hub *peer_hub = usb_hub_to_struct_hub(peer_hdev); 613 struct usb_device *hdev = to_usb_device(port_dev->dev.parent->parent); 614 615 if (!peer_hub || port_dev->connect_type == USB_PORT_NOT_USED) 616 return 0; 617 618 hcd = bus_to_hcd(hdev->bus); 619 peer_hcd = bus_to_hcd(peer_hdev->bus); 620 /* peer_hcd is provisional until we verify it against the known peer */ 621 if (peer_hcd != hcd->shared_hcd) 622 return 0; 623 624 for (port1 = 1; port1 <= peer_hdev->maxchild; port1++) { 625 peer = peer_hub->ports[port1 - 1]; 626 if (peer && peer->connect_type != USB_PORT_NOT_USED && 627 peer->location == port_dev->location) { 628 link_peers_report(port_dev, peer); 629 return 1; /* done */ 630 } 631 } 632 633 return 0; 634 } 635 636 /* 637 * Find the peer port either via explicit platform firmware "location" 638 * data, the peer hcd for root hubs, or the upstream peer relationship 639 * for all other hubs. 640 */ 641 static void find_and_link_peer(struct usb_hub *hub, int port1) 642 { 643 struct usb_port *port_dev = hub->ports[port1 - 1], *peer; 644 struct usb_device *hdev = hub->hdev; 645 struct usb_device *peer_hdev; 646 struct usb_hub *peer_hub; 647 648 /* 649 * If location data is available then we can only peer this port 650 * by a location match, not the default peer (lest we create a 651 * situation where we need to go back and undo a default peering 652 * when the port is later peered by location data) 653 */ 654 if (port_dev->location) { 655 /* we link the peer in match_location() if found */ 656 usb_for_each_dev(port_dev, match_location); 657 return; 658 } else if (!hdev->parent) { 659 struct usb_hcd *hcd = bus_to_hcd(hdev->bus); 660 struct usb_hcd *peer_hcd = hcd->shared_hcd; 661 662 if (!peer_hcd) 663 return; 664 665 peer_hdev = peer_hcd->self.root_hub; 666 } else { 667 struct usb_port *upstream; 668 struct usb_device *parent = hdev->parent; 669 struct usb_hub *parent_hub = usb_hub_to_struct_hub(parent); 670 671 if (!parent_hub) 672 return; 673 674 upstream = parent_hub->ports[hdev->portnum - 1]; 675 if (!upstream || !upstream->peer) 676 return; 677 678 peer_hdev = upstream->peer->child; 679 } 680 681 peer_hub = usb_hub_to_struct_hub(peer_hdev); 682 if (!peer_hub || port1 > peer_hdev->maxchild) 683 return; 684 685 /* 686 * we found a valid default peer, last check is to make sure it 687 * does not have location data 688 */ 689 peer = peer_hub->ports[port1 - 1]; 690 if (peer && peer->location == 0) 691 link_peers_report(port_dev, peer); 692 } 693 694 static int connector_bind(struct device *dev, struct device *connector, void *data) 695 { 696 struct usb_port *port_dev = to_usb_port(dev); 697 int ret; 698 699 ret = sysfs_create_link(&dev->kobj, &connector->kobj, "connector"); 700 if (ret) 701 return ret; 702 703 ret = sysfs_create_link(&connector->kobj, &dev->kobj, dev_name(dev)); 704 if (ret) { 705 sysfs_remove_link(&dev->kobj, "connector"); 706 return ret; 707 } 708 709 port_dev->connector = data; 710 711 /* 712 * If there is already USB device connected to the port, letting the 713 * Type-C connector know about it immediately. 714 */ 715 if (port_dev->child) 716 typec_attach(port_dev->connector, &port_dev->child->dev); 717 718 return 0; 719 } 720 721 static void connector_unbind(struct device *dev, struct device *connector, void *data) 722 { 723 struct usb_port *port_dev = to_usb_port(dev); 724 725 sysfs_remove_link(&connector->kobj, dev_name(dev)); 726 sysfs_remove_link(&dev->kobj, "connector"); 727 port_dev->connector = NULL; 728 } 729 730 static const struct component_ops connector_ops = { 731 .bind = connector_bind, 732 .unbind = connector_unbind, 733 }; 734 735 int usb_hub_create_port_device(struct usb_hub *hub, int port1) 736 { 737 struct usb_port *port_dev; 738 struct usb_device *hdev = hub->hdev; 739 int retval; 740 741 port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL); 742 if (!port_dev) 743 return -ENOMEM; 744 745 port_dev->req = kzalloc(sizeof(*(port_dev->req)), GFP_KERNEL); 746 if (!port_dev->req) { 747 kfree(port_dev); 748 return -ENOMEM; 749 } 750 751 port_dev->connect_type = usb_of_get_connect_type(hdev, port1); 752 hub->ports[port1 - 1] = port_dev; 753 port_dev->portnum = port1; 754 set_bit(port1, hub->power_bits); 755 port_dev->dev.parent = hub->intfdev; 756 if (hub_is_superspeed(hdev)) { 757 port_dev->is_superspeed = 1; 758 port_dev->usb3_lpm_u1_permit = 1; 759 port_dev->usb3_lpm_u2_permit = 1; 760 port_dev->dev.groups = port_dev_usb3_group; 761 } else 762 port_dev->dev.groups = port_dev_group; 763 port_dev->dev.type = &usb_port_device_type; 764 port_dev->dev.driver = &usb_port_driver; 765 dev_set_name(&port_dev->dev, "%s-port%d", dev_name(&hub->hdev->dev), 766 port1); 767 mutex_init(&port_dev->status_lock); 768 retval = device_register(&port_dev->dev); 769 if (retval) { 770 put_device(&port_dev->dev); 771 return retval; 772 } 773 774 port_dev->state_kn = sysfs_get_dirent(port_dev->dev.kobj.sd, "state"); 775 if (!port_dev->state_kn) { 776 dev_err(&port_dev->dev, "failed to sysfs_get_dirent 'state'\n"); 777 retval = -ENODEV; 778 goto err_unregister; 779 } 780 781 /* Set default policy of port-poweroff disabled. */ 782 retval = dev_pm_qos_add_request(&port_dev->dev, port_dev->req, 783 DEV_PM_QOS_FLAGS, PM_QOS_FLAG_NO_POWER_OFF); 784 if (retval < 0) { 785 goto err_put_kn; 786 } 787 788 retval = component_add(&port_dev->dev, &connector_ops); 789 if (retval) { 790 dev_warn(&port_dev->dev, "failed to add component\n"); 791 goto err_put_kn; 792 } 793 794 find_and_link_peer(hub, port1); 795 796 /* 797 * Enable runtime pm and hold a refernce that hub_configure() 798 * will drop once the PM_QOS_NO_POWER_OFF flag state has been set 799 * and the hub has been fully registered (hdev->maxchild set). 800 */ 801 pm_runtime_set_active(&port_dev->dev); 802 pm_runtime_get_noresume(&port_dev->dev); 803 pm_runtime_enable(&port_dev->dev); 804 device_enable_async_suspend(&port_dev->dev); 805 806 /* 807 * Keep hidden the ability to enable port-poweroff if the hub 808 * does not support power switching. 809 */ 810 if (!hub_is_port_power_switchable(hub)) 811 return 0; 812 813 /* Attempt to let userspace take over the policy. */ 814 retval = dev_pm_qos_expose_flags(&port_dev->dev, 815 PM_QOS_FLAG_NO_POWER_OFF); 816 if (retval < 0) { 817 dev_warn(&port_dev->dev, "failed to expose pm_qos_no_poweroff\n"); 818 return 0; 819 } 820 821 /* Userspace owns the policy, drop the kernel 'no_poweroff' request. */ 822 retval = dev_pm_qos_remove_request(port_dev->req); 823 if (retval >= 0) { 824 kfree(port_dev->req); 825 port_dev->req = NULL; 826 } 827 return 0; 828 829 err_put_kn: 830 sysfs_put(port_dev->state_kn); 831 err_unregister: 832 device_unregister(&port_dev->dev); 833 834 return retval; 835 } 836 837 void usb_hub_remove_port_device(struct usb_hub *hub, int port1) 838 { 839 struct usb_port *port_dev = hub->ports[port1 - 1]; 840 struct usb_port *peer; 841 842 peer = port_dev->peer; 843 if (peer) 844 unlink_peers(port_dev, peer); 845 component_del(&port_dev->dev, &connector_ops); 846 sysfs_put(port_dev->state_kn); 847 device_unregister(&port_dev->dev); 848 } 849