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