0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #include <linux/device.h>
0029 #include <linux/slab.h>
0030 #include <linux/export.h>
0031 #include <linux/usb.h>
0032 #include <linux/usb/quirks.h>
0033 #include <linux/usb/hcd.h>
0034
0035 #include "usb.h"
0036
0037
0038
0039
0040
0041
0042 ssize_t usb_store_new_id(struct usb_dynids *dynids,
0043 const struct usb_device_id *id_table,
0044 struct device_driver *driver,
0045 const char *buf, size_t count)
0046 {
0047 struct usb_dynid *dynid;
0048 u32 idVendor = 0;
0049 u32 idProduct = 0;
0050 unsigned int bInterfaceClass = 0;
0051 u32 refVendor, refProduct;
0052 int fields = 0;
0053 int retval = 0;
0054
0055 fields = sscanf(buf, "%x %x %x %x %x", &idVendor, &idProduct,
0056 &bInterfaceClass, &refVendor, &refProduct);
0057 if (fields < 2)
0058 return -EINVAL;
0059
0060 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
0061 if (!dynid)
0062 return -ENOMEM;
0063
0064 INIT_LIST_HEAD(&dynid->node);
0065 dynid->id.idVendor = idVendor;
0066 dynid->id.idProduct = idProduct;
0067 dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE;
0068 if (fields > 2 && bInterfaceClass) {
0069 if (bInterfaceClass > 255) {
0070 retval = -EINVAL;
0071 goto fail;
0072 }
0073
0074 dynid->id.bInterfaceClass = (u8)bInterfaceClass;
0075 dynid->id.match_flags |= USB_DEVICE_ID_MATCH_INT_CLASS;
0076 }
0077
0078 if (fields > 4) {
0079 const struct usb_device_id *id = id_table;
0080
0081 if (!id) {
0082 retval = -ENODEV;
0083 goto fail;
0084 }
0085
0086 for (; id->match_flags; id++)
0087 if (id->idVendor == refVendor && id->idProduct == refProduct)
0088 break;
0089
0090 if (id->match_flags) {
0091 dynid->id.driver_info = id->driver_info;
0092 } else {
0093 retval = -ENODEV;
0094 goto fail;
0095 }
0096 }
0097
0098 spin_lock(&dynids->lock);
0099 list_add_tail(&dynid->node, &dynids->list);
0100 spin_unlock(&dynids->lock);
0101
0102 retval = driver_attach(driver);
0103
0104 if (retval)
0105 return retval;
0106 return count;
0107
0108 fail:
0109 kfree(dynid);
0110 return retval;
0111 }
0112 EXPORT_SYMBOL_GPL(usb_store_new_id);
0113
0114 ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf)
0115 {
0116 struct usb_dynid *dynid;
0117 size_t count = 0;
0118
0119 list_for_each_entry(dynid, &dynids->list, node)
0120 if (dynid->id.bInterfaceClass != 0)
0121 count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x %02x\n",
0122 dynid->id.idVendor, dynid->id.idProduct,
0123 dynid->id.bInterfaceClass);
0124 else
0125 count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x\n",
0126 dynid->id.idVendor, dynid->id.idProduct);
0127 return count;
0128 }
0129 EXPORT_SYMBOL_GPL(usb_show_dynids);
0130
0131 static ssize_t new_id_show(struct device_driver *driver, char *buf)
0132 {
0133 struct usb_driver *usb_drv = to_usb_driver(driver);
0134
0135 return usb_show_dynids(&usb_drv->dynids, buf);
0136 }
0137
0138 static ssize_t new_id_store(struct device_driver *driver,
0139 const char *buf, size_t count)
0140 {
0141 struct usb_driver *usb_drv = to_usb_driver(driver);
0142
0143 return usb_store_new_id(&usb_drv->dynids, usb_drv->id_table, driver, buf, count);
0144 }
0145 static DRIVER_ATTR_RW(new_id);
0146
0147
0148
0149
0150 static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
0151 size_t count)
0152 {
0153 struct usb_dynid *dynid, *n;
0154 struct usb_driver *usb_driver = to_usb_driver(driver);
0155 u32 idVendor;
0156 u32 idProduct;
0157 int fields;
0158
0159 fields = sscanf(buf, "%x %x", &idVendor, &idProduct);
0160 if (fields < 2)
0161 return -EINVAL;
0162
0163 spin_lock(&usb_driver->dynids.lock);
0164 list_for_each_entry_safe(dynid, n, &usb_driver->dynids.list, node) {
0165 struct usb_device_id *id = &dynid->id;
0166
0167 if ((id->idVendor == idVendor) &&
0168 (id->idProduct == idProduct)) {
0169 list_del(&dynid->node);
0170 kfree(dynid);
0171 break;
0172 }
0173 }
0174 spin_unlock(&usb_driver->dynids.lock);
0175 return count;
0176 }
0177
0178 static ssize_t remove_id_show(struct device_driver *driver, char *buf)
0179 {
0180 return new_id_show(driver, buf);
0181 }
0182 static DRIVER_ATTR_RW(remove_id);
0183
0184 static int usb_create_newid_files(struct usb_driver *usb_drv)
0185 {
0186 int error = 0;
0187
0188 if (usb_drv->no_dynamic_id)
0189 goto exit;
0190
0191 if (usb_drv->probe != NULL) {
0192 error = driver_create_file(&usb_drv->drvwrap.driver,
0193 &driver_attr_new_id);
0194 if (error == 0) {
0195 error = driver_create_file(&usb_drv->drvwrap.driver,
0196 &driver_attr_remove_id);
0197 if (error)
0198 driver_remove_file(&usb_drv->drvwrap.driver,
0199 &driver_attr_new_id);
0200 }
0201 }
0202 exit:
0203 return error;
0204 }
0205
0206 static void usb_remove_newid_files(struct usb_driver *usb_drv)
0207 {
0208 if (usb_drv->no_dynamic_id)
0209 return;
0210
0211 if (usb_drv->probe != NULL) {
0212 driver_remove_file(&usb_drv->drvwrap.driver,
0213 &driver_attr_remove_id);
0214 driver_remove_file(&usb_drv->drvwrap.driver,
0215 &driver_attr_new_id);
0216 }
0217 }
0218
0219 static void usb_free_dynids(struct usb_driver *usb_drv)
0220 {
0221 struct usb_dynid *dynid, *n;
0222
0223 spin_lock(&usb_drv->dynids.lock);
0224 list_for_each_entry_safe(dynid, n, &usb_drv->dynids.list, node) {
0225 list_del(&dynid->node);
0226 kfree(dynid);
0227 }
0228 spin_unlock(&usb_drv->dynids.lock);
0229 }
0230
0231 static const struct usb_device_id *usb_match_dynamic_id(struct usb_interface *intf,
0232 struct usb_driver *drv)
0233 {
0234 struct usb_dynid *dynid;
0235
0236 spin_lock(&drv->dynids.lock);
0237 list_for_each_entry(dynid, &drv->dynids.list, node) {
0238 if (usb_match_one_id(intf, &dynid->id)) {
0239 spin_unlock(&drv->dynids.lock);
0240 return &dynid->id;
0241 }
0242 }
0243 spin_unlock(&drv->dynids.lock);
0244 return NULL;
0245 }
0246
0247
0248
0249 static int usb_probe_device(struct device *dev)
0250 {
0251 struct usb_device_driver *udriver = to_usb_device_driver(dev->driver);
0252 struct usb_device *udev = to_usb_device(dev);
0253 int error = 0;
0254
0255 dev_dbg(dev, "%s\n", __func__);
0256
0257
0258
0259
0260
0261
0262 if (!udriver->supports_autosuspend)
0263 error = usb_autoresume_device(udev);
0264 if (error)
0265 return error;
0266
0267 if (udriver->generic_subclass)
0268 error = usb_generic_driver_probe(udev);
0269 if (error)
0270 return error;
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293 error = udriver->probe(udev);
0294 if (error == -ENODEV && udriver != &usb_generic_driver &&
0295 (udriver->id_table || udriver->match)) {
0296 udev->use_generic_driver = 1;
0297 return -EPROBE_DEFER;
0298 }
0299 return error;
0300 }
0301
0302
0303 static int usb_unbind_device(struct device *dev)
0304 {
0305 struct usb_device *udev = to_usb_device(dev);
0306 struct usb_device_driver *udriver = to_usb_device_driver(dev->driver);
0307
0308 if (udriver->disconnect)
0309 udriver->disconnect(udev);
0310 if (udriver->generic_subclass)
0311 usb_generic_driver_disconnect(udev);
0312 if (!udriver->supports_autosuspend)
0313 usb_autosuspend_device(udev);
0314 return 0;
0315 }
0316
0317
0318 static int usb_probe_interface(struct device *dev)
0319 {
0320 struct usb_driver *driver = to_usb_driver(dev->driver);
0321 struct usb_interface *intf = to_usb_interface(dev);
0322 struct usb_device *udev = interface_to_usbdev(intf);
0323 const struct usb_device_id *id;
0324 int error = -ENODEV;
0325 int lpm_disable_error = -ENODEV;
0326
0327 dev_dbg(dev, "%s\n", __func__);
0328
0329 intf->needs_binding = 0;
0330
0331 if (usb_device_is_owned(udev))
0332 return error;
0333
0334 if (udev->authorized == 0) {
0335 dev_err(&intf->dev, "Device is not authorized for usage\n");
0336 return error;
0337 } else if (intf->authorized == 0) {
0338 dev_err(&intf->dev, "Interface %d is not authorized for usage\n",
0339 intf->altsetting->desc.bInterfaceNumber);
0340 return error;
0341 }
0342
0343 id = usb_match_dynamic_id(intf, driver);
0344 if (!id)
0345 id = usb_match_id(intf, driver->id_table);
0346 if (!id)
0347 return error;
0348
0349 dev_dbg(dev, "%s - got id\n", __func__);
0350
0351 error = usb_autoresume_device(udev);
0352 if (error)
0353 return error;
0354
0355 intf->condition = USB_INTERFACE_BINDING;
0356
0357
0358
0359
0360
0361 pm_runtime_set_active(dev);
0362 pm_suspend_ignore_children(dev, false);
0363 if (driver->supports_autosuspend)
0364 pm_runtime_enable(dev);
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377 if (driver->disable_hub_initiated_lpm) {
0378 lpm_disable_error = usb_unlocked_disable_lpm(udev);
0379 if (lpm_disable_error) {
0380 dev_err(&intf->dev, "%s Failed to disable LPM for driver %s\n",
0381 __func__, driver->name);
0382 error = lpm_disable_error;
0383 goto err;
0384 }
0385 }
0386
0387
0388 if (intf->needs_altsetting0) {
0389 error = usb_set_interface(udev, intf->altsetting[0].
0390 desc.bInterfaceNumber, 0);
0391 if (error < 0)
0392 goto err;
0393 intf->needs_altsetting0 = 0;
0394 }
0395
0396 error = driver->probe(intf, id);
0397 if (error)
0398 goto err;
0399
0400 intf->condition = USB_INTERFACE_BOUND;
0401
0402
0403 if (!lpm_disable_error)
0404 usb_unlocked_enable_lpm(udev);
0405
0406 usb_autosuspend_device(udev);
0407 return error;
0408
0409 err:
0410 usb_set_intfdata(intf, NULL);
0411 intf->needs_remote_wakeup = 0;
0412 intf->condition = USB_INTERFACE_UNBOUND;
0413
0414
0415 if (!lpm_disable_error)
0416 usb_unlocked_enable_lpm(udev);
0417
0418
0419 if (driver->supports_autosuspend)
0420 pm_runtime_disable(dev);
0421 pm_runtime_set_suspended(dev);
0422
0423 usb_autosuspend_device(udev);
0424 return error;
0425 }
0426
0427
0428 static int usb_unbind_interface(struct device *dev)
0429 {
0430 struct usb_driver *driver = to_usb_driver(dev->driver);
0431 struct usb_interface *intf = to_usb_interface(dev);
0432 struct usb_host_endpoint *ep, **eps = NULL;
0433 struct usb_device *udev;
0434 int i, j, error, r;
0435 int lpm_disable_error = -ENODEV;
0436
0437 intf->condition = USB_INTERFACE_UNBINDING;
0438
0439
0440 udev = interface_to_usbdev(intf);
0441 error = usb_autoresume_device(udev);
0442
0443
0444
0445
0446
0447
0448 if (driver->disable_hub_initiated_lpm)
0449 lpm_disable_error = usb_unlocked_disable_lpm(udev);
0450
0451
0452
0453
0454
0455 if (!driver->soft_unbind || udev->state == USB_STATE_NOTATTACHED)
0456 usb_disable_interface(udev, intf, false);
0457
0458 driver->disconnect(intf);
0459
0460
0461 for (i = 0, j = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
0462 ep = &intf->cur_altsetting->endpoint[i];
0463 if (ep->streams == 0)
0464 continue;
0465 if (j == 0) {
0466 eps = kmalloc_array(USB_MAXENDPOINTS, sizeof(void *),
0467 GFP_KERNEL);
0468 if (!eps)
0469 break;
0470 }
0471 eps[j++] = ep;
0472 }
0473 if (j) {
0474 usb_free_streams(intf, eps, j, GFP_KERNEL);
0475 kfree(eps);
0476 }
0477
0478
0479
0480
0481
0482
0483
0484 if (intf->cur_altsetting->desc.bAlternateSetting == 0) {
0485
0486
0487
0488 usb_enable_interface(udev, intf, false);
0489 } else if (!error && !intf->dev.power.is_prepared) {
0490 r = usb_set_interface(udev, intf->altsetting[0].
0491 desc.bInterfaceNumber, 0);
0492 if (r < 0)
0493 intf->needs_altsetting0 = 1;
0494 } else {
0495 intf->needs_altsetting0 = 1;
0496 }
0497 usb_set_intfdata(intf, NULL);
0498
0499 intf->condition = USB_INTERFACE_UNBOUND;
0500 intf->needs_remote_wakeup = 0;
0501
0502
0503 if (!lpm_disable_error)
0504 usb_unlocked_enable_lpm(udev);
0505
0506
0507 if (driver->supports_autosuspend)
0508 pm_runtime_disable(dev);
0509 pm_runtime_set_suspended(dev);
0510
0511 if (!error)
0512 usb_autosuspend_device(udev);
0513
0514 return 0;
0515 }
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535 int usb_driver_claim_interface(struct usb_driver *driver,
0536 struct usb_interface *iface, void *data)
0537 {
0538 struct device *dev;
0539 int retval = 0;
0540
0541 if (!iface)
0542 return -ENODEV;
0543
0544 dev = &iface->dev;
0545 if (dev->driver)
0546 return -EBUSY;
0547
0548
0549 if (!iface->authorized)
0550 return -ENODEV;
0551
0552 dev->driver = &driver->drvwrap.driver;
0553 usb_set_intfdata(iface, data);
0554 iface->needs_binding = 0;
0555
0556 iface->condition = USB_INTERFACE_BOUND;
0557
0558
0559
0560
0561
0562
0563
0564 pm_suspend_ignore_children(dev, false);
0565 if (driver->supports_autosuspend)
0566 pm_runtime_enable(dev);
0567 else
0568 pm_runtime_set_active(dev);
0569
0570
0571
0572
0573 if (device_is_registered(dev))
0574 retval = device_bind_driver(dev);
0575
0576 if (retval) {
0577 dev->driver = NULL;
0578 usb_set_intfdata(iface, NULL);
0579 iface->needs_remote_wakeup = 0;
0580 iface->condition = USB_INTERFACE_UNBOUND;
0581
0582
0583
0584
0585
0586 if (driver->supports_autosuspend)
0587 pm_runtime_disable(dev);
0588 pm_runtime_set_suspended(dev);
0589 }
0590
0591 return retval;
0592 }
0593 EXPORT_SYMBOL_GPL(usb_driver_claim_interface);
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609 void usb_driver_release_interface(struct usb_driver *driver,
0610 struct usb_interface *iface)
0611 {
0612 struct device *dev = &iface->dev;
0613
0614
0615 if (!dev->driver || dev->driver != &driver->drvwrap.driver)
0616 return;
0617
0618
0619 if (iface->condition != USB_INTERFACE_BOUND)
0620 return;
0621 iface->condition = USB_INTERFACE_UNBINDING;
0622
0623
0624
0625
0626 if (device_is_registered(dev)) {
0627 device_release_driver(dev);
0628 } else {
0629 device_lock(dev);
0630 usb_unbind_interface(dev);
0631 dev->driver = NULL;
0632 device_unlock(dev);
0633 }
0634 }
0635 EXPORT_SYMBOL_GPL(usb_driver_release_interface);
0636
0637
0638 int usb_match_device(struct usb_device *dev, const struct usb_device_id *id)
0639 {
0640 if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
0641 id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
0642 return 0;
0643
0644 if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
0645 id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
0646 return 0;
0647
0648
0649
0650 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
0651 (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice)))
0652 return 0;
0653
0654 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
0655 (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice)))
0656 return 0;
0657
0658 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
0659 (id->bDeviceClass != dev->descriptor.bDeviceClass))
0660 return 0;
0661
0662 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
0663 (id->bDeviceSubClass != dev->descriptor.bDeviceSubClass))
0664 return 0;
0665
0666 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
0667 (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
0668 return 0;
0669
0670 return 1;
0671 }
0672
0673
0674 int usb_match_one_id_intf(struct usb_device *dev,
0675 struct usb_host_interface *intf,
0676 const struct usb_device_id *id)
0677 {
0678
0679
0680
0681 if (dev->descriptor.bDeviceClass == USB_CLASS_VENDOR_SPEC &&
0682 !(id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
0683 (id->match_flags & (USB_DEVICE_ID_MATCH_INT_CLASS |
0684 USB_DEVICE_ID_MATCH_INT_SUBCLASS |
0685 USB_DEVICE_ID_MATCH_INT_PROTOCOL |
0686 USB_DEVICE_ID_MATCH_INT_NUMBER)))
0687 return 0;
0688
0689 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
0690 (id->bInterfaceClass != intf->desc.bInterfaceClass))
0691 return 0;
0692
0693 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
0694 (id->bInterfaceSubClass != intf->desc.bInterfaceSubClass))
0695 return 0;
0696
0697 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
0698 (id->bInterfaceProtocol != intf->desc.bInterfaceProtocol))
0699 return 0;
0700
0701 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER) &&
0702 (id->bInterfaceNumber != intf->desc.bInterfaceNumber))
0703 return 0;
0704
0705 return 1;
0706 }
0707
0708
0709 int usb_match_one_id(struct usb_interface *interface,
0710 const struct usb_device_id *id)
0711 {
0712 struct usb_host_interface *intf;
0713 struct usb_device *dev;
0714
0715
0716 if (id == NULL)
0717 return 0;
0718
0719 intf = interface->cur_altsetting;
0720 dev = interface_to_usbdev(interface);
0721
0722 if (!usb_match_device(dev, id))
0723 return 0;
0724
0725 return usb_match_one_id_intf(dev, intf, id);
0726 }
0727 EXPORT_SYMBOL_GPL(usb_match_one_id);
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802 const struct usb_device_id *usb_match_id(struct usb_interface *interface,
0803 const struct usb_device_id *id)
0804 {
0805
0806 if (id == NULL)
0807 return NULL;
0808
0809
0810
0811
0812
0813
0814 for (; id->idVendor || id->idProduct || id->bDeviceClass ||
0815 id->bInterfaceClass || id->driver_info; id++) {
0816 if (usb_match_one_id(interface, id))
0817 return id;
0818 }
0819
0820 return NULL;
0821 }
0822 EXPORT_SYMBOL_GPL(usb_match_id);
0823
0824 const struct usb_device_id *usb_device_match_id(struct usb_device *udev,
0825 const struct usb_device_id *id)
0826 {
0827 if (!id)
0828 return NULL;
0829
0830 for (; id->idVendor || id->idProduct ; id++) {
0831 if (usb_match_device(udev, id))
0832 return id;
0833 }
0834
0835 return NULL;
0836 }
0837 EXPORT_SYMBOL_GPL(usb_device_match_id);
0838
0839 bool usb_driver_applicable(struct usb_device *udev,
0840 struct usb_device_driver *udrv)
0841 {
0842 if (udrv->id_table && udrv->match)
0843 return usb_device_match_id(udev, udrv->id_table) != NULL &&
0844 udrv->match(udev);
0845
0846 if (udrv->id_table)
0847 return usb_device_match_id(udev, udrv->id_table) != NULL;
0848
0849 if (udrv->match)
0850 return udrv->match(udev);
0851
0852 return false;
0853 }
0854
0855 static int usb_device_match(struct device *dev, struct device_driver *drv)
0856 {
0857
0858 if (is_usb_device(dev)) {
0859 struct usb_device *udev;
0860 struct usb_device_driver *udrv;
0861
0862
0863 if (!is_usb_device_driver(drv))
0864 return 0;
0865
0866 udev = to_usb_device(dev);
0867 udrv = to_usb_device_driver(drv);
0868
0869
0870
0871
0872
0873 if (!udrv->id_table && !udrv->match)
0874 return 1;
0875
0876 return usb_driver_applicable(udev, udrv);
0877
0878 } else if (is_usb_interface(dev)) {
0879 struct usb_interface *intf;
0880 struct usb_driver *usb_drv;
0881 const struct usb_device_id *id;
0882
0883
0884 if (is_usb_device_driver(drv))
0885 return 0;
0886
0887 intf = to_usb_interface(dev);
0888 usb_drv = to_usb_driver(drv);
0889
0890 id = usb_match_id(intf, usb_drv->id_table);
0891 if (id)
0892 return 1;
0893
0894 id = usb_match_dynamic_id(intf, usb_drv);
0895 if (id)
0896 return 1;
0897 }
0898
0899 return 0;
0900 }
0901
0902 static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
0903 {
0904 struct usb_device *usb_dev;
0905
0906 if (is_usb_device(dev)) {
0907 usb_dev = to_usb_device(dev);
0908 } else if (is_usb_interface(dev)) {
0909 struct usb_interface *intf = to_usb_interface(dev);
0910
0911 usb_dev = interface_to_usbdev(intf);
0912 } else {
0913 return 0;
0914 }
0915
0916 if (usb_dev->devnum < 0) {
0917
0918 pr_debug("usb %s: already deleted?\n", dev_name(dev));
0919 return -ENODEV;
0920 }
0921 if (!usb_dev->bus) {
0922 pr_debug("usb %s: bus removed?\n", dev_name(dev));
0923 return -ENODEV;
0924 }
0925
0926
0927 if (add_uevent_var(env, "PRODUCT=%x/%x/%x",
0928 le16_to_cpu(usb_dev->descriptor.idVendor),
0929 le16_to_cpu(usb_dev->descriptor.idProduct),
0930 le16_to_cpu(usb_dev->descriptor.bcdDevice)))
0931 return -ENOMEM;
0932
0933
0934 if (add_uevent_var(env, "TYPE=%d/%d/%d",
0935 usb_dev->descriptor.bDeviceClass,
0936 usb_dev->descriptor.bDeviceSubClass,
0937 usb_dev->descriptor.bDeviceProtocol))
0938 return -ENOMEM;
0939
0940 return 0;
0941 }
0942
0943 static int __usb_bus_reprobe_drivers(struct device *dev, void *data)
0944 {
0945 struct usb_device_driver *new_udriver = data;
0946 struct usb_device *udev;
0947 int ret;
0948
0949
0950 if (dev->driver != &usb_generic_driver.drvwrap.driver)
0951 return 0;
0952
0953 udev = to_usb_device(dev);
0954 if (!usb_driver_applicable(udev, new_udriver))
0955 return 0;
0956
0957 ret = device_reprobe(dev);
0958 if (ret && ret != -EPROBE_DEFER)
0959 dev_err(dev, "Failed to reprobe device (error %d)\n", ret);
0960
0961 return 0;
0962 }
0963
0964
0965
0966
0967
0968
0969
0970
0971
0972
0973
0974
0975 int usb_register_device_driver(struct usb_device_driver *new_udriver,
0976 struct module *owner)
0977 {
0978 int retval = 0;
0979
0980 if (usb_disabled())
0981 return -ENODEV;
0982
0983 new_udriver->drvwrap.for_devices = 1;
0984 new_udriver->drvwrap.driver.name = new_udriver->name;
0985 new_udriver->drvwrap.driver.bus = &usb_bus_type;
0986 new_udriver->drvwrap.driver.probe = usb_probe_device;
0987 new_udriver->drvwrap.driver.remove = usb_unbind_device;
0988 new_udriver->drvwrap.driver.owner = owner;
0989 new_udriver->drvwrap.driver.dev_groups = new_udriver->dev_groups;
0990
0991 retval = driver_register(&new_udriver->drvwrap.driver);
0992
0993 if (!retval) {
0994 pr_info("%s: registered new device driver %s\n",
0995 usbcore_name, new_udriver->name);
0996
0997
0998
0999
1000 bus_for_each_dev(&usb_bus_type, NULL, new_udriver,
1001 __usb_bus_reprobe_drivers);
1002 } else {
1003 pr_err("%s: error %d registering device driver %s\n",
1004 usbcore_name, retval, new_udriver->name);
1005 }
1006
1007 return retval;
1008 }
1009 EXPORT_SYMBOL_GPL(usb_register_device_driver);
1010
1011
1012
1013
1014
1015
1016
1017
1018 void usb_deregister_device_driver(struct usb_device_driver *udriver)
1019 {
1020 pr_info("%s: deregistering device driver %s\n",
1021 usbcore_name, udriver->name);
1022
1023 driver_unregister(&udriver->drvwrap.driver);
1024 }
1025 EXPORT_SYMBOL_GPL(usb_deregister_device_driver);
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043 int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
1044 const char *mod_name)
1045 {
1046 int retval = 0;
1047
1048 if (usb_disabled())
1049 return -ENODEV;
1050
1051 new_driver->drvwrap.for_devices = 0;
1052 new_driver->drvwrap.driver.name = new_driver->name;
1053 new_driver->drvwrap.driver.bus = &usb_bus_type;
1054 new_driver->drvwrap.driver.probe = usb_probe_interface;
1055 new_driver->drvwrap.driver.remove = usb_unbind_interface;
1056 new_driver->drvwrap.driver.owner = owner;
1057 new_driver->drvwrap.driver.mod_name = mod_name;
1058 new_driver->drvwrap.driver.dev_groups = new_driver->dev_groups;
1059 spin_lock_init(&new_driver->dynids.lock);
1060 INIT_LIST_HEAD(&new_driver->dynids.list);
1061
1062 retval = driver_register(&new_driver->drvwrap.driver);
1063 if (retval)
1064 goto out;
1065
1066 retval = usb_create_newid_files(new_driver);
1067 if (retval)
1068 goto out_newid;
1069
1070 pr_info("%s: registered new interface driver %s\n",
1071 usbcore_name, new_driver->name);
1072
1073 out:
1074 return retval;
1075
1076 out_newid:
1077 driver_unregister(&new_driver->drvwrap.driver);
1078
1079 pr_err("%s: error %d registering interface driver %s\n",
1080 usbcore_name, retval, new_driver->name);
1081 goto out;
1082 }
1083 EXPORT_SYMBOL_GPL(usb_register_driver);
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096 void usb_deregister(struct usb_driver *driver)
1097 {
1098 pr_info("%s: deregistering interface driver %s\n",
1099 usbcore_name, driver->name);
1100
1101 usb_remove_newid_files(driver);
1102 driver_unregister(&driver->drvwrap.driver);
1103 usb_free_dynids(driver);
1104 }
1105 EXPORT_SYMBOL_GPL(usb_deregister);
1106
1107
1108
1109
1110
1111
1112
1113 void usb_forced_unbind_intf(struct usb_interface *intf)
1114 {
1115 struct usb_driver *driver = to_usb_driver(intf->dev.driver);
1116
1117 dev_dbg(&intf->dev, "forced unbind\n");
1118 usb_driver_release_interface(driver, intf);
1119
1120
1121 intf->needs_binding = 1;
1122 }
1123
1124
1125
1126
1127
1128
1129
1130 static void unbind_marked_interfaces(struct usb_device *udev)
1131 {
1132 struct usb_host_config *config;
1133 int i;
1134 struct usb_interface *intf;
1135
1136 config = udev->actconfig;
1137 if (config) {
1138 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
1139 intf = config->interface[i];
1140 if (intf->dev.driver && intf->needs_binding)
1141 usb_forced_unbind_intf(intf);
1142 }
1143 }
1144 }
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154 static void usb_rebind_intf(struct usb_interface *intf)
1155 {
1156 int rc;
1157
1158
1159 if (intf->dev.driver)
1160 usb_forced_unbind_intf(intf);
1161
1162
1163 if (!intf->dev.power.is_prepared) {
1164 intf->needs_binding = 0;
1165 rc = device_attach(&intf->dev);
1166 if (rc < 0 && rc != -EPROBE_DEFER)
1167 dev_warn(&intf->dev, "rebind failed: %d\n", rc);
1168 }
1169 }
1170
1171
1172
1173
1174
1175
1176
1177 static void rebind_marked_interfaces(struct usb_device *udev)
1178 {
1179 struct usb_host_config *config;
1180 int i;
1181 struct usb_interface *intf;
1182
1183 config = udev->actconfig;
1184 if (config) {
1185 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
1186 intf = config->interface[i];
1187 if (intf->needs_binding)
1188 usb_rebind_intf(intf);
1189 }
1190 }
1191 }
1192
1193
1194
1195
1196
1197
1198
1199
1200 void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev)
1201 {
1202 unbind_marked_interfaces(udev);
1203 rebind_marked_interfaces(udev);
1204 }
1205
1206 #ifdef CONFIG_PM
1207
1208
1209
1210
1211
1212
1213
1214 static void unbind_no_pm_drivers_interfaces(struct usb_device *udev)
1215 {
1216 struct usb_host_config *config;
1217 int i;
1218 struct usb_interface *intf;
1219 struct usb_driver *drv;
1220
1221 config = udev->actconfig;
1222 if (config) {
1223 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
1224 intf = config->interface[i];
1225
1226 if (intf->dev.driver) {
1227 drv = to_usb_driver(intf->dev.driver);
1228 if (!drv->suspend || !drv->resume)
1229 usb_forced_unbind_intf(intf);
1230 }
1231 }
1232 }
1233 }
1234
1235 static int usb_suspend_device(struct usb_device *udev, pm_message_t msg)
1236 {
1237 struct usb_device_driver *udriver;
1238 int status = 0;
1239
1240 if (udev->state == USB_STATE_NOTATTACHED ||
1241 udev->state == USB_STATE_SUSPENDED)
1242 goto done;
1243
1244
1245 if (udev->dev.driver)
1246 udriver = to_usb_device_driver(udev->dev.driver);
1247 else {
1248 udev->do_remote_wakeup = 0;
1249 udriver = &usb_generic_driver;
1250 }
1251 if (udriver->suspend)
1252 status = udriver->suspend(udev, msg);
1253 if (status == 0 && udriver->generic_subclass)
1254 status = usb_generic_driver_suspend(udev, msg);
1255
1256 done:
1257 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1258 return status;
1259 }
1260
1261 static int usb_resume_device(struct usb_device *udev, pm_message_t msg)
1262 {
1263 struct usb_device_driver *udriver;
1264 int status = 0;
1265
1266 if (udev->state == USB_STATE_NOTATTACHED)
1267 goto done;
1268
1269
1270 if (udev->dev.driver == NULL) {
1271 status = -ENOTCONN;
1272 goto done;
1273 }
1274
1275
1276
1277
1278 if (!PMSG_IS_AUTO(msg) && udev->parent && udev->bus->hs_companion)
1279 device_pm_wait_for_dev(&udev->dev,
1280 &udev->bus->hs_companion->root_hub->dev);
1281
1282 if (udev->quirks & USB_QUIRK_RESET_RESUME)
1283 udev->reset_resume = 1;
1284
1285 udriver = to_usb_device_driver(udev->dev.driver);
1286 if (udriver->generic_subclass)
1287 status = usb_generic_driver_resume(udev, msg);
1288 if (status == 0 && udriver->resume)
1289 status = udriver->resume(udev, msg);
1290
1291 done:
1292 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1293 return status;
1294 }
1295
1296 static int usb_suspend_interface(struct usb_device *udev,
1297 struct usb_interface *intf, pm_message_t msg)
1298 {
1299 struct usb_driver *driver;
1300 int status = 0;
1301
1302 if (udev->state == USB_STATE_NOTATTACHED ||
1303 intf->condition == USB_INTERFACE_UNBOUND)
1304 goto done;
1305 driver = to_usb_driver(intf->dev.driver);
1306
1307
1308 status = driver->suspend(intf, msg);
1309 if (status && !PMSG_IS_AUTO(msg))
1310 dev_err(&intf->dev, "suspend error %d\n", status);
1311
1312 done:
1313 dev_vdbg(&intf->dev, "%s: status %d\n", __func__, status);
1314 return status;
1315 }
1316
1317 static int usb_resume_interface(struct usb_device *udev,
1318 struct usb_interface *intf, pm_message_t msg, int reset_resume)
1319 {
1320 struct usb_driver *driver;
1321 int status = 0;
1322
1323 if (udev->state == USB_STATE_NOTATTACHED)
1324 goto done;
1325
1326
1327 if (intf->condition == USB_INTERFACE_UNBINDING)
1328 goto done;
1329
1330
1331 if (intf->condition == USB_INTERFACE_UNBOUND) {
1332
1333
1334 if (intf->needs_altsetting0 && !intf->dev.power.is_prepared) {
1335 usb_set_interface(udev, intf->altsetting[0].
1336 desc.bInterfaceNumber, 0);
1337 intf->needs_altsetting0 = 0;
1338 }
1339 goto done;
1340 }
1341
1342
1343 if (intf->needs_binding)
1344 goto done;
1345 driver = to_usb_driver(intf->dev.driver);
1346
1347 if (reset_resume) {
1348 if (driver->reset_resume) {
1349 status = driver->reset_resume(intf);
1350 if (status)
1351 dev_err(&intf->dev, "%s error %d\n",
1352 "reset_resume", status);
1353 } else {
1354 intf->needs_binding = 1;
1355 dev_dbg(&intf->dev, "no reset_resume for driver %s?\n",
1356 driver->name);
1357 }
1358 } else {
1359 status = driver->resume(intf);
1360 if (status)
1361 dev_err(&intf->dev, "resume error %d\n", status);
1362 }
1363
1364 done:
1365 dev_vdbg(&intf->dev, "%s: status %d\n", __func__, status);
1366
1367
1368 return status;
1369 }
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398 static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
1399 {
1400 int status = 0;
1401 int i = 0, n = 0;
1402 struct usb_interface *intf;
1403
1404 if (udev->state == USB_STATE_NOTATTACHED ||
1405 udev->state == USB_STATE_SUSPENDED)
1406 goto done;
1407
1408
1409 if (udev->actconfig) {
1410 n = udev->actconfig->desc.bNumInterfaces;
1411 for (i = n - 1; i >= 0; --i) {
1412 intf = udev->actconfig->interface[i];
1413 status = usb_suspend_interface(udev, intf, msg);
1414
1415
1416 if (!PMSG_IS_AUTO(msg))
1417 status = 0;
1418 if (status != 0)
1419 break;
1420 }
1421 }
1422 if (status == 0) {
1423 status = usb_suspend_device(udev, msg);
1424
1425
1426
1427
1428
1429
1430
1431 if (udev->parent && !PMSG_IS_AUTO(msg))
1432 status = 0;
1433
1434
1435
1436
1437
1438 if (status && status != -EBUSY) {
1439 int err;
1440 u16 devstat;
1441
1442 err = usb_get_std_status(udev, USB_RECIP_DEVICE, 0,
1443 &devstat);
1444 if (err) {
1445 dev_err(&udev->dev,
1446 "Failed to suspend device, error %d\n",
1447 status);
1448 goto done;
1449 }
1450 }
1451 }
1452
1453
1454 if (status != 0) {
1455 if (udev->actconfig) {
1456 msg.event ^= (PM_EVENT_SUSPEND | PM_EVENT_RESUME);
1457 while (++i < n) {
1458 intf = udev->actconfig->interface[i];
1459 usb_resume_interface(udev, intf, msg, 0);
1460 }
1461 }
1462
1463
1464
1465
1466 } else {
1467 udev->can_submit = 0;
1468 for (i = 0; i < 16; ++i) {
1469 usb_hcd_flush_endpoint(udev, udev->ep_out[i]);
1470 usb_hcd_flush_endpoint(udev, udev->ep_in[i]);
1471 }
1472 }
1473
1474 done:
1475 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1476 return status;
1477 }
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499 static int usb_resume_both(struct usb_device *udev, pm_message_t msg)
1500 {
1501 int status = 0;
1502 int i;
1503 struct usb_interface *intf;
1504
1505 if (udev->state == USB_STATE_NOTATTACHED) {
1506 status = -ENODEV;
1507 goto done;
1508 }
1509 udev->can_submit = 1;
1510
1511
1512 if (udev->state == USB_STATE_SUSPENDED || udev->reset_resume)
1513 status = usb_resume_device(udev, msg);
1514
1515
1516 if (status == 0 && udev->actconfig) {
1517 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
1518 intf = udev->actconfig->interface[i];
1519 usb_resume_interface(udev, intf, msg,
1520 udev->reset_resume);
1521 }
1522 }
1523 usb_mark_last_busy(udev);
1524
1525 done:
1526 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1527 if (!status)
1528 udev->reset_resume = 0;
1529 return status;
1530 }
1531
1532 static void choose_wakeup(struct usb_device *udev, pm_message_t msg)
1533 {
1534 int w;
1535
1536
1537
1538
1539
1540 if (msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_QUIESCE) {
1541 w = 0;
1542
1543 } else {
1544
1545
1546
1547
1548 w = device_may_wakeup(&udev->dev);
1549 }
1550
1551
1552
1553
1554
1555 if (udev->state == USB_STATE_SUSPENDED && w != udev->do_remote_wakeup)
1556 pm_runtime_resume(&udev->dev);
1557 udev->do_remote_wakeup = w;
1558 }
1559
1560
1561 int usb_suspend(struct device *dev, pm_message_t msg)
1562 {
1563 struct usb_device *udev = to_usb_device(dev);
1564 int r;
1565
1566 unbind_no_pm_drivers_interfaces(udev);
1567
1568
1569
1570
1571
1572 choose_wakeup(udev, msg);
1573 r = usb_suspend_both(udev, msg);
1574 if (r)
1575 return r;
1576
1577 if (udev->quirks & USB_QUIRK_DISCONNECT_SUSPEND)
1578 usb_port_disable(udev);
1579
1580 return 0;
1581 }
1582
1583
1584 int usb_resume_complete(struct device *dev)
1585 {
1586 struct usb_device *udev = to_usb_device(dev);
1587
1588
1589
1590
1591 if (udev->state != USB_STATE_NOTATTACHED)
1592 rebind_marked_interfaces(udev);
1593 return 0;
1594 }
1595
1596
1597 int usb_resume(struct device *dev, pm_message_t msg)
1598 {
1599 struct usb_device *udev = to_usb_device(dev);
1600 int status;
1601
1602
1603
1604
1605
1606
1607
1608
1609 status = usb_resume_both(udev, msg);
1610 if (status == 0) {
1611 pm_runtime_disable(dev);
1612 pm_runtime_set_active(dev);
1613 pm_runtime_enable(dev);
1614 unbind_marked_interfaces(udev);
1615 }
1616
1617
1618
1619
1620 if (status == -ENODEV || status == -ESHUTDOWN)
1621 status = 0;
1622 return status;
1623 }
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635 void usb_enable_autosuspend(struct usb_device *udev)
1636 {
1637 pm_runtime_allow(&udev->dev);
1638 }
1639 EXPORT_SYMBOL_GPL(usb_enable_autosuspend);
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650 void usb_disable_autosuspend(struct usb_device *udev)
1651 {
1652 pm_runtime_forbid(&udev->dev);
1653 }
1654 EXPORT_SYMBOL_GPL(usb_disable_autosuspend);
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672 void usb_autosuspend_device(struct usb_device *udev)
1673 {
1674 int status;
1675
1676 usb_mark_last_busy(udev);
1677 status = pm_runtime_put_sync_autosuspend(&udev->dev);
1678 dev_vdbg(&udev->dev, "%s: cnt %d -> %d\n",
1679 __func__, atomic_read(&udev->dev.power.usage_count),
1680 status);
1681 }
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703 int usb_autoresume_device(struct usb_device *udev)
1704 {
1705 int status;
1706
1707 status = pm_runtime_get_sync(&udev->dev);
1708 if (status < 0)
1709 pm_runtime_put_sync(&udev->dev);
1710 dev_vdbg(&udev->dev, "%s: cnt %d -> %d\n",
1711 __func__, atomic_read(&udev->dev.power.usage_count),
1712 status);
1713 if (status > 0)
1714 status = 0;
1715 return status;
1716 }
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733 void usb_autopm_put_interface(struct usb_interface *intf)
1734 {
1735 struct usb_device *udev = interface_to_usbdev(intf);
1736 int status;
1737
1738 usb_mark_last_busy(udev);
1739 status = pm_runtime_put_sync(&intf->dev);
1740 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1741 __func__, atomic_read(&intf->dev.power.usage_count),
1742 status);
1743 }
1744 EXPORT_SYMBOL_GPL(usb_autopm_put_interface);
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761 void usb_autopm_put_interface_async(struct usb_interface *intf)
1762 {
1763 struct usb_device *udev = interface_to_usbdev(intf);
1764 int status;
1765
1766 usb_mark_last_busy(udev);
1767 status = pm_runtime_put(&intf->dev);
1768 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1769 __func__, atomic_read(&intf->dev.power.usage_count),
1770 status);
1771 }
1772 EXPORT_SYMBOL_GPL(usb_autopm_put_interface_async);
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783 void usb_autopm_put_interface_no_suspend(struct usb_interface *intf)
1784 {
1785 struct usb_device *udev = interface_to_usbdev(intf);
1786
1787 usb_mark_last_busy(udev);
1788 pm_runtime_put_noidle(&intf->dev);
1789 }
1790 EXPORT_SYMBOL_GPL(usb_autopm_put_interface_no_suspend);
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811 int usb_autopm_get_interface(struct usb_interface *intf)
1812 {
1813 int status;
1814
1815 status = pm_runtime_get_sync(&intf->dev);
1816 if (status < 0)
1817 pm_runtime_put_sync(&intf->dev);
1818 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1819 __func__, atomic_read(&intf->dev.power.usage_count),
1820 status);
1821 if (status > 0)
1822 status = 0;
1823 return status;
1824 }
1825 EXPORT_SYMBOL_GPL(usb_autopm_get_interface);
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844 int usb_autopm_get_interface_async(struct usb_interface *intf)
1845 {
1846 int status;
1847
1848 status = pm_runtime_get(&intf->dev);
1849 if (status < 0 && status != -EINPROGRESS)
1850 pm_runtime_put_noidle(&intf->dev);
1851 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1852 __func__, atomic_read(&intf->dev.power.usage_count),
1853 status);
1854 if (status > 0 || status == -EINPROGRESS)
1855 status = 0;
1856 return status;
1857 }
1858 EXPORT_SYMBOL_GPL(usb_autopm_get_interface_async);
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869 void usb_autopm_get_interface_no_resume(struct usb_interface *intf)
1870 {
1871 struct usb_device *udev = interface_to_usbdev(intf);
1872
1873 usb_mark_last_busy(udev);
1874 pm_runtime_get_noresume(&intf->dev);
1875 }
1876 EXPORT_SYMBOL_GPL(usb_autopm_get_interface_no_resume);
1877
1878
1879 static int autosuspend_check(struct usb_device *udev)
1880 {
1881 int w, i;
1882 struct usb_interface *intf;
1883
1884 if (udev->state == USB_STATE_NOTATTACHED)
1885 return -ENODEV;
1886
1887
1888
1889
1890 w = 0;
1891 if (udev->actconfig) {
1892 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
1893 intf = udev->actconfig->interface[i];
1894
1895
1896
1897
1898
1899
1900 if (intf->dev.power.disable_depth)
1901 continue;
1902 if (atomic_read(&intf->dev.power.usage_count) > 0)
1903 return -EBUSY;
1904 w |= intf->needs_remote_wakeup;
1905
1906
1907
1908
1909
1910 if (udev->quirks & USB_QUIRK_RESET_RESUME) {
1911 struct usb_driver *driver;
1912
1913 driver = to_usb_driver(intf->dev.driver);
1914 if (!driver->reset_resume ||
1915 intf->needs_remote_wakeup)
1916 return -EOPNOTSUPP;
1917 }
1918 }
1919 }
1920 if (w && !device_can_wakeup(&udev->dev)) {
1921 dev_dbg(&udev->dev, "remote wakeup needed for autosuspend\n");
1922 return -EOPNOTSUPP;
1923 }
1924
1925
1926
1927
1928
1929
1930 if (w && udev->parent == udev->bus->root_hub &&
1931 bus_to_hcd(udev->bus)->cant_recv_wakeups) {
1932 dev_dbg(&udev->dev, "HCD doesn't handle wakeup requests\n");
1933 return -EOPNOTSUPP;
1934 }
1935
1936 udev->do_remote_wakeup = w;
1937 return 0;
1938 }
1939
1940 int usb_runtime_suspend(struct device *dev)
1941 {
1942 struct usb_device *udev = to_usb_device(dev);
1943 int status;
1944
1945
1946
1947
1948
1949 if (autosuspend_check(udev) != 0)
1950 return -EAGAIN;
1951
1952 status = usb_suspend_both(udev, PMSG_AUTO_SUSPEND);
1953
1954
1955 if (status == -EAGAIN || status == -EBUSY)
1956 usb_mark_last_busy(udev);
1957
1958
1959
1960
1961
1962
1963
1964 if (status != 0 && udev->parent)
1965 return -EBUSY;
1966 return status;
1967 }
1968
1969 int usb_runtime_resume(struct device *dev)
1970 {
1971 struct usb_device *udev = to_usb_device(dev);
1972 int status;
1973
1974
1975
1976
1977 status = usb_resume_both(udev, PMSG_AUTO_RESUME);
1978 return status;
1979 }
1980
1981 int usb_runtime_idle(struct device *dev)
1982 {
1983 struct usb_device *udev = to_usb_device(dev);
1984
1985
1986
1987
1988 if (autosuspend_check(udev) == 0)
1989 pm_runtime_autosuspend(dev);
1990
1991 return -EBUSY;
1992 }
1993
1994 static int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
1995 {
1996 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1997 int ret = -EPERM;
1998
1999 if (hcd->driver->set_usb2_hw_lpm) {
2000 ret = hcd->driver->set_usb2_hw_lpm(hcd, udev, enable);
2001 if (!ret)
2002 udev->usb2_hw_lpm_enabled = enable;
2003 }
2004
2005 return ret;
2006 }
2007
2008 int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
2009 {
2010 if (!udev->usb2_hw_lpm_capable ||
2011 !udev->usb2_hw_lpm_allowed ||
2012 udev->usb2_hw_lpm_enabled)
2013 return 0;
2014
2015 return usb_set_usb2_hardware_lpm(udev, 1);
2016 }
2017
2018 int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
2019 {
2020 if (!udev->usb2_hw_lpm_enabled)
2021 return 0;
2022
2023 return usb_set_usb2_hardware_lpm(udev, 0);
2024 }
2025
2026 #endif
2027
2028 struct bus_type usb_bus_type = {
2029 .name = "usb",
2030 .match = usb_device_match,
2031 .uevent = usb_uevent,
2032 .need_parent_lock = true,
2033 };