aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/r8a66597-udc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/r8a66597-udc.c')
-rw-r--r--drivers/usb/gadget/r8a66597-udc.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
index c4401e7dd3a..f3ac2a20c27 100644
--- a/drivers/usb/gadget/r8a66597-udc.c
+++ b/drivers/usb/gadget/r8a66597-udc.c
@@ -459,7 +459,7 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
459 unsigned char *counter; 459 unsigned char *counter;
460 int ret; 460 int ret;
461 461
462 ep->desc = desc; 462 ep->ep.desc = desc;
463 463
464 if (ep->pipenum) /* already allocated pipe */ 464 if (ep->pipenum) /* already allocated pipe */
465 return 0; 465 return 0;
@@ -648,7 +648,7 @@ static int sudmac_alloc_channel(struct r8a66597 *r8a66597,
648 /* set SUDMAC parameters */ 648 /* set SUDMAC parameters */
649 dma = &r8a66597->dma; 649 dma = &r8a66597->dma;
650 dma->used = 1; 650 dma->used = 1;
651 if (ep->desc->bEndpointAddress & USB_DIR_IN) { 651 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN) {
652 dma->dir = 1; 652 dma->dir = 1;
653 } else { 653 } else {
654 dma->dir = 0; 654 dma->dir = 0;
@@ -770,7 +770,7 @@ static void start_packet_read(struct r8a66597_ep *ep,
770 770
771static void start_packet(struct r8a66597_ep *ep, struct r8a66597_request *req) 771static void start_packet(struct r8a66597_ep *ep, struct r8a66597_request *req)
772{ 772{
773 if (ep->desc->bEndpointAddress & USB_DIR_IN) 773 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN)
774 start_packet_write(ep, req); 774 start_packet_write(ep, req);
775 else 775 else
776 start_packet_read(ep, req); 776 start_packet_read(ep, req);
@@ -930,7 +930,7 @@ __acquires(r8a66597->lock)
930 930
931 if (restart) { 931 if (restart) {
932 req = get_request_from_ep(ep); 932 req = get_request_from_ep(ep);
933 if (ep->desc) 933 if (ep->ep.desc)
934 start_packet(ep, req); 934 start_packet(ep, req);
935 } 935 }
936} 936}
@@ -1116,7 +1116,7 @@ static void irq_pipe_ready(struct r8a66597 *r8a66597, u16 status, u16 enb)
1116 r8a66597_write(r8a66597, ~check, BRDYSTS); 1116 r8a66597_write(r8a66597, ~check, BRDYSTS);
1117 ep = r8a66597->pipenum2ep[pipenum]; 1117 ep = r8a66597->pipenum2ep[pipenum];
1118 req = get_request_from_ep(ep); 1118 req = get_request_from_ep(ep);
1119 if (ep->desc->bEndpointAddress & USB_DIR_IN) 1119 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN)
1120 irq_packet_write(ep, req); 1120 irq_packet_write(ep, req);
1121 else 1121 else
1122 irq_packet_read(ep, req); 1122 irq_packet_read(ep, req);
@@ -1170,7 +1170,7 @@ __acquires(r8a66597->lock)
1170 1170
1171 switch (ctrl->bRequestType & USB_RECIP_MASK) { 1171 switch (ctrl->bRequestType & USB_RECIP_MASK) {
1172 case USB_RECIP_DEVICE: 1172 case USB_RECIP_DEVICE:
1173 status = 1 << USB_DEVICE_SELF_POWERED; 1173 status = r8a66597->device_status;
1174 break; 1174 break;
1175 case USB_RECIP_INTERFACE: 1175 case USB_RECIP_INTERFACE:
1176 status = 0; 1176 status = 0;
@@ -1627,7 +1627,7 @@ static int r8a66597_queue(struct usb_ep *_ep, struct usb_request *_req,
1627 req->req.actual = 0; 1627 req->req.actual = 0;
1628 req->req.status = -EINPROGRESS; 1628 req->req.status = -EINPROGRESS;
1629 1629
1630 if (ep->desc == NULL) /* control */ 1630 if (ep->ep.desc == NULL) /* control */
1631 start_ep0(ep, req); 1631 start_ep0(ep, req);
1632 else { 1632 else {
1633 if (request && !ep->busy) 1633 if (request && !ep->busy)
@@ -1692,7 +1692,7 @@ static int r8a66597_set_wedge(struct usb_ep *_ep)
1692 1692
1693 ep = container_of(_ep, struct r8a66597_ep, ep); 1693 ep = container_of(_ep, struct r8a66597_ep, ep);
1694 1694
1695 if (!ep || !ep->desc) 1695 if (!ep || !ep->ep.desc)
1696 return -EINVAL; 1696 return -EINVAL;
1697 1697
1698 spin_lock_irqsave(&ep->r8a66597->lock, flags); 1698 spin_lock_irqsave(&ep->r8a66597->lock, flags);
@@ -1800,11 +1800,24 @@ static int r8a66597_pullup(struct usb_gadget *gadget, int is_on)
1800 return 0; 1800 return 0;
1801} 1801}
1802 1802
1803static int r8a66597_set_selfpowered(struct usb_gadget *gadget, int is_self)
1804{
1805 struct r8a66597 *r8a66597 = gadget_to_r8a66597(gadget);
1806
1807 if (is_self)
1808 r8a66597->device_status |= 1 << USB_DEVICE_SELF_POWERED;
1809 else
1810 r8a66597->device_status &= ~(1 << USB_DEVICE_SELF_POWERED);
1811
1812 return 0;
1813}
1814
1803static struct usb_gadget_ops r8a66597_gadget_ops = { 1815static struct usb_gadget_ops r8a66597_gadget_ops = {
1804 .get_frame = r8a66597_get_frame, 1816 .get_frame = r8a66597_get_frame,
1805 .udc_start = r8a66597_start, 1817 .udc_start = r8a66597_start,
1806 .udc_stop = r8a66597_stop, 1818 .udc_stop = r8a66597_stop,
1807 .pullup = r8a66597_pullup, 1819 .pullup = r8a66597_pullup,
1820 .set_selfpowered = r8a66597_set_selfpowered,
1808}; 1821};
1809 1822
1810static int __exit r8a66597_remove(struct platform_device *pdev) 1823static int __exit r8a66597_remove(struct platform_device *pdev)