usb: mv_udc: Clean up the EP initialization
Move the constant values that are programmed into mv_ep.ep into separate static const structure so they can be memcpy()'d when the initialization happens. Moveover, we only every init NUM_ENDPOINTS, not 2 * NUM_ENDPOINTS, so fix this bug as well. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Fabio Estevam <fabio.estevam@freescale.com> Cc: Lei Wen <leiwen@marvell.com> Cc: Otavio Salvador <otavio@ossystems.com.br> Cc: Stefano Babic <sbabic@denx.de>
This commit is contained in:
@@ -83,6 +83,20 @@ static struct usb_ep_ops mv_ep_ops = {
|
|||||||
.free_request = mv_ep_free_request,
|
.free_request = mv_ep_free_request,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Init values for USB endpoints. */
|
||||||
|
static const struct usb_ep mv_ep_init[2] = {
|
||||||
|
[0] = { /* EP 0 */
|
||||||
|
.maxpacket = 64,
|
||||||
|
.name = "ep0",
|
||||||
|
.ops = &mv_ep_ops,
|
||||||
|
},
|
||||||
|
[1] = { /* EP 1..n */
|
||||||
|
.maxpacket = 512,
|
||||||
|
.name = "ep-",
|
||||||
|
.ops = &mv_ep_ops,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static struct mv_drv controller = {
|
static struct mv_drv controller = {
|
||||||
.gadget = {
|
.gadget = {
|
||||||
.name = "mv_udc",
|
.name = "mv_udc",
|
||||||
@@ -435,21 +449,21 @@ static int mvudc_probe(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
INIT_LIST_HEAD(&controller.gadget.ep_list);
|
INIT_LIST_HEAD(&controller.gadget.ep_list);
|
||||||
controller.gadget.ep0 = &controller.ep[0].ep;
|
|
||||||
controller.ep[0].ep.maxpacket = 64;
|
/* Init EP 0 */
|
||||||
controller.ep[0].ep.name = "ep0";
|
memcpy(&controller.ep[0].ep, &mv_ep_init[0], sizeof(*mv_ep_init));
|
||||||
controller.ep[0].desc = &ep0_in_desc;
|
controller.ep[0].desc = &ep0_in_desc;
|
||||||
|
controller.gadget.ep0 = &controller.ep[0].ep;
|
||||||
INIT_LIST_HEAD(&controller.gadget.ep0->ep_list);
|
INIT_LIST_HEAD(&controller.gadget.ep0->ep_list);
|
||||||
for (i = 0; i < 2 * NUM_ENDPOINTS; i++) {
|
|
||||||
if (i != 0) {
|
/* Init EP 1..n */
|
||||||
controller.ep[i].ep.maxpacket = 512;
|
for (i = 1; i < NUM_ENDPOINTS; i++) {
|
||||||
controller.ep[i].ep.name = "ep-";
|
memcpy(&controller.ep[i].ep, &mv_ep_init[1],
|
||||||
list_add_tail(&controller.ep[i].ep.ep_list,
|
sizeof(*mv_ep_init));
|
||||||
&controller.gadget.ep_list);
|
list_add_tail(&controller.ep[i].ep.ep_list,
|
||||||
controller.ep[i].desc = NULL;
|
&controller.gadget.ep_list);
|
||||||
}
|
|
||||||
controller.ep[i].ep.ops = &mv_ep_ops;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ struct mv_drv {
|
|||||||
struct usb_gadget gadget;
|
struct usb_gadget gadget;
|
||||||
struct usb_gadget_driver *driver;
|
struct usb_gadget_driver *driver;
|
||||||
struct mv_udc *udc;
|
struct mv_udc *udc;
|
||||||
struct mv_ep ep[2 * NUM_ENDPOINTS];
|
struct mv_ep ep[NUM_ENDPOINTS];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ept_queue_head {
|
struct ept_queue_head {
|
||||||
|
|||||||
Reference in New Issue
Block a user