mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
usb gadget: USB_GADGET_VBUS_DRAW Kconfig option
Offer a "how much VBUS power to request" configuration option for USB gadgets that aren't using board-specific customization of their gadget or (composite) configuration drivers. Also remove a couple pointless "depends on USB_GADGET" bits from the Kconfig text; booleans inside an "if USB_GADGET" will already have that dependency. Based on a patch from Justin Clacherty. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Justin Clacherty <justin@redfish-group.com> Tested-by: Robert Jarzmik <robert.jarzmik@free.fr> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
02582b92f6
commit
36e893d25a
@ -45,7 +45,7 @@ if USB_GADGET
|
|||||||
|
|
||||||
config USB_GADGET_DEBUG
|
config USB_GADGET_DEBUG
|
||||||
boolean "Debugging messages (DEVELOPMENT)"
|
boolean "Debugging messages (DEVELOPMENT)"
|
||||||
depends on USB_GADGET && DEBUG_KERNEL
|
depends on DEBUG_KERNEL
|
||||||
help
|
help
|
||||||
Many controller and gadget drivers will print some debugging
|
Many controller and gadget drivers will print some debugging
|
||||||
messages if you use this option to ask for those messages.
|
messages if you use this option to ask for those messages.
|
||||||
@ -59,7 +59,7 @@ config USB_GADGET_DEBUG
|
|||||||
|
|
||||||
config USB_GADGET_DEBUG_FILES
|
config USB_GADGET_DEBUG_FILES
|
||||||
boolean "Debugging information files (DEVELOPMENT)"
|
boolean "Debugging information files (DEVELOPMENT)"
|
||||||
depends on USB_GADGET && PROC_FS
|
depends on PROC_FS
|
||||||
help
|
help
|
||||||
Some of the drivers in the "gadget" framework can expose
|
Some of the drivers in the "gadget" framework can expose
|
||||||
debugging information in files such as /proc/driver/udc
|
debugging information in files such as /proc/driver/udc
|
||||||
@ -70,7 +70,7 @@ config USB_GADGET_DEBUG_FILES
|
|||||||
|
|
||||||
config USB_GADGET_DEBUG_FS
|
config USB_GADGET_DEBUG_FS
|
||||||
boolean "Debugging information files in debugfs (DEVELOPMENT)"
|
boolean "Debugging information files in debugfs (DEVELOPMENT)"
|
||||||
depends on USB_GADGET && DEBUG_FS
|
depends on DEBUG_FS
|
||||||
help
|
help
|
||||||
Some of the drivers in the "gadget" framework can expose
|
Some of the drivers in the "gadget" framework can expose
|
||||||
debugging information in files under /sys/kernel/debug/.
|
debugging information in files under /sys/kernel/debug/.
|
||||||
@ -79,6 +79,23 @@ config USB_GADGET_DEBUG_FS
|
|||||||
Enable these files by choosing "Y" here. If in doubt, or
|
Enable these files by choosing "Y" here. If in doubt, or
|
||||||
to conserve kernel memory, say "N".
|
to conserve kernel memory, say "N".
|
||||||
|
|
||||||
|
config USB_GADGET_VBUS_DRAW
|
||||||
|
int "Maximum VBUS Power usage (2-500 mA)"
|
||||||
|
range 2 500
|
||||||
|
default 2
|
||||||
|
help
|
||||||
|
Some devices need to draw power from USB when they are
|
||||||
|
configured, perhaps to operate circuitry or to recharge
|
||||||
|
batteries. This is in addition to any local power supply,
|
||||||
|
such as an AC adapter or batteries.
|
||||||
|
|
||||||
|
Enter the maximum power your device draws through USB, in
|
||||||
|
milliAmperes. The permitted range of values is 2 - 500 mA;
|
||||||
|
0 mA would be legal, but can make some hosts misbehave.
|
||||||
|
|
||||||
|
This value will be used except for system-specific gadget
|
||||||
|
drivers that have more specific information.
|
||||||
|
|
||||||
config USB_GADGET_SELECTED
|
config USB_GADGET_SELECTED
|
||||||
boolean
|
boolean
|
||||||
|
|
||||||
|
@ -155,7 +155,6 @@ static struct usb_configuration cdc_config_driver = {
|
|||||||
.bConfigurationValue = 1,
|
.bConfigurationValue = 1,
|
||||||
/* .iConfiguration = DYNAMIC */
|
/* .iConfiguration = DYNAMIC */
|
||||||
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, /* 2 mA, minimal */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
@ -245,7 +245,7 @@ static int config_buf(struct usb_configuration *config,
|
|||||||
c->bConfigurationValue = config->bConfigurationValue;
|
c->bConfigurationValue = config->bConfigurationValue;
|
||||||
c->iConfiguration = config->iConfiguration;
|
c->iConfiguration = config->iConfiguration;
|
||||||
c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
|
c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
|
||||||
c->bMaxPower = config->bMaxPower;
|
c->bMaxPower = config->bMaxPower ? : (CONFIG_USB_GADGET_VBUS_DRAW / 2);
|
||||||
|
|
||||||
/* There may be e.g. OTG descriptors */
|
/* There may be e.g. OTG descriptors */
|
||||||
if (config->descriptors) {
|
if (config->descriptors) {
|
||||||
@ -432,7 +432,7 @@ static int set_config(struct usb_composite_dev *cdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* when we return, be sure our power usage is valid */
|
/* when we return, be sure our power usage is valid */
|
||||||
power = 2 * c->bMaxPower;
|
power = c->bMaxPower ? (2 * c->bMaxPower) : CONFIG_USB_GADGET_VBUS_DRAW;
|
||||||
done:
|
done:
|
||||||
usb_gadget_vbus_draw(gadget, power);
|
usb_gadget_vbus_draw(gadget, power);
|
||||||
return result;
|
return result;
|
||||||
|
@ -242,7 +242,6 @@ static struct usb_configuration rndis_config_driver = {
|
|||||||
.bConfigurationValue = 2,
|
.bConfigurationValue = 2,
|
||||||
/* .iConfiguration = DYNAMIC */
|
/* .iConfiguration = DYNAMIC */
|
||||||
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, /* 2 mA, minimal */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
@ -271,7 +270,6 @@ static struct usb_configuration eth_config_driver = {
|
|||||||
.bConfigurationValue = 1,
|
.bConfigurationValue = 1,
|
||||||
/* .iConfiguration = DYNAMIC */
|
/* .iConfiguration = DYNAMIC */
|
||||||
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, /* 2 mA, minimal */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
@ -352,7 +352,6 @@ static struct usb_configuration loopback_driver = {
|
|||||||
.bind = loopback_bind_config,
|
.bind = loopback_bind_config,
|
||||||
.bConfigurationValue = 2,
|
.bConfigurationValue = 2,
|
||||||
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, /* 2 mA, minimal */
|
|
||||||
/* .iConfiguration = DYNAMIC */
|
/* .iConfiguration = DYNAMIC */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -552,7 +552,6 @@ static struct usb_configuration sourcesink_driver = {
|
|||||||
.setup = sourcesink_setup,
|
.setup = sourcesink_setup,
|
||||||
.bConfigurationValue = 3,
|
.bConfigurationValue = 3,
|
||||||
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, /* 2 mA, minimal */
|
|
||||||
/* .iConfiguration = DYNAMIC */
|
/* .iConfiguration = DYNAMIC */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -851,7 +851,7 @@ config_desc = {
|
|||||||
.bConfigurationValue = CONFIG_VALUE,
|
.bConfigurationValue = CONFIG_VALUE,
|
||||||
.iConfiguration = STRING_CONFIG,
|
.iConfiguration = STRING_CONFIG,
|
||||||
.bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, // self-powered
|
.bMaxPower = CONFIG_USB_GADGET_VBUS_DRAW / 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct usb_otg_descriptor
|
static struct usb_otg_descriptor
|
||||||
|
@ -222,7 +222,7 @@ static struct usb_config_descriptor config_desc = {
|
|||||||
* power properties of the device. Is it selfpowered?
|
* power properties of the device. Is it selfpowered?
|
||||||
*/
|
*/
|
||||||
.bmAttributes = USB_CONFIG_ATT_ONE,
|
.bmAttributes = USB_CONFIG_ATT_ONE,
|
||||||
.bMaxPower = 1,
|
.bMaxPower = CONFIG_USB_GADGET_VBUS_DRAW / 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* B.3.1 Standard AC Interface Descriptor */
|
/* B.3.1 Standard AC Interface Descriptor */
|
||||||
|
@ -252,7 +252,7 @@ static struct usb_config_descriptor config_desc = {
|
|||||||
.bConfigurationValue = DEV_CONFIG_VALUE,
|
.bConfigurationValue = DEV_CONFIG_VALUE,
|
||||||
.iConfiguration = 0,
|
.iConfiguration = 0,
|
||||||
.bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1 /* Self-Powered */
|
.bMaxPower = CONFIG_USB_GADGET_VBUS_DRAW / 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct usb_interface_descriptor intf_desc = {
|
static struct usb_interface_descriptor intf_desc = {
|
||||||
@ -1476,7 +1476,6 @@ autoconf_fail:
|
|||||||
if (gadget->is_otg) {
|
if (gadget->is_otg) {
|
||||||
otg_desc.bmAttributes |= USB_OTG_HNP,
|
otg_desc.bmAttributes |= USB_OTG_HNP,
|
||||||
config_desc.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
|
config_desc.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
|
||||||
config_desc.bMaxPower = 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_init(&dev->lock);
|
spin_lock_init(&dev->lock);
|
||||||
|
@ -159,7 +159,6 @@ static struct usb_configuration serial_config_driver = {
|
|||||||
/* .bConfigurationValue = f(use_acm) */
|
/* .bConfigurationValue = f(use_acm) */
|
||||||
/* .iConfiguration = DYNAMIC */
|
/* .iConfiguration = DYNAMIC */
|
||||||
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_SELFPOWER,
|
||||||
.bMaxPower = 1, /* 2 mA, minimal */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init gs_bind(struct usb_composite_dev *cdev)
|
static int __init gs_bind(struct usb_composite_dev *cdev)
|
||||||
|
Loading…
Reference in New Issue
Block a user