Lines Matching +full:usb +full:- +full:c

1 // SPDX-License-Identifier: GPL-2.0
3 * drivers/usb/core/generic.c - generic driver for USB devices (not interfaces)
5 * (C) Copyright 2005 Greg Kroah-Hartman <[email protected]>
7 * based on drivers/usb/usb.c which had the following copyrights:
8 * (C) Copyright Linus Torvalds 1999
9 * (C) Copyright Johannes Erdfelt 1999-2001
10 * (C) Copyright Andreas Gal 1999
11 * (C) Copyright Gregory P. Smith 1999
12 * (C) Copyright Deti Fliegl 1999 (new USB architecture)
13 * (C) Copyright Randy Dunlap 2000
14 * (C) Copyright David Brownell 2000-2004
15 * (C) Copyright Yggdrasil Computing, Inc. 2000
17 * (C) Copyright Greg Kroah-Hartman 2002-2003
22 #include <linux/usb.h>
23 #include <linux/usb/hcd.h>
25 #include <uapi/linux/usb/audio.h>
26 #include "usb.h"
30 return desc->bInterfaceClass == USB_CLASS_COMM in is_rndis()
31 && desc->bInterfaceSubClass == 2 in is_rndis()
32 && desc->bInterfaceProtocol == 0xff; in is_rndis()
37 return desc->bInterfaceClass == USB_CLASS_MISC in is_activesync()
38 && desc->bInterfaceSubClass == 1 in is_activesync()
39 && desc->bInterfaceProtocol == 1; in is_activesync()
44 return desc->bInterfaceClass == USB_CLASS_AUDIO; in is_audio()
49 return desc->bInterfaceProtocol == UAC_VERSION_3; in is_uac3_config()
57 struct usb_host_config *c, *best; in usb_choose_configuration() local
61 * If a USB device (not an interface) doesn't have a driver then the in usb_choose_configuration()
65 if (!udev->dev.driver) in usb_choose_configuration()
66 return -1; in usb_choose_configuration()
67 udriver = to_usb_device_driver(udev->dev.driver); in usb_choose_configuration()
72 if (udriver->choose_configuration) { in usb_choose_configuration()
73 i = udriver->choose_configuration(udev); in usb_choose_configuration()
79 c = udev->config; in usb_choose_configuration()
80 num_configs = udev->descriptor.bNumConfigurations; in usb_choose_configuration()
81 for (i = 0; i < num_configs; (i++, c++)) { in usb_choose_configuration()
85 if (c->desc.bNumInterfaces > 0) in usb_choose_configuration()
86 desc = &c->intf_cache[0]->altsetting->desc; in usb_choose_configuration()
89 * HP's USB bus-powered keyboard has only one configuration in usb_choose_configuration()
90 * and it claims to be self-powered; other devices may have in usb_choose_configuration()
100 * have any other way to tell whether a device is self-powered, in usb_choose_configuration()
109 /* Rule out self-powered configs for a bus-powered device */ in usb_choose_configuration()
110 if (bus_powered && (c->desc.bmAttributes & in usb_choose_configuration()
118 * to be self-powered when they are really bus-powered. in usb_choose_configuration()
128 if (usb_get_max_power(udev, c) > udev->bus_mA) { in usb_choose_configuration()
142 best = c; in usb_choose_configuration()
148 best = c; in usb_choose_configuration()
159 * pet nonstandard Ethernet-over-USB protocols, ignore it unless in usb_choose_configuration()
168 best = c; in usb_choose_configuration()
173 * first interface is for a non-vendor-specific class. in usb_choose_configuration()
175 * than a vendor-specific driver. */ in usb_choose_configuration()
176 else if (udev->descriptor.bDeviceClass != in usb_choose_configuration()
178 (desc && desc->bInterfaceClass != in usb_choose_configuration()
180 best = c; in usb_choose_configuration()
184 /* If all the remaining configs are vendor-specific, in usb_choose_configuration()
187 best = c; in usb_choose_configuration()
191 dev_info(&udev->dev, "rejected %d configuration%s " in usb_choose_configuration()
196 i = best->desc.bConfigurationValue; in usb_choose_configuration()
197 dev_dbg(&udev->dev, in usb_choose_configuration()
201 i = -1; in usb_choose_configuration()
202 dev_warn(&udev->dev, in usb_choose_configuration()
225 if (udev->use_generic_driver) in usb_generic_driver_match()
240 int err, c; in usb_generic_driver_probe() local
245 if (udev->authorized == 0) in usb_generic_driver_probe()
246 dev_err(&udev->dev, "Device is not authorized for usage\n"); in usb_generic_driver_probe()
248 c = usb_choose_configuration(udev); in usb_generic_driver_probe()
249 if (c >= 0) { in usb_generic_driver_probe()
250 err = usb_set_configuration(udev, c); in usb_generic_driver_probe()
251 if (err && err != -ENODEV) { in usb_generic_driver_probe()
252 dev_err(&udev->dev, "can't set config #%d, error %d\n", in usb_generic_driver_probe()
253 c, err); in usb_generic_driver_probe()
259 /* USB device state == configured ... usable */ in usb_generic_driver_probe()
271 if (udev->actconfig) in usb_generic_driver_disconnect()
272 usb_set_configuration(udev, -1); in usb_generic_driver_disconnect()
281 /* Normal USB devices suspend through their upstream port. in usb_generic_driver_suspend()
283 * so we have to shut down their downstream HC-to-USB in usb_generic_driver_suspend()
286 if (!udev->parent) in usb_generic_driver_suspend()
290 * Non-root USB2 devices don't need to do anything for FREEZE in usb_generic_driver_suspend()
295 && (udev->speed < USB_SPEED_SUPER)) in usb_generic_driver_suspend()
309 /* Normal USB devices resume/reset through their upstream port. in usb_generic_driver_resume()
311 * so we have to start up their downstream HC-to-USB in usb_generic_driver_resume()
314 if (!udev->parent) in usb_generic_driver_resume()
327 .name = "usb",