summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2014-07-21 09:48:48 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-07-22 08:11:54 +0200
commitad7f4c29b97122b9a0343d9c96bc0dbce99c5665 (patch)
tree7aa5ad9e528544f5efd5fea19323fa83325c368a
parentade522c6dd373c3d292de6a2ccd6ffb8d55371e9 (diff)
downloadbarebox-ad7f4c29b97122b9a0343d9c96bc0dbce99c5665.tar.gz
barebox-ad7f4c29b97122b9a0343d9c96bc0dbce99c5665.tar.xz
USB: gadget: DFU: drop app idle state
The app idle state hasn't been correctly implemented. It isn't useful for barebox anyway since in barebox there is no app running we have to stop first. We can just start in DFU mode. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--drivers/usb/gadget/dfu.c42
1 files changed, 2 insertions, 40 deletions
diff --git a/drivers/usb/gadget/dfu.c b/drivers/usb/gadget/dfu.c
index 3684edd63c..88a78ecaba 100644
--- a/drivers/usb/gadget/dfu.c
+++ b/drivers/usb/gadget/dfu.c
@@ -200,7 +200,7 @@ dfu_bind(struct usb_configuration *c, struct usb_function *f)
dfu_string_defs[i + 1].s = NULL;
dfu_string_table.strings = dfu_string_defs;
- dfu->dfu_state = DFU_STATE_appIDLE;
+ dfu->dfu_state = DFU_STATE_dfuIDLE;
dfu->dfu_status = DFU_STATUS_OK;
dfu->dnreq = usb_ep_alloc_request(c->cdev->gadget->ep0);
@@ -451,26 +451,6 @@ static int dfu_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
}
switch (dfu->dfu_state) {
- case DFU_STATE_appIDLE:
- switch (ctrl->bRequest) {
- case USB_REQ_DFU_DETACH:
- dfu->dfu_state = DFU_STATE_appDETACH;
- value = 0;
- goto out;
- break;
- default:
- value = -EINVAL;
- }
- break;
- case DFU_STATE_appDETACH:
- switch (ctrl->bRequest) {
- default:
- dfu->dfu_state = DFU_STATE_appIDLE;
- value = -EINVAL;
- goto out;
- break;
- }
- break;
case DFU_STATE_dfuIDLE:
switch (ctrl->bRequest) {
case USB_REQ_DFU_DNLOAD:
@@ -529,13 +509,6 @@ static int dfu_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
value = 0;
break;
case USB_REQ_DFU_DETACH:
- /* Proprietary extension: 'detach' from idle mode and
- * get back to runtime mode in case of USB Reset. As
- * much as I dislike this, we just can't use every USB
- * bus reset to switch back to runtime mode, since at
- * least the Linux USB stack likes to send a number of resets
- * in a row :( */
- dfu->dfu_state = DFU_STATE_dfuMANIFEST_WAIT_RST;
value = 0;
dfudetach = 1;
break;
@@ -597,7 +570,6 @@ static int dfu_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
case DFU_STATE_dfuDNBUSY:
case DFU_STATE_dfuMANIFEST_SYNC:
case DFU_STATE_dfuMANIFEST:
- case DFU_STATE_dfuMANIFEST_WAIT_RST:
dfu->dfu_state = DFU_STATE_dfuERROR;
value = -EINVAL;
goto out;
@@ -623,17 +595,7 @@ static void dfu_disable(struct usb_function *f)
{
struct f_dfu *dfu = func_to_dfu(f);
- switch (dfu->dfu_state) {
- case DFU_STATE_appDETACH:
- dfu->dfu_state = DFU_STATE_dfuIDLE;
- break;
- case DFU_STATE_dfuMANIFEST_WAIT_RST:
- dfu->dfu_state = DFU_STATE_appIDLE;
- break;
- default:
- dfu->dfu_state = DFU_STATE_appDETACH;
- break;
- }
+ dfu->dfu_state = DFU_STATE_dfuIDLE;
dfu_cleanup(dfu);
}