1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include <linux/device.h>
29#include <linux/slab.h>
30#include <linux/export.h>
31#include <linux/usb.h>
32#include <linux/usb/quirks.h>
33#include <linux/usb/hcd.h>
34
35#include "usb.h"
36
37
38
39
40
41
42ssize_t usb_store_new_id(struct usb_dynids *dynids,
43 const struct usb_device_id *id_table,
44 struct device_driver *driver,
45 const char *buf, size_t count)
46{
47 struct usb_dynid *dynid;
48 u32 idVendor = 0;
49 u32 idProduct = 0;
50 unsigned int bInterfaceClass = 0;
51 u32 refVendor, refProduct;
52 int fields = 0;
53 int retval = 0;
54
55 fields = sscanf(buf, "%x %x %x %x %x", &idVendor, &idProduct,
56 &bInterfaceClass, &refVendor, &refProduct);
57 if (fields < 2)
58 return -EINVAL;
59
60 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
61 if (!dynid)
62 return -ENOMEM;
63
64 INIT_LIST_HEAD(&dynid->node);
65 dynid->id.idVendor = idVendor;
66 dynid->id.idProduct = idProduct;
67 dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE;
68 if (fields > 2 && bInterfaceClass) {
69 if (bInterfaceClass > 255) {
70 retval = -EINVAL;
71 goto fail;
72 }
73
74 dynid->id.bInterfaceClass = (u8)bInterfaceClass;
75 dynid->id.match_flags |= USB_DEVICE_ID_MATCH_INT_CLASS;
76 }
77
78 if (fields > 4) {
79 const struct usb_device_id *id = id_table;
80
81 if (!id) {
82 retval = -ENODEV;
83 goto fail;
84 }
85
86 for (; id->match_flags; id++)
87 if (id->idVendor == refVendor && id->idProduct == refProduct)
88 break;
89
90 if (id->match_flags) {
91 dynid->id.driver_info = id->driver_info;
92 } else {
93 retval = -ENODEV;
94 goto fail;
95 }
96 }
97
98 spin_lock(&dynids->lock);
99 list_add_tail(&dynid->node, &dynids->list);
100 spin_unlock(&dynids->lock);
101
102 retval = driver_attach(driver);
103
104 if (retval)
105 return retval;
106 return count;
107
108fail:
109 kfree(dynid);
110 return retval;
111}
112EXPORT_SYMBOL_GPL(usb_store_new_id);
113
114ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf)
115{
116 struct usb_dynid *dynid;
117 size_t count = 0;
118
119 list_for_each_entry(dynid, &dynids->list, node)
120 if (dynid->id.bInterfaceClass != 0)
121 count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x %02x\n",
122 dynid->id.idVendor, dynid->id.idProduct,
123 dynid->id.bInterfaceClass);
124 else
125 count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x\n",
126 dynid->id.idVendor, dynid->id.idProduct);
127 return count;
128}
129EXPORT_SYMBOL_GPL(usb_show_dynids);
130
131static ssize_t new_id_show(struct device_driver *driver, char *buf)
132{
133 struct usb_driver *usb_drv = to_usb_driver(driver);
134
135 return usb_show_dynids(&usb_drv->dynids, buf);
136}
137
138static ssize_t new_id_store(struct device_driver *driver,
139 const char *buf, size_t count)
140{
141 struct usb_driver *usb_drv = to_usb_driver(driver);
142
143 return usb_store_new_id(&usb_drv->dynids, usb_drv->id_table, driver, buf, count);
144}
145static DRIVER_ATTR_RW(new_id);
146
147
148
149
150static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
151 size_t count)
152{
153 struct usb_dynid *dynid, *n;
154 struct usb_driver *usb_driver = to_usb_driver(driver);
155 u32 idVendor;
156 u32 idProduct;
157 int fields;
158
159 fields = sscanf(buf, "%x %x", &idVendor, &idProduct);
160 if (fields < 2)
161 return -EINVAL;
162
163 spin_lock(&usb_driver->dynids.lock);
164 list_for_each_entry_safe(dynid, n, &usb_driver->dynids.list, node) {
165 struct usb_device_id *id = &dynid->id;
166
167 if ((id->idVendor == idVendor) &&
168 (id->idProduct == idProduct)) {
169 list_del(&dynid->node);
170 kfree(dynid);
171 break;
172 }
173 }
174 spin_unlock(&usb_driver->dynids.lock);
175 return count;
176}
177
178static ssize_t remove_id_show(struct device_driver *driver, char *buf)
179{
180 return new_id_show(driver, buf);
181}
182static DRIVER_ATTR_RW(remove_id);
183
184static int usb_create_newid_files(struct usb_driver *usb_drv)
185{
186 int error = 0;
187
188 if (usb_drv->no_dynamic_id)
189 goto exit;
190
191 if (usb_drv->probe != NULL) {
192 error = driver_create_file(&usb_drv->drvwrap.driver,
193 &driver_attr_new_id);
194 if (error == 0) {
195 error = driver_create_file(&usb_drv->drvwrap.driver,
196 &driver_attr_remove_id);
197 if (error)
198 driver_remove_file(&usb_drv->drvwrap.driver,
199 &driver_attr_new_id);
200 }
201 }
202exit:
203 return error;
204}
205
206static void usb_remove_newid_files(struct usb_driver *usb_drv)
207{
208 if (usb_drv->no_dynamic_id)
209 return;
210
211 if (usb_drv->probe != NULL) {
212 driver_remove_file(&usb_drv->drvwrap.driver,
213 &driver_attr_remove_id);
214 driver_remove_file(&usb_drv->drvwrap.driver,
215 &driver_attr_new_id);
216 }
217}
218
219static void usb_free_dynids(struct usb_driver *usb_drv)
220{
221 struct usb_dynid *dynid, *n;
222
223 spin_lock(&usb_drv->dynids.lock);
224 list_for_each_entry_safe(dynid, n, &usb_drv->dynids.list, node) {
225 list_del(&dynid->node);
226 kfree(dynid);
227 }
228 spin_unlock(&usb_drv->dynids.lock);
229}
230
231static const struct usb_device_id *usb_match_dynamic_id(struct usb_interface *intf,
232 struct usb_driver *drv)
233{
234 struct usb_dynid *dynid;
235
236 spin_lock(&drv->dynids.lock);
237 list_for_each_entry(dynid, &drv->dynids.list, node) {
238 if (usb_match_one_id(intf, &dynid->id)) {
239 spin_unlock(&drv->dynids.lock);
240 return &dynid->id;
241 }
242 }
243 spin_unlock(&drv->dynids.lock);
244 return NULL;
245}
246
247
248
249static int usb_probe_device(struct device *dev)
250{
251 struct usb_device_driver *udriver = to_usb_device_driver(dev->driver);
252 struct usb_device *udev = to_usb_device(dev);
253 int error = 0;
254
255 dev_dbg(dev, "%s\n", __func__);
256
257
258
259
260
261
262 if (!udriver->supports_autosuspend)
263 error = usb_autoresume_device(udev);
264 if (error)
265 return error;
266
267 if (udriver->generic_subclass)
268 error = usb_generic_driver_probe(udev);
269 if (error)
270 return error;
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293 error = udriver->probe(udev);
294 if (error == -ENODEV && udriver != &usb_generic_driver &&
295 (udriver->id_table || udriver->match)) {
296 udev->use_generic_driver = 1;
297 return -EPROBE_DEFER;
298 }
299 return error;
300}
301
302
303static int usb_unbind_device(struct device *dev)
304{
305 struct usb_device *udev = to_usb_device(dev);
306 struct usb_device_driver *udriver = to_usb_device_driver(dev->driver);
307
308 if (udriver->disconnect)
309 udriver->disconnect(udev);
310 if (udriver->generic_subclass)
311 usb_generic_driver_disconnect(udev);
312 if (!udriver->supports_autosuspend)
313 usb_autosuspend_device(udev);
314 return 0;
315}
316
317
318static int usb_probe_interface(struct device *dev)
319{
320 struct usb_driver *driver = to_usb_driver(dev->driver);
321 struct usb_interface *intf = to_usb_interface(dev);
322 struct usb_device *udev = interface_to_usbdev(intf);
323 const struct usb_device_id *id;
324 int error = -ENODEV;
325 int lpm_disable_error = -ENODEV;
326
327 dev_dbg(dev, "%s\n", __func__);
328
329 intf->needs_binding = 0;
330
331 if (usb_device_is_owned(udev))
332 return error;
333
334 if (udev->authorized == 0) {
335 dev_err(&intf->dev, "Device is not authorized for usage\n");
336 return error;
337 } else if (intf->authorized == 0) {
338 dev_err(&intf->dev, "Interface %d is not authorized for usage\n",
339 intf->altsetting->desc.bInterfaceNumber);
340 return error;
341 }
342
343 id = usb_match_dynamic_id(intf, driver);
344 if (!id)
345 id = usb_match_id(intf, driver->id_table);
346 if (!id)
347 return error;
348
349 dev_dbg(dev, "%s - got id\n", __func__);
350
351 error = usb_autoresume_device(udev);
352 if (error)
353 return error;
354
355 intf->condition = USB_INTERFACE_BINDING;
356
357
358
359
360
361 pm_runtime_set_active(dev);
362 pm_suspend_ignore_children(dev, false);
363 if (driver->supports_autosuspend)
364 pm_runtime_enable(dev);
365
366
367
368
369
370
371
372
373
374
375
376
377 if (driver->disable_hub_initiated_lpm) {
378 lpm_disable_error = usb_unlocked_disable_lpm(udev);
379 if (lpm_disable_error) {
380 dev_err(&intf->dev, "%s Failed to disable LPM for driver %s\n",
381 __func__, driver->name);
382 error = lpm_disable_error;
383 goto err;
384 }
385 }
386
387
388 if (intf->needs_altsetting0) {
389 error = usb_set_interface(udev, intf->altsetting[0].
390 desc.bInterfaceNumber, 0);
391 if (error < 0)
392 goto err;
393 intf->needs_altsetting0 = 0;
394 }
395
396 error = driver->probe(intf, id);
397 if (error)
398 goto err;
399
400 intf->condition = USB_INTERFACE_BOUND;
401
402
403 if (!lpm_disable_error)
404 usb_unlocked_enable_lpm(udev);
405
406 usb_autosuspend_device(udev);
407 return error;
408
409 err:
410 usb_set_intfdata(intf, NULL);
411 intf->needs_remote_wakeup = 0;
412 intf->condition = USB_INTERFACE_UNBOUND;
413
414
415 if (!lpm_disable_error)
416 usb_unlocked_enable_lpm(udev);
417
418
419 if (driver->supports_autosuspend)
420 pm_runtime_disable(dev);
421 pm_runtime_set_suspended(dev);
422
423 usb_autosuspend_device(udev);
424 return error;
425}
426
427
428static int usb_unbind_interface(struct device *dev)
429{
430 struct usb_driver *driver = to_usb_driver(dev->driver);
431 struct usb_interface *intf = to_usb_interface(dev);
432 struct usb_host_endpoint *ep, **eps = NULL;
433 struct usb_device *udev;
434 int i, j, error, r;
435 int lpm_disable_error = -ENODEV;
436
437 intf->condition = USB_INTERFACE_UNBINDING;
438
439
440 udev = interface_to_usbdev(intf);
441 error = usb_autoresume_device(udev);
442
443
444
445
446
447
448 if (driver->disable_hub_initiated_lpm)
449 lpm_disable_error = usb_unlocked_disable_lpm(udev);
450
451
452
453
454
455 if (!driver->soft_unbind || udev->state == USB_STATE_NOTATTACHED)
456 usb_disable_interface(udev, intf, false);
457
458 driver->disconnect(intf);
459
460
461 for (i = 0, j = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
462 ep = &intf->cur_altsetting->endpoint[i];
463 if (ep->streams == 0)
464 continue;
465 if (j == 0) {
466 eps = kmalloc_array(USB_MAXENDPOINTS, sizeof(void *),
467 GFP_KERNEL);
468 if (!eps)
469 break;
470 }
471 eps[j++] = ep;
472 }
473 if (j) {
474 usb_free_streams(intf, eps, j, GFP_KERNEL);
475 kfree(eps);
476 }
477
478
479
480
481
482
483
484 if (intf->cur_altsetting->desc.bAlternateSetting == 0) {
485
486
487
488 usb_enable_interface(udev, intf, false);
489 } else if (!error && !intf->dev.power.is_prepared) {
490 r = usb_set_interface(udev, intf->altsetting[0].
491 desc.bInterfaceNumber, 0);
492 if (r < 0)
493 intf->needs_altsetting0 = 1;
494 } else {
495 intf->needs_altsetting0 = 1;
496 }
497 usb_set_intfdata(intf, NULL);
498
499 intf->condition = USB_INTERFACE_UNBOUND;
500 intf->needs_remote_wakeup = 0;
501
502
503 if (!lpm_disable_error)
504 usb_unlocked_enable_lpm(udev);
505
506
507 if (driver->supports_autosuspend)
508 pm_runtime_disable(dev);
509 pm_runtime_set_suspended(dev);
510
511 if (!error)
512 usb_autosuspend_device(udev);
513
514 return 0;
515}
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535int usb_driver_claim_interface(struct usb_driver *driver,
536 struct usb_interface *iface, void *data)
537{
538 struct device *dev;
539 int retval = 0;
540
541 if (!iface)
542 return -ENODEV;
543
544 dev = &iface->dev;
545 if (dev->driver)
546 return -EBUSY;
547
548
549 if (!iface->authorized)
550 return -ENODEV;
551
552 dev->driver = &driver->drvwrap.driver;
553 usb_set_intfdata(iface, data);
554 iface->needs_binding = 0;
555
556 iface->condition = USB_INTERFACE_BOUND;
557
558
559
560
561
562
563
564 pm_suspend_ignore_children(dev, false);
565 if (driver->supports_autosuspend)
566 pm_runtime_enable(dev);
567 else
568 pm_runtime_set_active(dev);
569
570
571
572
573 if (device_is_registered(dev))
574 retval = device_bind_driver(dev);
575
576 if (retval) {
577 dev->driver = NULL;
578 usb_set_intfdata(iface, NULL);
579 iface->needs_remote_wakeup = 0;
580 iface->condition = USB_INTERFACE_UNBOUND;
581
582
583
584
585
586 if (driver->supports_autosuspend)
587 pm_runtime_disable(dev);
588 pm_runtime_set_suspended(dev);
589 }
590
591 return retval;
592}
593EXPORT_SYMBOL_GPL(usb_driver_claim_interface);
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609void usb_driver_release_interface(struct usb_driver *driver,
610 struct usb_interface *iface)
611{
612 struct device *dev = &iface->dev;
613
614
615 if (!dev->driver || dev->driver != &driver->drvwrap.driver)
616 return;
617
618
619 if (iface->condition != USB_INTERFACE_BOUND)
620 return;
621 iface->condition = USB_INTERFACE_UNBINDING;
622
623
624
625
626 if (device_is_registered(dev)) {
627 device_release_driver(dev);
628 } else {
629 device_lock(dev);
630 usb_unbind_interface(dev);
631 dev->driver = NULL;
632 device_unlock(dev);
633 }
634}
635EXPORT_SYMBOL_GPL(usb_driver_release_interface);
636
637
638int usb_match_device(struct usb_device *dev, const struct usb_device_id *id)
639{
640 if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
641 id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
642 return 0;
643
644 if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
645 id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
646 return 0;
647
648
649
650 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
651 (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice)))
652 return 0;
653
654 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
655 (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice)))
656 return 0;
657
658 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
659 (id->bDeviceClass != dev->descriptor.bDeviceClass))
660 return 0;
661
662 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
663 (id->bDeviceSubClass != dev->descriptor.bDeviceSubClass))
664 return 0;
665
666 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
667 (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
668 return 0;
669
670 return 1;
671}
672
673
674int usb_match_one_id_intf(struct usb_device *dev,
675 struct usb_host_interface *intf,
676 const struct usb_device_id *id)
677{
678
679
680
681 if (dev->descriptor.bDeviceClass == USB_CLASS_VENDOR_SPEC &&
682 !(id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
683 (id->match_flags & (USB_DEVICE_ID_MATCH_INT_CLASS |
684 USB_DEVICE_ID_MATCH_INT_SUBCLASS |
685 USB_DEVICE_ID_MATCH_INT_PROTOCOL |
686 USB_DEVICE_ID_MATCH_INT_NUMBER)))
687 return 0;
688
689 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
690 (id->bInterfaceClass != intf->desc.bInterfaceClass))
691 return 0;
692
693 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
694 (id->bInterfaceSubClass != intf->desc.bInterfaceSubClass))
695 return 0;
696
697 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
698 (id->bInterfaceProtocol != intf->desc.bInterfaceProtocol))
699 return 0;
700
701 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER) &&
702 (id->bInterfaceNumber != intf->desc.bInterfaceNumber))
703 return 0;
704
705 return 1;
706}
707
708
709int usb_match_one_id(struct usb_interface *interface,
710 const struct usb_device_id *id)
711{
712 struct usb_host_interface *intf;
713 struct usb_device *dev;
714
715
716 if (id == NULL)
717 return 0;
718
719 intf = interface->cur_altsetting;
720 dev = interface_to_usbdev(interface);
721
722 if (!usb_match_device(dev, id))
723 return 0;
724
725 return usb_match_one_id_intf(dev, intf, id);
726}
727EXPORT_SYMBOL_GPL(usb_match_one_id);
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802const struct usb_device_id *usb_match_id(struct usb_interface *interface,
803 const struct usb_device_id *id)
804{
805
806 if (id == NULL)
807 return NULL;
808
809
810
811
812
813
814 for (; id->idVendor || id->idProduct || id->bDeviceClass ||
815 id->bInterfaceClass || id->driver_info; id++) {
816 if (usb_match_one_id(interface, id))
817 return id;
818 }
819
820 return NULL;
821}
822EXPORT_SYMBOL_GPL(usb_match_id);
823
824const struct usb_device_id *usb_device_match_id(struct usb_device *udev,
825 const struct usb_device_id *id)
826{
827 if (!id)
828 return NULL;
829
830 for (; id->idVendor || id->idProduct ; id++) {
831 if (usb_match_device(udev, id))
832 return id;
833 }
834
835 return NULL;
836}
837EXPORT_SYMBOL_GPL(usb_device_match_id);
838
839bool usb_driver_applicable(struct usb_device *udev,
840 struct usb_device_driver *udrv)
841{
842 if (udrv->id_table && udrv->match)
843 return usb_device_match_id(udev, udrv->id_table) != NULL &&
844 udrv->match(udev);
845
846 if (udrv->id_table)
847 return usb_device_match_id(udev, udrv->id_table) != NULL;
848
849 if (udrv->match)
850 return udrv->match(udev);
851
852 return false;
853}
854
855static int usb_device_match(struct device *dev, struct device_driver *drv)
856{
857
858 if (is_usb_device(dev)) {
859 struct usb_device *udev;
860 struct usb_device_driver *udrv;
861
862
863 if (!is_usb_device_driver(drv))
864 return 0;
865
866 udev = to_usb_device(dev);
867 udrv = to_usb_device_driver(drv);
868
869
870
871
872
873 if (!udrv->id_table && !udrv->match)
874 return 1;
875
876 return usb_driver_applicable(udev, udrv);
877
878 } else if (is_usb_interface(dev)) {
879 struct usb_interface *intf;
880 struct usb_driver *usb_drv;
881 const struct usb_device_id *id;
882
883
884 if (is_usb_device_driver(drv))
885 return 0;
886
887 intf = to_usb_interface(dev);
888 usb_drv = to_usb_driver(drv);
889
890 id = usb_match_id(intf, usb_drv->id_table);
891 if (id)
892 return 1;
893
894 id = usb_match_dynamic_id(intf, usb_drv);
895 if (id)
896 return 1;
897 }
898
899 return 0;
900}
901
902static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
903{
904 struct usb_device *usb_dev;
905
906 if (is_usb_device(dev)) {
907 usb_dev = to_usb_device(dev);
908 } else if (is_usb_interface(dev)) {
909 struct usb_interface *intf = to_usb_interface(dev);
910
911 usb_dev = interface_to_usbdev(intf);
912 } else {
913 return 0;
914 }
915
916 if (usb_dev->devnum < 0) {
917
918 pr_debug("usb %s: already deleted?\n", dev_name(dev));
919 return -ENODEV;
920 }
921 if (!usb_dev->bus) {
922 pr_debug("usb %s: bus removed?\n", dev_name(dev));
923 return -ENODEV;
924 }
925
926
927 if (add_uevent_var(env, "PRODUCT=%x/%x/%x",
928 le16_to_cpu(usb_dev->descriptor.idVendor),
929 le16_to_cpu(usb_dev->descriptor.idProduct),
930 le16_to_cpu(usb_dev->descriptor.bcdDevice)))
931 return -ENOMEM;
932
933
934 if (add_uevent_var(env, "TYPE=%d/%d/%d",
935 usb_dev->descriptor.bDeviceClass,
936 usb_dev->descriptor.bDeviceSubClass,
937 usb_dev->descriptor.bDeviceProtocol))
938 return -ENOMEM;
939
940 return 0;
941}
942
943static int __usb_bus_reprobe_drivers(struct device *dev, void *data)
944{
945 struct usb_device_driver *new_udriver = data;
946 struct usb_device *udev;
947 int ret;
948
949
950 if (dev->driver != &usb_generic_driver.drvwrap.driver)
951 return 0;
952
953 udev = to_usb_device(dev);
954 if (!usb_driver_applicable(udev, new_udriver))
955 return 0;
956
957 ret = device_reprobe(dev);
958 if (ret && ret != -EPROBE_DEFER)
959 dev_err(dev, "Failed to reprobe device (error %d)\n", ret);
960
961 return 0;
962}
963
964
965
966
967
968
969
970
971
972
973
974
975int usb_register_device_driver(struct usb_device_driver *new_udriver,
976 struct module *owner)
977{
978 int retval = 0;
979
980 if (usb_disabled())
981 return -ENODEV;
982
983 new_udriver->drvwrap.for_devices = 1;
984 new_udriver->drvwrap.driver.name = new_udriver->name;
985 new_udriver->drvwrap.driver.bus = &usb_bus_type;
986 new_udriver->drvwrap.driver.probe = usb_probe_device;
987 new_udriver->drvwrap.driver.remove = usb_unbind_device;
988 new_udriver->drvwrap.driver.owner = owner;
989 new_udriver->drvwrap.driver.dev_groups = new_udriver->dev_groups;
990
991 retval = driver_register(&new_udriver->drvwrap.driver);
992
993 if (!retval) {
994 pr_info("%s: registered new device driver %s\n",
995 usbcore_name, new_udriver->name);
996
997
998
999
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}
1009EXPORT_SYMBOL_GPL(usb_register_device_driver);
1010
1011
1012
1013
1014
1015
1016
1017
1018void 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}
1025EXPORT_SYMBOL_GPL(usb_deregister_device_driver);
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043int 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
1073out:
1074 return retval;
1075
1076out_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}
1083EXPORT_SYMBOL_GPL(usb_register_driver);
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096void 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}
1105EXPORT_SYMBOL_GPL(usb_deregister);
1106
1107
1108
1109
1110
1111
1112
1113void 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
1130static 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
1154static 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
1177static 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
1200void 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
1214static 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
1235static 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
1261static 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
1296static 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
1317static 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
1364done:
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
1398static 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
1499static 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
1532static 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
1561int 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
1584int 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
1597int 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
1635void usb_enable_autosuspend(struct usb_device *udev)
1636{
1637 pm_runtime_allow(&udev->dev);
1638}
1639EXPORT_SYMBOL_GPL(usb_enable_autosuspend);
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650void usb_disable_autosuspend(struct usb_device *udev)
1651{
1652 pm_runtime_forbid(&udev->dev);
1653}
1654EXPORT_SYMBOL_GPL(usb_disable_autosuspend);
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672void 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
1703int 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
1733void 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}
1744EXPORT_SYMBOL_GPL(usb_autopm_put_interface);
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761void 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}
1772EXPORT_SYMBOL_GPL(usb_autopm_put_interface_async);
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783void 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}
1790EXPORT_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
1811int 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}
1825EXPORT_SYMBOL_GPL(usb_autopm_get_interface);
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844int 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}
1858EXPORT_SYMBOL_GPL(usb_autopm_get_interface_async);
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869void 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}
1876EXPORT_SYMBOL_GPL(usb_autopm_get_interface_no_resume);
1877
1878
1879static 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
1940int 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
1969int 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
1981int 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
1994static 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
2008int 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
2018int 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
2028struct bus_type usb_bus_type = {
2029 .name = "usb",
2030 .match = usb_device_match,
2031 .uevent = usb_uevent,
2032 .need_parent_lock = true,
2033};
2034