Commit ee069fb1 authored by Robert Jarzmik's avatar Robert Jarzmik Committed by Greg Kroah-Hartman

USB: pxa27x_udc: add vbus_draw callback

Add the vbus_draw() callback to inform the transceiver, if
it exists, how much current may be drawn. The decision is
taken on gadget driver side using the configuration chosen
by the host and its bMaxPower field.  Some systems can use
the host's VBUS supply to augment or recharge a battery.
(There's also a default of 100 mA for unconfigured devices,
or 8 mA if they're OTG devices.)
Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 7fec3c25
...@@ -1623,12 +1623,34 @@ static int pxa_udc_vbus_session(struct usb_gadget *_gadget, int is_active) ...@@ -1623,12 +1623,34 @@ static int pxa_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
return 0; return 0;
} }
/**
* pxa_udc_vbus_draw - Called by gadget driver after SET_CONFIGURATION completed
* @_gadget: usb gadget
* @mA: current drawn
*
* Context: !in_interrupt()
*
* Called after a configuration was chosen by a USB host, to inform how much
* current can be drawn by the device from VBus line.
*
* Returns 0 or -EOPNOTSUPP if no transceiver is handling the udc
*/
static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
{
struct pxa_udc *udc;
udc = to_gadget_udc(_gadget);
if (udc->transceiver)
return otg_set_power(udc->transceiver, mA);
return -EOPNOTSUPP;
}
static const struct usb_gadget_ops pxa_udc_ops = { static const struct usb_gadget_ops pxa_udc_ops = {
.get_frame = pxa_udc_get_frame, .get_frame = pxa_udc_get_frame,
.wakeup = pxa_udc_wakeup, .wakeup = pxa_udc_wakeup,
.pullup = pxa_udc_pullup, .pullup = pxa_udc_pullup,
.vbus_session = pxa_udc_vbus_session, .vbus_session = pxa_udc_vbus_session,
/* current versions must always be self-powered */ .vbus_draw = pxa_udc_vbus_draw,
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment