diff options
Diffstat (limited to 'drivers/usb/gadget/r8a66597-udc.c')
-rw-r--r-- | drivers/usb/gadget/r8a66597-udc.c | 29 |
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 | ||
771 | static void start_packet(struct r8a66597_ep *ep, struct r8a66597_request *req) | 771 | static 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 | ||
1803 | static 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 | |||
1803 | static struct usb_gadget_ops r8a66597_gadget_ops = { | 1815 | static 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 | ||
1810 | static int __exit r8a66597_remove(struct platform_device *pdev) | 1823 | static int __exit r8a66597_remove(struct platform_device *pdev) |