diff options
Diffstat (limited to 'include/linux/usb.h')
-rw-r--r-- | include/linux/usb.h | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h index d81b050e5955..827cc6de5f5c 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -225,7 +225,7 @@ struct usb_interface_cache { | |||
225 | * Device drivers should not attempt to activate configurations. The choice | 225 | * Device drivers should not attempt to activate configurations. The choice |
226 | * of which configuration to install is a policy decision based on such | 226 | * of which configuration to install is a policy decision based on such |
227 | * considerations as available power, functionality provided, and the user's | 227 | * considerations as available power, functionality provided, and the user's |
228 | * desires (expressed through hotplug scripts). However, drivers can call | 228 | * desires (expressed through userspace tools). However, drivers can call |
229 | * usb_reset_configuration() to reinitialize the current configuration and | 229 | * usb_reset_configuration() to reinitialize the current configuration and |
230 | * all its interfaces. | 230 | * all its interfaces. |
231 | */ | 231 | */ |
@@ -329,8 +329,6 @@ struct usb_device { | |||
329 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ | 329 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ |
330 | int ttport; /* device port on that tt hub */ | 330 | int ttport; /* device port on that tt hub */ |
331 | 331 | ||
332 | struct semaphore serialize; | ||
333 | |||
334 | unsigned int toggle[2]; /* one bit for each endpoint | 332 | unsigned int toggle[2]; /* one bit for each endpoint |
335 | * ([0] = IN, [1] = OUT) */ | 333 | * ([0] = IN, [1] = OUT) */ |
336 | 334 | ||
@@ -349,6 +347,9 @@ struct usb_device { | |||
349 | 347 | ||
350 | char **rawdescriptors; /* Raw descriptors for each config */ | 348 | char **rawdescriptors; /* Raw descriptors for each config */ |
351 | 349 | ||
350 | unsigned short bus_mA; /* Current available from the bus */ | ||
351 | u8 portnum; /* Parent port number (origin 1) */ | ||
352 | |||
352 | int have_langid; /* whether string_langid is valid */ | 353 | int have_langid; /* whether string_langid is valid */ |
353 | int string_langid; /* language ID for strings */ | 354 | int string_langid; /* language ID for strings */ |
354 | 355 | ||
@@ -377,11 +378,12 @@ struct usb_device { | |||
377 | extern struct usb_device *usb_get_dev(struct usb_device *dev); | 378 | extern struct usb_device *usb_get_dev(struct usb_device *dev); |
378 | extern void usb_put_dev(struct usb_device *dev); | 379 | extern void usb_put_dev(struct usb_device *dev); |
379 | 380 | ||
380 | extern void usb_lock_device(struct usb_device *udev); | 381 | /* USB device locking */ |
381 | extern int usb_trylock_device(struct usb_device *udev); | 382 | #define usb_lock_device(udev) down(&(udev)->dev.sem) |
383 | #define usb_unlock_device(udev) up(&(udev)->dev.sem) | ||
384 | #define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) | ||
382 | extern int usb_lock_device_for_reset(struct usb_device *udev, | 385 | extern int usb_lock_device_for_reset(struct usb_device *udev, |
383 | struct usb_interface *iface); | 386 | struct usb_interface *iface); |
384 | extern void usb_unlock_device(struct usb_device *udev); | ||
385 | 387 | ||
386 | /* USB port reset for device reinitialization */ | 388 | /* USB port reset for device reinitialization */ |
387 | extern int usb_reset_device(struct usb_device *dev); | 389 | extern int usb_reset_device(struct usb_device *dev); |
@@ -529,10 +531,13 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
529 | 531 | ||
530 | /* ----------------------------------------------------------------------- */ | 532 | /* ----------------------------------------------------------------------- */ |
531 | 533 | ||
534 | struct usb_dynids { | ||
535 | spinlock_t lock; | ||
536 | struct list_head list; | ||
537 | }; | ||
538 | |||
532 | /** | 539 | /** |
533 | * struct usb_driver - identifies USB driver to usbcore | 540 | * struct usb_driver - identifies USB driver to usbcore |
534 | * @owner: Pointer to the module owner of this driver; initialize | ||
535 | * it using THIS_MODULE. | ||
536 | * @name: The driver name should be unique among USB drivers, | 541 | * @name: The driver name should be unique among USB drivers, |
537 | * and should normally be the same as the module name. | 542 | * and should normally be the same as the module name. |
538 | * @probe: Called to see if the driver is willing to manage a particular | 543 | * @probe: Called to see if the driver is willing to manage a particular |
@@ -553,7 +558,11 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
553 | * @id_table: USB drivers use ID table to support hotplugging. | 558 | * @id_table: USB drivers use ID table to support hotplugging. |
554 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set | 559 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set |
555 | * or your driver's probe function will never get called. | 560 | * or your driver's probe function will never get called. |
561 | * @dynids: used internally to hold the list of dynamically added device | ||
562 | * ids for this driver. | ||
556 | * @driver: the driver model core driver structure. | 563 | * @driver: the driver model core driver structure. |
564 | * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be | ||
565 | * added to this driver by preventing the sysfs file from being created. | ||
557 | * | 566 | * |
558 | * USB drivers must provide a name, probe() and disconnect() methods, | 567 | * USB drivers must provide a name, probe() and disconnect() methods, |
559 | * and an id_table. Other driver fields are optional. | 568 | * and an id_table. Other driver fields are optional. |
@@ -571,8 +580,6 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
571 | * them as necessary, and blocking until the unlinks complete). | 580 | * them as necessary, and blocking until the unlinks complete). |
572 | */ | 581 | */ |
573 | struct usb_driver { | 582 | struct usb_driver { |
574 | struct module *owner; | ||
575 | |||
576 | const char *name; | 583 | const char *name; |
577 | 584 | ||
578 | int (*probe) (struct usb_interface *intf, | 585 | int (*probe) (struct usb_interface *intf, |
@@ -588,7 +595,9 @@ struct usb_driver { | |||
588 | 595 | ||
589 | const struct usb_device_id *id_table; | 596 | const struct usb_device_id *id_table; |
590 | 597 | ||
598 | struct usb_dynids dynids; | ||
591 | struct device_driver driver; | 599 | struct device_driver driver; |
600 | unsigned int no_dynamic_id:1; | ||
592 | }; | 601 | }; |
593 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) | 602 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) |
594 | 603 | ||
@@ -614,7 +623,11 @@ struct usb_class_driver { | |||
614 | * use these in module_init()/module_exit() | 623 | * use these in module_init()/module_exit() |
615 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) | 624 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) |
616 | */ | 625 | */ |
617 | extern int usb_register(struct usb_driver *); | 626 | int usb_register_driver(struct usb_driver *, struct module *); |
627 | static inline int usb_register(struct usb_driver *driver) | ||
628 | { | ||
629 | return usb_register_driver(driver, THIS_MODULE); | ||
630 | } | ||
618 | extern void usb_deregister(struct usb_driver *); | 631 | extern void usb_deregister(struct usb_driver *); |
619 | 632 | ||
620 | extern int usb_register_dev(struct usb_interface *intf, | 633 | extern int usb_register_dev(struct usb_interface *intf, |