aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-09-24 15:09:29 +0530
committerNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-10-04 12:01:20 +0530
commit50302c3eb9933d1ba122be58cdf65001dd3bf028 (patch)
treed9ec2a640e128ac2539128eea9503cd4257557f5
parent7f5d67ca5f9a50d1c2169e5b2417e60b1b7d3967 (diff)
downloadSLOF-50302c3eb9933d1ba122be58cdf65001dd3bf028.zip
SLOF-50302c3eb9933d1ba122be58cdf65001dd3bf028.tar.gz
SLOF-50302c3eb9933d1ba122be58cdf65001dd3bf028.tar.bz2
usb-core: Add CLEAR FEATURE api
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
-rw-r--r--lib/libusb/usb-core.c19
-rw-r--r--lib/libusb/usb-core.h3
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/libusb/usb-core.c b/lib/libusb/usb-core.c
index 308ddaa..6fad631 100644
--- a/lib/libusb/usb-core.c
+++ b/lib/libusb/usb-core.c
@@ -308,6 +308,25 @@ static int usb_set_config(struct usb_dev *dev, uint8_t cfg_value)
return usb_send_ctrl(dev->control, &req, NULL);
}
+static int usb_clear_halt(struct usb_pipe *pipe)
+{
+ struct usb_dev_req req;
+ struct usb_dev *dev;
+
+ if (pipe && pipe->dev) {
+ dev = pipe->dev;
+ dprintf("Clearing port %d dir %d type %d\n",
+ pipe->epno, pipe->dir, pipe->type);
+ req.bmRequestType = REQT_DIR_OUT | REQT_REC_EP;
+ req.bRequest = REQ_CLEAR_FEATURE;
+ req.wValue = FEATURE_ENDPOINT_HALT;
+ req.wIndex = cpu_to_le16(pipe->epno | pipe->dir);
+ req.wLength = 0;
+ return usb_send_ctrl(dev->control, &req, NULL);
+ }
+ return false;
+}
+
int usb_dev_populate_pipe(struct usb_dev *dev, struct usb_ep_descr *ep,
void *buf, size_t len)
{
diff --git a/lib/libusb/usb-core.h b/lib/libusb/usb-core.h
index 5914a64..75aa0f9 100644
--- a/lib/libusb/usb-core.h
+++ b/lib/libusb/usb-core.h
@@ -136,6 +136,9 @@ struct usb_pipe {
#define REQ_SET_INTERFACE 11
#define REQ_SYNCH_FRAME 12
+#define FEATURE_DEVICE_REMOTE_WAKEUP 1
+#define FEATURE_ENDPOINT_HALT 0
+
#define REQT_REC_DEVICE 0
#define REQT_REC_INTERFACE 1
#define REQT_REC_EP 2