aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/langwell_udc.c
diff options
context:
space:
mode:
authorJiebingLi <jiebing.li@intel.com>2010-08-05 09:18:05 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-22 13:21:18 -0400
commit3eed298ffa94d77901cfda269c4368de83d133fb (patch)
tree5ce6a3f29765102563d3222d28e0966813b7af8f /drivers/usb/gadget/langwell_udc.c
parent5f81f4b0c0a3db9e46a0e8041d7721117ac41956 (diff)
USB: langwell: USB Client Endpoint initialization
Endpoint software structure initialization Signed-off-by: JiebingLi <jiebing.li@intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/gadget/langwell_udc.c')
-rw-r--r--drivers/usb/gadget/langwell_udc.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c
index 8b332dd21dcd..599ad8a1f5fe 100644
--- a/drivers/usb/gadget/langwell_udc.c
+++ b/drivers/usb/gadget/langwell_udc.c
@@ -242,11 +242,13 @@ static void ep0_reset(struct langwell_udc *dev)
242 ep->dqh->dqh_ios = 1; 242 ep->dqh->dqh_ios = 1;
243 ep->dqh->dqh_mpl = EP0_MAX_PKT_SIZE; 243 ep->dqh->dqh_mpl = EP0_MAX_PKT_SIZE;
244 244
245 /* FIXME: enable ep0-in HW zero length termination select */ 245 /* enable ep0-in HW zero length termination select */
246 if (is_in(ep)) 246 if (is_in(ep))
247 ep->dqh->dqh_zlt = 0; 247 ep->dqh->dqh_zlt = 0;
248 ep->dqh->dqh_mult = 0; 248 ep->dqh->dqh_mult = 0;
249 249
250 ep->dqh->dtd_next = DTD_TERM;
251
250 /* configure ep0 control registers */ 252 /* configure ep0 control registers */
251 ep_reset(&dev->ep[0], 0, i, USB_ENDPOINT_XFER_CONTROL); 253 ep_reset(&dev->ep[0], 0, i, USB_ENDPOINT_XFER_CONTROL);
252 } 254 }
@@ -268,7 +270,7 @@ static int langwell_ep_enable(struct usb_ep *_ep,
268 struct langwell_ep *ep; 270 struct langwell_ep *ep;
269 u16 max = 0; 271 u16 max = 0;
270 unsigned long flags; 272 unsigned long flags;
271 int retval = 0; 273 int i, retval = 0;
272 unsigned char zlt, ios = 0, mult = 0; 274 unsigned char zlt, ios = 0, mult = 0;
273 275
274 ep = container_of(_ep, struct langwell_ep, ep); 276 ep = container_of(_ep, struct langwell_ep, ep);
@@ -354,12 +356,6 @@ static int langwell_ep_enable(struct usb_ep *_ep,
354 356
355 spin_lock_irqsave(&dev->lock, flags); 357 spin_lock_irqsave(&dev->lock, flags);
356 358
357 /* configure endpoint capabilities in dQH */
358 ep->dqh->dqh_ios = ios;
359 ep->dqh->dqh_mpl = cpu_to_le16(max);
360 ep->dqh->dqh_zlt = zlt;
361 ep->dqh->dqh_mult = mult;
362
363 ep->ep.maxpacket = max; 359 ep->ep.maxpacket = max;
364 ep->desc = desc; 360 ep->desc = desc;
365 ep->stopped = 0; 361 ep->stopped = 0;
@@ -371,6 +367,15 @@ static int langwell_ep_enable(struct usb_ep *_ep,
371 /* configure endpoint control registers */ 367 /* configure endpoint control registers */
372 ep_reset(ep, ep->ep_num, is_in(ep), ep->ep_type); 368 ep_reset(ep, ep->ep_num, is_in(ep), ep->ep_type);
373 369
370 /* configure endpoint capabilities in dQH */
371 i = ep->ep_num * 2 + is_in(ep);
372 ep->dqh = &dev->ep_dqh[i];
373 ep->dqh->dqh_ios = ios;
374 ep->dqh->dqh_mpl = cpu_to_le16(max);
375 ep->dqh->dqh_zlt = zlt;
376 ep->dqh->dqh_mult = mult;
377 ep->dqh->dtd_next = DTD_TERM;
378
374 dev_dbg(&dev->pdev->dev, "enabled %s (ep%d%s-%s), max %04x\n", 379 dev_dbg(&dev->pdev->dev, "enabled %s (ep%d%s-%s), max %04x\n",
375 _ep->name, 380 _ep->name,
376 ep->ep_num, 381 ep->ep_num,
@@ -1430,8 +1435,6 @@ static int eps_reinit(struct langwell_udc *dev)
1430 1435
1431 INIT_LIST_HEAD(&ep->queue); 1436 INIT_LIST_HEAD(&ep->queue);
1432 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); 1437 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
1433
1434 ep->dqh = &dev->ep_dqh[i];
1435 } 1438 }
1436 1439
1437 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__); 1440 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);