|
@@ -146,6 +146,32 @@ int usbhs_frame_get_num(struct usbhs_priv *priv)
|
|
|
return usbhs_read(priv, FRMNUM) & FRNM_MASK;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * usb request functions
|
|
|
+ */
|
|
|
+void usbhs_usbreq_get_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req)
|
|
|
+{
|
|
|
+ u16 val;
|
|
|
+
|
|
|
+ val = usbhs_read(priv, USBREQ);
|
|
|
+ req->bRequest = (val >> 8) & 0xFF;
|
|
|
+ req->bRequestType = (val >> 0) & 0xFF;
|
|
|
+
|
|
|
+ req->wValue = usbhs_read(priv, USBVAL);
|
|
|
+ req->wIndex = usbhs_read(priv, USBINDX);
|
|
|
+ req->wLength = usbhs_read(priv, USBLENG);
|
|
|
+}
|
|
|
+
|
|
|
+void usbhs_usbreq_set_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req)
|
|
|
+{
|
|
|
+ usbhs_write(priv, USBREQ, (req->bRequest << 8) | req->bRequestType);
|
|
|
+ usbhs_write(priv, USBVAL, req->wValue);
|
|
|
+ usbhs_write(priv, USBINDX, req->wIndex);
|
|
|
+ usbhs_write(priv, USBLENG, req->wLength);
|
|
|
+
|
|
|
+ usbhs_bset(priv, DCPCTR, SUREQ, SUREQ);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* bus/vbus functions
|
|
|
*/
|