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
265 if (!error)
266 error = udriver->probe(udev);
267 return error;
268}
269
270
271static int usb_unbind_device(struct device *dev)
272{
273 struct usb_device *udev = to_usb_device(dev);
274 struct usb_device_driver *udriver = to_usb_device_driver(dev->driver);
275
276 udriver->disconnect(udev);
277 if (!udriver->supports_autosuspend)
278 usb_autosuspend_device(udev);
279 return 0;
280}
281
282
283static int usb_probe_interface(struct device *dev)
284{
285 struct usb_driver *driver = to_usb_driver(dev->driver);
286 struct usb_interface *intf = to_usb_interface(dev);
287 struct usb_device *udev = interface_to_usbdev(intf);
288 const struct usb_device_id *id;
289 int error = -ENODEV;
290 int lpm_disable_error = -ENODEV;
291
292 dev_dbg(dev, "%s\n", __func__);
293
294 intf->needs_binding = 0;
295
296 if (usb_device_is_owned(udev))
297 return error;
298
299 if (udev->authorized == 0) {
300 dev_err(&intf->dev, "Device is not authorized for usage\n");
301 return error;
302 } else if (intf->authorized == 0) {
303 dev_err(&intf->dev, "Interface %d is not authorized for usage\n",
304 intf->altsetting->desc.bInterfaceNumber);
305 return error;
306 }
307
308 id = usb_match_dynamic_id(intf, driver);
309 if (!id)
310 id = usb_match_id(intf, driver->id_table);
311 if (!id)
312 return error;
313
314 dev_dbg(dev, "%s - got id\n", __func__);
315
316 error = usb_autoresume_device(udev);
317 if (error)
318 return error;
319
320 intf->condition = USB_INTERFACE_BINDING;
321
322
323
324
325
326 pm_runtime_set_active(dev);
327 pm_suspend_ignore_children(dev, false);
328 if (driver->supports_autosuspend)
329 pm_runtime_enable(dev);
330
331
332
333
334
335
336
337
338
339
340
341
342 if (driver->disable_hub_initiated_lpm) {
343 lpm_disable_error = usb_unlocked_disable_lpm(udev);
344 if (lpm_disable_error) {
345 dev_err(&intf->dev, "%s Failed to disable LPM for driver %s\n",
346 __func__, driver->name);
347 error = lpm_disable_error;
348 goto err;
349 }
350 }
351
352
353 if (intf->needs_altsetting0) {
354 error = usb_set_interface(udev, intf->altsetting[0].
355 desc.bInterfaceNumber, 0);
356 if (error < 0)
357 goto err;
358 intf->needs_altsetting0 = 0;
359 }
360
361 error = driver->probe(intf, id);
362 if (error)
363 goto err;
364
365 intf->condition = USB_INTERFACE_BOUND;
366
367
368 if (!lpm_disable_error)
369 usb_unlocked_enable_lpm(udev);
370
371 usb_autosuspend_device(udev);
372 return error;
373
374 err:
375 usb_set_intfdata(intf, NULL);
376 intf->needs_remote_wakeup = 0;
377 intf->condition = USB_INTERFACE_UNBOUND;
378
379
380 if (!lpm_disable_error)
381 usb_unlocked_enable_lpm(udev);
382
383
384 if (driver->supports_autosuspend)
385 pm_runtime_disable(dev);
386 pm_runtime_set_suspended(dev);
387
388 usb_autosuspend_device(udev);
389 return error;
390}
391
392
393static int usb_unbind_interface(struct device *dev)
394{
395 struct usb_driver *driver = to_usb_driver(dev->driver);
396 struct usb_interface *intf = to_usb_interface(dev);
397 struct usb_host_endpoint *ep, **eps = NULL;
398 struct usb_device *udev;
399 int i, j, error, r;
400 int lpm_disable_error = -ENODEV;
401
402 intf->condition = USB_INTERFACE_UNBINDING;
403
404
405 udev = interface_to_usbdev(intf);
406 error = usb_autoresume_device(udev);
407
408
409
410
411
412
413 if (driver->disable_hub_initiated_lpm)
414 lpm_disable_error = usb_unlocked_disable_lpm(udev);
415
416
417
418
419
420 if (!driver->soft_unbind || udev->state == USB_STATE_NOTATTACHED)
421 usb_disable_interface(udev, intf, false);
422
423 driver->disconnect(intf);
424
425
426 for (i = 0, j = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
427 ep = &intf->cur_altsetting->endpoint[i];
428 if (ep->streams == 0)
429 continue;
430 if (j == 0) {
431 eps = kmalloc_array(USB_MAXENDPOINTS, sizeof(void *),
432 GFP_KERNEL);
433 if (!eps)
434 break;
435 }
436 eps[j++] = ep;
437 }
438 if (j) {
439 usb_free_streams(intf, eps, j, GFP_KERNEL);
440 kfree(eps);
441 }
442
443
444
445
446
447
448
449 if (intf->cur_altsetting->desc.bAlternateSetting == 0) {
450
451
452
453 usb_enable_interface(udev, intf, false);
454 } else if (!error && !intf->dev.power.is_prepared) {
455 r = usb_set_interface(udev, intf->altsetting[0].
456 desc.bInterfaceNumber, 0);
457 if (r < 0)
458 intf->needs_altsetting0 = 1;
459 } else {
460 intf->needs_altsetting0 = 1;
461 }
462 usb_set_intfdata(intf, NULL);
463
464 intf->condition = USB_INTERFACE_UNBOUND;
465 intf->needs_remote_wakeup = 0;
466
467
468 if (!lpm_disable_error)
469 usb_unlocked_enable_lpm(udev);
470
471
472 if (driver->supports_autosuspend)
473 pm_runtime_disable(dev);
474 pm_runtime_set_suspended(dev);
475
476 if (!error)
477 usb_autosuspend_device(udev);
478
479 return 0;
480}
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504int usb_driver_claim_interface(struct usb_driver *driver,
505 struct usb_interface *iface, void *priv)
506{
507 struct device *dev;
508 int retval = 0;
509
510 if (!iface)
511 return -ENODEV;
512
513 dev = &iface->dev;
514 if (dev->driver)
515 return -EBUSY;
516
517
518 if (!iface->authorized)
519 return -ENODEV;
520
521 dev->driver = &driver->drvwrap.driver;
522 usb_set_intfdata(iface, priv);
523 iface->needs_binding = 0;
524
525 iface->condition = USB_INTERFACE_BOUND;
526
527
528
529
530
531
532
533 pm_suspend_ignore_children(dev, false);
534 if (driver->supports_autosuspend)
535 pm_runtime_enable(dev);
536 else
537 pm_runtime_set_active(dev);
538
539
540
541
542 if (device_is_registered(dev))
543 retval = device_bind_driver(dev);
544
545 if (retval) {
546 dev->driver = NULL;
547 usb_set_intfdata(iface, NULL);
548 iface->needs_remote_wakeup = 0;
549 iface->condition = USB_INTERFACE_UNBOUND;
550
551
552
553
554
555 if (driver->supports_autosuspend)
556 pm_runtime_disable(dev);
557 pm_runtime_set_suspended(dev);
558 }
559
560 return retval;
561}
562EXPORT_SYMBOL_GPL(usb_driver_claim_interface);
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578void usb_driver_release_interface(struct usb_driver *driver,
579 struct usb_interface *iface)
580{
581 struct device *dev = &iface->dev;
582
583
584 if (!dev->driver || dev->driver != &driver->drvwrap.driver)
585 return;
586
587
588 if (iface->condition != USB_INTERFACE_BOUND)
589 return;
590 iface->condition = USB_INTERFACE_UNBINDING;
591
592
593
594
595 if (device_is_registered(dev)) {
596 device_release_driver(dev);
597 } else {
598 device_lock(dev);
599 usb_unbind_interface(dev);
600 dev->driver = NULL;
601 device_unlock(dev);
602 }
603}
604EXPORT_SYMBOL_GPL(usb_driver_release_interface);
605
606
607int usb_match_device(struct usb_device *dev, const struct usb_device_id *id)
608{
609 if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
610 id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
611 return 0;
612
613 if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
614 id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
615 return 0;
616
617
618
619 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
620 (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice)))
621 return 0;
622
623 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
624 (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice)))
625 return 0;
626
627 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
628 (id->bDeviceClass != dev->descriptor.bDeviceClass))
629 return 0;
630
631 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
632 (id->bDeviceSubClass != dev->descriptor.bDeviceSubClass))
633 return 0;
634
635 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
636 (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
637 return 0;
638
639 return 1;
640}
641
642
643int usb_match_one_id_intf(struct usb_device *dev,
644 struct usb_host_interface *intf,
645 const struct usb_device_id *id)
646{
647
648
649
650 if (dev->descriptor.bDeviceClass == USB_CLASS_VENDOR_SPEC &&
651 !(id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
652 (id->match_flags & (USB_DEVICE_ID_MATCH_INT_CLASS |
653 USB_DEVICE_ID_MATCH_INT_SUBCLASS |
654 USB_DEVICE_ID_MATCH_INT_PROTOCOL |
655 USB_DEVICE_ID_MATCH_INT_NUMBER)))
656 return 0;
657
658 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
659 (id->bInterfaceClass != intf->desc.bInterfaceClass))
660 return 0;
661
662 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
663 (id->bInterfaceSubClass != intf->desc.bInterfaceSubClass))
664 return 0;
665
666 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
667 (id->bInterfaceProtocol != intf->desc.bInterfaceProtocol))
668 return 0;
669
670 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER) &&
671 (id->bInterfaceNumber != intf->desc.bInterfaceNumber))
672 return 0;
673
674 return 1;
675}
676
677
678int usb_match_one_id(struct usb_interface *interface,
679 const struct usb_device_id *id)
680{
681 struct usb_host_interface *intf;
682 struct usb_device *dev;
683
684
685 if (id == NULL)
686 return 0;
687
688 intf = interface->cur_altsetting;
689 dev = interface_to_usbdev(interface);
690
691 if (!usb_match_device(dev, id))
692 return 0;
693
694 return usb_match_one_id_intf(dev, intf, id);
695}
696EXPORT_SYMBOL_GPL(usb_match_one_id);
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
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
771const struct usb_device_id *usb_match_id(struct usb_interface *interface,
772 const struct usb_device_id *id)
773{
774
775 if (id == NULL)
776 return NULL;
777
778
779
780
781
782
783 for (; id->idVendor || id->idProduct || id->bDeviceClass ||
784 id->bInterfaceClass || id->driver_info; id++) {
785 if (usb_match_one_id(interface, id))
786 return id;
787 }
788
789 return NULL;
790}
791EXPORT_SYMBOL_GPL(usb_match_id);
792
793static int usb_device_match(struct device *dev, struct device_driver *drv)
794{
795
796 if (is_usb_device(dev)) {
797
798
799 if (!is_usb_device_driver(drv))
800 return 0;
801
802
803 return 1;
804
805 } else if (is_usb_interface(dev)) {
806 struct usb_interface *intf;
807 struct usb_driver *usb_drv;
808 const struct usb_device_id *id;
809
810
811 if (is_usb_device_driver(drv))
812 return 0;
813
814 intf = to_usb_interface(dev);
815 usb_drv = to_usb_driver(drv);
816
817 id = usb_match_id(intf, usb_drv->id_table);
818 if (id)
819 return 1;
820
821 id = usb_match_dynamic_id(intf, usb_drv);
822 if (id)
823 return 1;
824 }
825
826 return 0;
827}
828
829static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
830{
831 struct usb_device *usb_dev;
832
833 if (is_usb_device(dev)) {
834 usb_dev = to_usb_device(dev);
835 } else if (is_usb_interface(dev)) {
836 struct usb_interface *intf = to_usb_interface(dev);
837
838 usb_dev = interface_to_usbdev(intf);
839 } else {
840 return 0;
841 }
842
843 if (usb_dev->devnum < 0) {
844
845 pr_debug("usb %s: already deleted?\n", dev_name(dev));
846 return -ENODEV;
847 }
848 if (!usb_dev->bus) {
849 pr_debug("usb %s: bus removed?\n", dev_name(dev));
850 return -ENODEV;
851 }
852
853
854 if (add_uevent_var(env, "PRODUCT=%x/%x/%x",
855 le16_to_cpu(usb_dev->descriptor.idVendor),
856 le16_to_cpu(usb_dev->descriptor.idProduct),
857 le16_to_cpu(usb_dev->descriptor.bcdDevice)))
858 return -ENOMEM;
859
860
861 if (add_uevent_var(env, "TYPE=%d/%d/%d",
862 usb_dev->descriptor.bDeviceClass,
863 usb_dev->descriptor.bDeviceSubClass,
864 usb_dev->descriptor.bDeviceProtocol))
865 return -ENOMEM;
866
867 return 0;
868}
869
870
871
872
873
874
875
876
877
878
879
880
881int usb_register_device_driver(struct usb_device_driver *new_udriver,
882 struct module *owner)
883{
884 int retval = 0;
885
886 if (usb_disabled())
887 return -ENODEV;
888
889 new_udriver->drvwrap.for_devices = 1;
890 new_udriver->drvwrap.driver.name = new_udriver->name;
891 new_udriver->drvwrap.driver.bus = &usb_bus_type;
892 new_udriver->drvwrap.driver.probe = usb_probe_device;
893 new_udriver->drvwrap.driver.remove = usb_unbind_device;
894 new_udriver->drvwrap.driver.owner = owner;
895
896 retval = driver_register(&new_udriver->drvwrap.driver);
897
898 if (!retval)
899 pr_info("%s: registered new device driver %s\n",
900 usbcore_name, new_udriver->name);
901 else
902 printk(KERN_ERR "%s: error %d registering device "
903 " driver %s\n",
904 usbcore_name, retval, new_udriver->name);
905
906 return retval;
907}
908EXPORT_SYMBOL_GPL(usb_register_device_driver);
909
910
911
912
913
914
915
916
917void usb_deregister_device_driver(struct usb_device_driver *udriver)
918{
919 pr_info("%s: deregistering device driver %s\n",
920 usbcore_name, udriver->name);
921
922 driver_unregister(&udriver->drvwrap.driver);
923}
924EXPORT_SYMBOL_GPL(usb_deregister_device_driver);
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
943 const char *mod_name)
944{
945 int retval = 0;
946
947 if (usb_disabled())
948 return -ENODEV;
949
950 new_driver->drvwrap.for_devices = 0;
951 new_driver->drvwrap.driver.name = new_driver->name;
952 new_driver->drvwrap.driver.bus = &usb_bus_type;
953 new_driver->drvwrap.driver.probe = usb_probe_interface;
954 new_driver->drvwrap.driver.remove = usb_unbind_interface;
955 new_driver->drvwrap.driver.owner = owner;
956 new_driver->drvwrap.driver.mod_name = mod_name;
957 spin_lock_init(&new_driver->dynids.lock);
958 INIT_LIST_HEAD(&new_driver->dynids.list);
959
960 retval = driver_register(&new_driver->drvwrap.driver);
961 if (retval)
962 goto out;
963
964 retval = usb_create_newid_files(new_driver);
965 if (retval)
966 goto out_newid;
967
968 pr_info("%s: registered new interface driver %s\n",
969 usbcore_name, new_driver->name);
970
971out:
972 return retval;
973
974out_newid:
975 driver_unregister(&new_driver->drvwrap.driver);
976
977 printk(KERN_ERR "%s: error %d registering interface "
978 " driver %s\n",
979 usbcore_name, retval, new_driver->name);
980 goto out;
981}
982EXPORT_SYMBOL_GPL(usb_register_driver);
983
984
985
986
987
988
989
990
991
992
993
994
995void usb_deregister(struct usb_driver *driver)
996{
997 pr_info("%s: deregistering interface driver %s\n",
998 usbcore_name, driver->name);
999
1000 usb_remove_newid_files(driver);
1001 driver_unregister(&driver->drvwrap.driver);
1002 usb_free_dynids(driver);
1003}
1004EXPORT_SYMBOL_GPL(usb_deregister);
1005
1006
1007
1008
1009
1010
1011
1012void usb_forced_unbind_intf(struct usb_interface *intf)
1013{
1014 struct usb_driver *driver = to_usb_driver(intf->dev.driver);
1015
1016 dev_dbg(&intf->dev, "forced unbind\n");
1017 usb_driver_release_interface(driver, intf);
1018
1019
1020 intf->needs_binding = 1;
1021}
1022
1023
1024
1025
1026
1027
1028
1029static void unbind_marked_interfaces(struct usb_device *udev)
1030{
1031 struct usb_host_config *config;
1032 int i;
1033 struct usb_interface *intf;
1034
1035 config = udev->actconfig;
1036 if (config) {
1037 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
1038 intf = config->interface[i];
1039 if (intf->dev.driver && intf->needs_binding)
1040 usb_forced_unbind_intf(intf);
1041 }
1042 }
1043}
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053static void usb_rebind_intf(struct usb_interface *intf)
1054{
1055 int rc;
1056
1057
1058 if (intf->dev.driver)
1059 usb_forced_unbind_intf(intf);
1060
1061
1062 if (!intf->dev.power.is_prepared) {
1063 intf->needs_binding = 0;
1064 rc = device_attach(&intf->dev);
1065 if (rc < 0 && rc != -EPROBE_DEFER)
1066 dev_warn(&intf->dev, "rebind failed: %d\n", rc);
1067 }
1068}
1069
1070
1071
1072
1073
1074
1075
1076static void rebind_marked_interfaces(struct usb_device *udev)
1077{
1078 struct usb_host_config *config;
1079 int i;
1080 struct usb_interface *intf;
1081
1082 config = udev->actconfig;
1083 if (config) {
1084 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
1085 intf = config->interface[i];
1086 if (intf->needs_binding)
1087 usb_rebind_intf(intf);
1088 }
1089 }
1090}
1091
1092
1093
1094
1095
1096
1097
1098
1099void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev)
1100{
1101 unbind_marked_interfaces(udev);
1102 rebind_marked_interfaces(udev);
1103}
1104
1105#ifdef CONFIG_PM
1106
1107
1108
1109
1110
1111
1112
1113static void unbind_no_pm_drivers_interfaces(struct usb_device *udev)
1114{
1115 struct usb_host_config *config;
1116 int i;
1117 struct usb_interface *intf;
1118 struct usb_driver *drv;
1119
1120 config = udev->actconfig;
1121 if (config) {
1122 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
1123 intf = config->interface[i];
1124
1125 if (intf->dev.driver) {
1126 drv = to_usb_driver(intf->dev.driver);
1127 if (!drv->suspend || !drv->resume)
1128 usb_forced_unbind_intf(intf);
1129 }
1130 }
1131 }
1132}
1133
1134static int usb_suspend_device(struct usb_device *udev, pm_message_t msg)
1135{
1136 struct usb_device_driver *udriver;
1137 int status = 0;
1138
1139 if (udev->state == USB_STATE_NOTATTACHED ||
1140 udev->state == USB_STATE_SUSPENDED)
1141 goto done;
1142
1143
1144 if (udev->dev.driver)
1145 udriver = to_usb_device_driver(udev->dev.driver);
1146 else {
1147 udev->do_remote_wakeup = 0;
1148 udriver = &usb_generic_driver;
1149 }
1150 status = udriver->suspend(udev, msg);
1151
1152 done:
1153 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1154 return status;
1155}
1156
1157static int usb_resume_device(struct usb_device *udev, pm_message_t msg)
1158{
1159 struct usb_device_driver *udriver;
1160 int status = 0;
1161
1162 if (udev->state == USB_STATE_NOTATTACHED)
1163 goto done;
1164
1165
1166 if (udev->dev.driver == NULL) {
1167 status = -ENOTCONN;
1168 goto done;
1169 }
1170
1171
1172
1173
1174 if (!PMSG_IS_AUTO(msg) && udev->parent && udev->bus->hs_companion)
1175 device_pm_wait_for_dev(&udev->dev,
1176 &udev->bus->hs_companion->root_hub->dev);
1177
1178 if (udev->quirks & USB_QUIRK_RESET_RESUME)
1179 udev->reset_resume = 1;
1180
1181 udriver = to_usb_device_driver(udev->dev.driver);
1182 status = udriver->resume(udev, msg);
1183
1184 done:
1185 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1186 return status;
1187}
1188
1189static int usb_suspend_interface(struct usb_device *udev,
1190 struct usb_interface *intf, pm_message_t msg)
1191{
1192 struct usb_driver *driver;
1193 int status = 0;
1194
1195 if (udev->state == USB_STATE_NOTATTACHED ||
1196 intf->condition == USB_INTERFACE_UNBOUND)
1197 goto done;
1198 driver = to_usb_driver(intf->dev.driver);
1199
1200
1201 status = driver->suspend(intf, msg);
1202 if (status && !PMSG_IS_AUTO(msg))
1203 dev_err(&intf->dev, "suspend error %d\n", status);
1204
1205 done:
1206 dev_vdbg(&intf->dev, "%s: status %d\n", __func__, status);
1207 return status;
1208}
1209
1210static int usb_resume_interface(struct usb_device *udev,
1211 struct usb_interface *intf, pm_message_t msg, int reset_resume)
1212{
1213 struct usb_driver *driver;
1214 int status = 0;
1215
1216 if (udev->state == USB_STATE_NOTATTACHED)
1217 goto done;
1218
1219
1220 if (intf->condition == USB_INTERFACE_UNBINDING)
1221 goto done;
1222
1223
1224 if (intf->condition == USB_INTERFACE_UNBOUND) {
1225
1226
1227 if (intf->needs_altsetting0 && !intf->dev.power.is_prepared) {
1228 usb_set_interface(udev, intf->altsetting[0].
1229 desc.bInterfaceNumber, 0);
1230 intf->needs_altsetting0 = 0;
1231 }
1232 goto done;
1233 }
1234
1235
1236 if (intf->needs_binding)
1237 goto done;
1238 driver = to_usb_driver(intf->dev.driver);
1239
1240 if (reset_resume) {
1241 if (driver->reset_resume) {
1242 status = driver->reset_resume(intf);
1243 if (status)
1244 dev_err(&intf->dev, "%s error %d\n",
1245 "reset_resume", status);
1246 } else {
1247 intf->needs_binding = 1;
1248 dev_dbg(&intf->dev, "no reset_resume for driver %s?\n",
1249 driver->name);
1250 }
1251 } else {
1252 status = driver->resume(intf);
1253 if (status)
1254 dev_err(&intf->dev, "resume error %d\n", status);
1255 }
1256
1257done:
1258 dev_vdbg(&intf->dev, "%s: status %d\n", __func__, status);
1259
1260
1261 return status;
1262}
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
1292{
1293 int status = 0;
1294 int i = 0, n = 0;
1295 struct usb_interface *intf;
1296
1297 if (udev->state == USB_STATE_NOTATTACHED ||
1298 udev->state == USB_STATE_SUSPENDED)
1299 goto done;
1300
1301
1302 if (udev->actconfig) {
1303 n = udev->actconfig->desc.bNumInterfaces;
1304 for (i = n - 1; i >= 0; --i) {
1305 intf = udev->actconfig->interface[i];
1306 status = usb_suspend_interface(udev, intf, msg);
1307
1308
1309 if (!PMSG_IS_AUTO(msg))
1310 status = 0;
1311 if (status != 0)
1312 break;
1313 }
1314 }
1315 if (status == 0) {
1316 status = usb_suspend_device(udev, msg);
1317
1318
1319
1320
1321
1322
1323
1324 if (udev->parent && !PMSG_IS_AUTO(msg))
1325 status = 0;
1326
1327
1328
1329
1330
1331 if (status && status != -EBUSY) {
1332 int err;
1333 u16 devstat;
1334
1335 err = usb_get_std_status(udev, USB_RECIP_DEVICE, 0,
1336 &devstat);
1337 if (err) {
1338 dev_err(&udev->dev,
1339 "Failed to suspend device, error %d\n",
1340 status);
1341 goto done;
1342 }
1343 }
1344 }
1345
1346
1347 if (status != 0) {
1348 if (udev->actconfig) {
1349 msg.event ^= (PM_EVENT_SUSPEND | PM_EVENT_RESUME);
1350 while (++i < n) {
1351 intf = udev->actconfig->interface[i];
1352 usb_resume_interface(udev, intf, msg, 0);
1353 }
1354 }
1355
1356
1357
1358
1359 } else {
1360 udev->can_submit = 0;
1361 for (i = 0; i < 16; ++i) {
1362 usb_hcd_flush_endpoint(udev, udev->ep_out[i]);
1363 usb_hcd_flush_endpoint(udev, udev->ep_in[i]);
1364 }
1365 }
1366
1367 done:
1368 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1369 return status;
1370}
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392static int usb_resume_both(struct usb_device *udev, pm_message_t msg)
1393{
1394 int status = 0;
1395 int i;
1396 struct usb_interface *intf;
1397
1398 if (udev->state == USB_STATE_NOTATTACHED) {
1399 status = -ENODEV;
1400 goto done;
1401 }
1402 udev->can_submit = 1;
1403
1404
1405 if (udev->state == USB_STATE_SUSPENDED || udev->reset_resume)
1406 status = usb_resume_device(udev, msg);
1407
1408
1409 if (status == 0 && udev->actconfig) {
1410 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
1411 intf = udev->actconfig->interface[i];
1412 usb_resume_interface(udev, intf, msg,
1413 udev->reset_resume);
1414 }
1415 }
1416 usb_mark_last_busy(udev);
1417
1418 done:
1419 dev_vdbg(&udev->dev, "%s: status %d\n", __func__, status);
1420 if (!status)
1421 udev->reset_resume = 0;
1422 return status;
1423}
1424
1425static void choose_wakeup(struct usb_device *udev, pm_message_t msg)
1426{
1427 int w;
1428
1429
1430
1431
1432
1433 if (msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_QUIESCE) {
1434 if (udev->state != USB_STATE_SUSPENDED)
1435 udev->do_remote_wakeup = 0;
1436 return;
1437 }
1438
1439
1440
1441
1442 w = device_may_wakeup(&udev->dev);
1443
1444
1445
1446
1447 if (udev->state == USB_STATE_SUSPENDED && w != udev->do_remote_wakeup)
1448 pm_runtime_resume(&udev->dev);
1449 udev->do_remote_wakeup = w;
1450}
1451
1452
1453int usb_suspend(struct device *dev, pm_message_t msg)
1454{
1455 struct usb_device *udev = to_usb_device(dev);
1456 int r;
1457
1458 unbind_no_pm_drivers_interfaces(udev);
1459
1460
1461
1462
1463
1464 choose_wakeup(udev, msg);
1465 r = usb_suspend_both(udev, msg);
1466 if (r)
1467 return r;
1468
1469 if (udev->quirks & USB_QUIRK_DISCONNECT_SUSPEND)
1470 usb_port_disable(udev);
1471
1472 return 0;
1473}
1474
1475
1476int usb_resume_complete(struct device *dev)
1477{
1478 struct usb_device *udev = to_usb_device(dev);
1479
1480
1481
1482
1483 if (udev->state != USB_STATE_NOTATTACHED)
1484 rebind_marked_interfaces(udev);
1485 return 0;
1486}
1487
1488
1489int usb_resume(struct device *dev, pm_message_t msg)
1490{
1491 struct usb_device *udev = to_usb_device(dev);
1492 int status;
1493
1494
1495
1496
1497
1498
1499
1500
1501 status = usb_resume_both(udev, msg);
1502 if (status == 0) {
1503 pm_runtime_disable(dev);
1504 pm_runtime_set_active(dev);
1505 pm_runtime_enable(dev);
1506 unbind_marked_interfaces(udev);
1507 }
1508
1509
1510
1511
1512 if (status == -ENODEV || status == -ESHUTDOWN)
1513 status = 0;
1514 return status;
1515}
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527void usb_enable_autosuspend(struct usb_device *udev)
1528{
1529 pm_runtime_allow(&udev->dev);
1530}
1531EXPORT_SYMBOL_GPL(usb_enable_autosuspend);
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542void usb_disable_autosuspend(struct usb_device *udev)
1543{
1544 pm_runtime_forbid(&udev->dev);
1545}
1546EXPORT_SYMBOL_GPL(usb_disable_autosuspend);
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564void usb_autosuspend_device(struct usb_device *udev)
1565{
1566 int status;
1567
1568 usb_mark_last_busy(udev);
1569 status = pm_runtime_put_sync_autosuspend(&udev->dev);
1570 dev_vdbg(&udev->dev, "%s: cnt %d -> %d\n",
1571 __func__, atomic_read(&udev->dev.power.usage_count),
1572 status);
1573}
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595int usb_autoresume_device(struct usb_device *udev)
1596{
1597 int status;
1598
1599 status = pm_runtime_get_sync(&udev->dev);
1600 if (status < 0)
1601 pm_runtime_put_sync(&udev->dev);
1602 dev_vdbg(&udev->dev, "%s: cnt %d -> %d\n",
1603 __func__, atomic_read(&udev->dev.power.usage_count),
1604 status);
1605 if (status > 0)
1606 status = 0;
1607 return status;
1608}
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625void usb_autopm_put_interface(struct usb_interface *intf)
1626{
1627 struct usb_device *udev = interface_to_usbdev(intf);
1628 int status;
1629
1630 usb_mark_last_busy(udev);
1631 status = pm_runtime_put_sync(&intf->dev);
1632 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1633 __func__, atomic_read(&intf->dev.power.usage_count),
1634 status);
1635}
1636EXPORT_SYMBOL_GPL(usb_autopm_put_interface);
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653void usb_autopm_put_interface_async(struct usb_interface *intf)
1654{
1655 struct usb_device *udev = interface_to_usbdev(intf);
1656 int status;
1657
1658 usb_mark_last_busy(udev);
1659 status = pm_runtime_put(&intf->dev);
1660 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1661 __func__, atomic_read(&intf->dev.power.usage_count),
1662 status);
1663}
1664EXPORT_SYMBOL_GPL(usb_autopm_put_interface_async);
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675void usb_autopm_put_interface_no_suspend(struct usb_interface *intf)
1676{
1677 struct usb_device *udev = interface_to_usbdev(intf);
1678
1679 usb_mark_last_busy(udev);
1680 pm_runtime_put_noidle(&intf->dev);
1681}
1682EXPORT_SYMBOL_GPL(usb_autopm_put_interface_no_suspend);
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703int usb_autopm_get_interface(struct usb_interface *intf)
1704{
1705 int status;
1706
1707 status = pm_runtime_get_sync(&intf->dev);
1708 if (status < 0)
1709 pm_runtime_put_sync(&intf->dev);
1710 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1711 __func__, atomic_read(&intf->dev.power.usage_count),
1712 status);
1713 if (status > 0)
1714 status = 0;
1715 return status;
1716}
1717EXPORT_SYMBOL_GPL(usb_autopm_get_interface);
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736int usb_autopm_get_interface_async(struct usb_interface *intf)
1737{
1738 int status;
1739
1740 status = pm_runtime_get(&intf->dev);
1741 if (status < 0 && status != -EINPROGRESS)
1742 pm_runtime_put_noidle(&intf->dev);
1743 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1744 __func__, atomic_read(&intf->dev.power.usage_count),
1745 status);
1746 if (status > 0 || status == -EINPROGRESS)
1747 status = 0;
1748 return status;
1749}
1750EXPORT_SYMBOL_GPL(usb_autopm_get_interface_async);
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761void usb_autopm_get_interface_no_resume(struct usb_interface *intf)
1762{
1763 struct usb_device *udev = interface_to_usbdev(intf);
1764
1765 usb_mark_last_busy(udev);
1766 pm_runtime_get_noresume(&intf->dev);
1767}
1768EXPORT_SYMBOL_GPL(usb_autopm_get_interface_no_resume);
1769
1770
1771static int autosuspend_check(struct usb_device *udev)
1772{
1773 int w, i;
1774 struct usb_interface *intf;
1775
1776 if (udev->state == USB_STATE_NOTATTACHED)
1777 return -ENODEV;
1778
1779
1780
1781
1782 w = 0;
1783 if (udev->actconfig) {
1784 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
1785 intf = udev->actconfig->interface[i];
1786
1787
1788
1789
1790
1791
1792 if (intf->dev.power.disable_depth)
1793 continue;
1794 if (atomic_read(&intf->dev.power.usage_count) > 0)
1795 return -EBUSY;
1796 w |= intf->needs_remote_wakeup;
1797
1798
1799
1800
1801
1802 if (udev->quirks & USB_QUIRK_RESET_RESUME) {
1803 struct usb_driver *driver;
1804
1805 driver = to_usb_driver(intf->dev.driver);
1806 if (!driver->reset_resume ||
1807 intf->needs_remote_wakeup)
1808 return -EOPNOTSUPP;
1809 }
1810 }
1811 }
1812 if (w && !device_can_wakeup(&udev->dev)) {
1813 dev_dbg(&udev->dev, "remote wakeup needed for autosuspend\n");
1814 return -EOPNOTSUPP;
1815 }
1816
1817
1818
1819
1820
1821
1822 if (w && udev->parent == udev->bus->root_hub &&
1823 bus_to_hcd(udev->bus)->cant_recv_wakeups) {
1824 dev_dbg(&udev->dev, "HCD doesn't handle wakeup requests\n");
1825 return -EOPNOTSUPP;
1826 }
1827
1828 udev->do_remote_wakeup = w;
1829 return 0;
1830}
1831
1832int usb_runtime_suspend(struct device *dev)
1833{
1834 struct usb_device *udev = to_usb_device(dev);
1835 int status;
1836
1837
1838
1839
1840
1841 if (autosuspend_check(udev) != 0)
1842 return -EAGAIN;
1843
1844 status = usb_suspend_both(udev, PMSG_AUTO_SUSPEND);
1845
1846
1847 if (status == -EAGAIN || status == -EBUSY)
1848 usb_mark_last_busy(udev);
1849
1850
1851
1852
1853
1854
1855
1856 if (status != 0 && udev->parent)
1857 return -EBUSY;
1858 return status;
1859}
1860
1861int usb_runtime_resume(struct device *dev)
1862{
1863 struct usb_device *udev = to_usb_device(dev);
1864 int status;
1865
1866
1867
1868
1869 status = usb_resume_both(udev, PMSG_AUTO_RESUME);
1870 return status;
1871}
1872
1873int usb_runtime_idle(struct device *dev)
1874{
1875 struct usb_device *udev = to_usb_device(dev);
1876
1877
1878
1879
1880 if (autosuspend_check(udev) == 0)
1881 pm_runtime_autosuspend(dev);
1882
1883 return -EBUSY;
1884}
1885
1886static int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
1887{
1888 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1889 int ret = -EPERM;
1890
1891 if (hcd->driver->set_usb2_hw_lpm) {
1892 ret = hcd->driver->set_usb2_hw_lpm(hcd, udev, enable);
1893 if (!ret)
1894 udev->usb2_hw_lpm_enabled = enable;
1895 }
1896
1897 return ret;
1898}
1899
1900int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
1901{
1902 if (!udev->usb2_hw_lpm_capable ||
1903 !udev->usb2_hw_lpm_allowed ||
1904 udev->usb2_hw_lpm_enabled)
1905 return 0;
1906
1907 return usb_set_usb2_hardware_lpm(udev, 1);
1908}
1909
1910int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
1911{
1912 if (!udev->usb2_hw_lpm_enabled)
1913 return 0;
1914
1915 return usb_set_usb2_hardware_lpm(udev, 0);
1916}
1917
1918#endif
1919
1920struct bus_type usb_bus_type = {
1921 .name = "usb",
1922 .match = usb_device_match,
1923 .uevent = usb_uevent,
1924 .need_parent_lock = true,
1925};
1926