2 * Intel Langwell USB Device Controller driver
3 * Copyright (C) 2008-2009, Intel Corporation.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
24 #if defined(CONFIG_USB_LANGWELL_OTG)
25 #define OTG_TRANSCEIVER
29 #include <linux/module.h>
30 #include <linux/pci.h>
31 #include <linux/dma-mapping.h>
32 #include <linux/kernel.h>
33 #include <linux/delay.h>
34 #include <linux/ioport.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <linux/errno.h>
38 #include <linux/init.h>
39 #include <linux/timer.h>
40 #include <linux/list.h>
41 #include <linux/interrupt.h>
42 #include <linux/moduleparam.h>
43 #include <linux/device.h>
44 #include <linux/usb/ch9.h>
45 #include <linux/usb/gadget.h>
46 #include <linux/usb/otg.h>
49 #include <linux/irq.h>
50 #include <asm/system.h>
51 #include <asm/unaligned.h>
53 #include "langwell_udc.h"
56 #define DRIVER_DESC "Intel Langwell USB Device Controller driver"
57 #define DRIVER_VERSION "16 May 2009"
59 static const char driver_name
[] = "langwell_udc";
60 static const char driver_desc
[] = DRIVER_DESC
;
63 /* controller device global variable */
64 static struct langwell_udc
*the_controller
;
66 /* for endpoint 0 operations */
67 static const struct usb_endpoint_descriptor
69 .bLength
= USB_DT_ENDPOINT_SIZE
,
70 .bDescriptorType
= USB_DT_ENDPOINT
,
71 .bEndpointAddress
= 0,
72 .bmAttributes
= USB_ENDPOINT_XFER_CONTROL
,
73 .wMaxPacketSize
= EP0_MAX_PKT_SIZE
,
77 /*-------------------------------------------------------------------------*/
81 #define DBG(dev, fmt, args...) \
82 pr_debug("%s %s: " fmt , driver_name, \
83 pci_name(dev->pdev), ## args)
85 #define DBG(dev, fmt, args...) \
93 #define VDBG(dev, fmt, args...) \
98 #define ERROR(dev, fmt, args...) \
99 pr_err("%s %s: " fmt , driver_name, \
100 pci_name(dev->pdev), ## args)
102 #define WARNING(dev, fmt, args...) \
103 pr_warning("%s %s: " fmt , driver_name, \
104 pci_name(dev->pdev), ## args)
106 #define INFO(dev, fmt, args...) \
107 pr_info("%s %s: " fmt , driver_name, \
108 pci_name(dev->pdev), ## args)
112 static inline void print_all_registers(struct langwell_udc
*dev
)
116 /* Capability Registers */
117 printk(KERN_DEBUG
"Capability Registers (offset: "
118 "0x%04x, length: 0x%08x)\n",
120 (u32
)sizeof(struct langwell_cap_regs
));
121 printk(KERN_DEBUG
"caplength=0x%02x\n",
122 readb(&dev
->cap_regs
->caplength
));
123 printk(KERN_DEBUG
"hciversion=0x%04x\n",
124 readw(&dev
->cap_regs
->hciversion
));
125 printk(KERN_DEBUG
"hcsparams=0x%08x\n",
126 readl(&dev
->cap_regs
->hcsparams
));
127 printk(KERN_DEBUG
"hccparams=0x%08x\n",
128 readl(&dev
->cap_regs
->hccparams
));
129 printk(KERN_DEBUG
"dciversion=0x%04x\n",
130 readw(&dev
->cap_regs
->dciversion
));
131 printk(KERN_DEBUG
"dccparams=0x%08x\n",
132 readl(&dev
->cap_regs
->dccparams
));
134 /* Operational Registers */
135 printk(KERN_DEBUG
"Operational Registers (offset: "
136 "0x%04x, length: 0x%08x)\n",
138 (u32
)sizeof(struct langwell_op_regs
));
139 printk(KERN_DEBUG
"extsts=0x%08x\n",
140 readl(&dev
->op_regs
->extsts
));
141 printk(KERN_DEBUG
"extintr=0x%08x\n",
142 readl(&dev
->op_regs
->extintr
));
143 printk(KERN_DEBUG
"usbcmd=0x%08x\n",
144 readl(&dev
->op_regs
->usbcmd
));
145 printk(KERN_DEBUG
"usbsts=0x%08x\n",
146 readl(&dev
->op_regs
->usbsts
));
147 printk(KERN_DEBUG
"usbintr=0x%08x\n",
148 readl(&dev
->op_regs
->usbintr
));
149 printk(KERN_DEBUG
"frindex=0x%08x\n",
150 readl(&dev
->op_regs
->frindex
));
151 printk(KERN_DEBUG
"ctrldssegment=0x%08x\n",
152 readl(&dev
->op_regs
->ctrldssegment
));
153 printk(KERN_DEBUG
"deviceaddr=0x%08x\n",
154 readl(&dev
->op_regs
->deviceaddr
));
155 printk(KERN_DEBUG
"endpointlistaddr=0x%08x\n",
156 readl(&dev
->op_regs
->endpointlistaddr
));
157 printk(KERN_DEBUG
"ttctrl=0x%08x\n",
158 readl(&dev
->op_regs
->ttctrl
));
159 printk(KERN_DEBUG
"burstsize=0x%08x\n",
160 readl(&dev
->op_regs
->burstsize
));
161 printk(KERN_DEBUG
"txfilltuning=0x%08x\n",
162 readl(&dev
->op_regs
->txfilltuning
));
163 printk(KERN_DEBUG
"txttfilltuning=0x%08x\n",
164 readl(&dev
->op_regs
->txttfilltuning
));
165 printk(KERN_DEBUG
"ic_usb=0x%08x\n",
166 readl(&dev
->op_regs
->ic_usb
));
167 printk(KERN_DEBUG
"ulpi_viewport=0x%08x\n",
168 readl(&dev
->op_regs
->ulpi_viewport
));
169 printk(KERN_DEBUG
"configflag=0x%08x\n",
170 readl(&dev
->op_regs
->configflag
));
171 printk(KERN_DEBUG
"portsc1=0x%08x\n",
172 readl(&dev
->op_regs
->portsc1
));
173 printk(KERN_DEBUG
"devlc=0x%08x\n",
174 readl(&dev
->op_regs
->devlc
));
175 printk(KERN_DEBUG
"otgsc=0x%08x\n",
176 readl(&dev
->op_regs
->otgsc
));
177 printk(KERN_DEBUG
"usbmode=0x%08x\n",
178 readl(&dev
->op_regs
->usbmode
));
179 printk(KERN_DEBUG
"endptnak=0x%08x\n",
180 readl(&dev
->op_regs
->endptnak
));
181 printk(KERN_DEBUG
"endptnaken=0x%08x\n",
182 readl(&dev
->op_regs
->endptnaken
));
183 printk(KERN_DEBUG
"endptsetupstat=0x%08x\n",
184 readl(&dev
->op_regs
->endptsetupstat
));
185 printk(KERN_DEBUG
"endptprime=0x%08x\n",
186 readl(&dev
->op_regs
->endptprime
));
187 printk(KERN_DEBUG
"endptflush=0x%08x\n",
188 readl(&dev
->op_regs
->endptflush
));
189 printk(KERN_DEBUG
"endptstat=0x%08x\n",
190 readl(&dev
->op_regs
->endptstat
));
191 printk(KERN_DEBUG
"endptcomplete=0x%08x\n",
192 readl(&dev
->op_regs
->endptcomplete
));
194 for (i
= 0; i
< dev
->ep_max
/ 2; i
++) {
195 printk(KERN_DEBUG
"endptctrl[%d]=0x%08x\n",
196 i
, readl(&dev
->op_regs
->endptctrl
[i
]));
202 /*-------------------------------------------------------------------------*/
204 #define DIR_STRING(bAddress) (((bAddress) & USB_DIR_IN) ? "in" : "out")
206 #define is_in(ep) (((ep)->ep_num == 0) ? ((ep)->dev->ep0_dir == \
207 USB_DIR_IN) : ((ep)->desc->bEndpointAddress \
208 & USB_DIR_IN) == USB_DIR_IN)
212 static char *type_string(u8 bmAttributes
)
214 switch ((bmAttributes
) & USB_ENDPOINT_XFERTYPE_MASK
) {
215 case USB_ENDPOINT_XFER_BULK
:
217 case USB_ENDPOINT_XFER_ISOC
:
219 case USB_ENDPOINT_XFER_INT
:
228 /* configure endpoint control registers */
229 static void ep_reset(struct langwell_ep
*ep
, unsigned char ep_num
,
230 unsigned char is_in
, unsigned char ep_type
)
232 struct langwell_udc
*dev
;
236 VDBG(dev
, "---> %s()\n", __func__
);
238 endptctrl
= readl(&dev
->op_regs
->endptctrl
[ep_num
]);
239 if (is_in
) { /* TX */
241 endptctrl
|= EPCTRL_TXR
;
242 endptctrl
|= EPCTRL_TXE
;
243 endptctrl
|= ep_type
<< EPCTRL_TXT_SHIFT
;
246 endptctrl
|= EPCTRL_RXR
;
247 endptctrl
|= EPCTRL_RXE
;
248 endptctrl
|= ep_type
<< EPCTRL_RXT_SHIFT
;
251 writel(endptctrl
, &dev
->op_regs
->endptctrl
[ep_num
]);
253 VDBG(dev
, "<--- %s()\n", __func__
);
257 /* reset ep0 dQH and endptctrl */
258 static void ep0_reset(struct langwell_udc
*dev
)
260 struct langwell_ep
*ep
;
263 VDBG(dev
, "---> %s()\n", __func__
);
266 for (i
= 0; i
< 2; i
++) {
271 ep
->dqh
= &dev
->ep_dqh
[i
];
273 /* configure ep0 endpoint capabilities in dQH */
274 ep
->dqh
->dqh_ios
= 1;
275 ep
->dqh
->dqh_mpl
= EP0_MAX_PKT_SIZE
;
277 /* FIXME: enable ep0-in HW zero length termination select */
279 ep
->dqh
->dqh_zlt
= 0;
280 ep
->dqh
->dqh_mult
= 0;
282 /* configure ep0 control registers */
283 ep_reset(&dev
->ep
[0], 0, i
, USB_ENDPOINT_XFER_CONTROL
);
286 VDBG(dev
, "<--- %s()\n", __func__
);
290 /*-------------------------------------------------------------------------*/
292 /* endpoints operations */
294 /* configure endpoint, making it usable */
295 static int langwell_ep_enable(struct usb_ep
*_ep
,
296 const struct usb_endpoint_descriptor
*desc
)
298 struct langwell_udc
*dev
;
299 struct langwell_ep
*ep
;
303 unsigned char zlt
, ios
= 0, mult
= 0;
305 ep
= container_of(_ep
, struct langwell_ep
, ep
);
307 VDBG(dev
, "---> %s()\n", __func__
);
309 if (!_ep
|| !desc
|| ep
->desc
310 || desc
->bDescriptorType
!= USB_DT_ENDPOINT
)
313 if (!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
316 max
= le16_to_cpu(desc
->wMaxPacketSize
);
319 * disable HW zero length termination select
320 * driver handles zero length packet through req->req.zero
325 * sanity check type, direction, address, and then
326 * initialize the endpoint capabilities fields in dQH
328 switch (desc
->bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
) {
329 case USB_ENDPOINT_XFER_CONTROL
:
332 case USB_ENDPOINT_XFER_BULK
:
333 if ((dev
->gadget
.speed
== USB_SPEED_HIGH
335 || (dev
->gadget
.speed
== USB_SPEED_FULL
340 case USB_ENDPOINT_XFER_INT
:
341 if (strstr(ep
->ep
.name
, "-iso")) /* bulk is ok */
344 switch (dev
->gadget
.speed
) {
357 case USB_ENDPOINT_XFER_ISOC
:
358 if (strstr(ep
->ep
.name
, "-bulk")
359 || strstr(ep
->ep
.name
, "-int"))
362 switch (dev
->gadget
.speed
) {
374 * calculate transactions needed for high bandwidth iso
376 mult
= (unsigned char)(1 + ((max
>> 11) & 0x03));
377 max
= max
& 0x8ff; /* bit 0~10 */
378 /* 3 transactions at most */
386 spin_lock_irqsave(&dev
->lock
, flags
);
388 /* configure endpoint capabilities in dQH */
389 ep
->dqh
->dqh_ios
= ios
;
390 ep
->dqh
->dqh_mpl
= cpu_to_le16(max
);
391 ep
->dqh
->dqh_zlt
= zlt
;
392 ep
->dqh
->dqh_mult
= mult
;
394 ep
->ep
.maxpacket
= max
;
397 ep
->ep_num
= desc
->bEndpointAddress
& USB_ENDPOINT_NUMBER_MASK
;
400 ep
->ep_type
= desc
->bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
;
402 /* configure endpoint control registers */
403 ep_reset(ep
, ep
->ep_num
, is_in(ep
), ep
->ep_type
);
405 DBG(dev
, "enabled %s (ep%d%s-%s), max %04x\n",
408 DIR_STRING(desc
->bEndpointAddress
),
409 type_string(desc
->bmAttributes
),
412 spin_unlock_irqrestore(&dev
->lock
, flags
);
414 VDBG(dev
, "<--- %s()\n", __func__
);
419 /*-------------------------------------------------------------------------*/
421 /* retire a request */
422 static void done(struct langwell_ep
*ep
, struct langwell_request
*req
,
425 struct langwell_udc
*dev
= ep
->dev
;
426 unsigned stopped
= ep
->stopped
;
427 struct langwell_dtd
*curr_dtd
, *next_dtd
;
430 VDBG(dev
, "---> %s()\n", __func__
);
432 /* remove the req from ep->queue */
433 list_del_init(&req
->queue
);
435 if (req
->req
.status
== -EINPROGRESS
)
436 req
->req
.status
= status
;
438 status
= req
->req
.status
;
440 /* free dTD for the request */
441 next_dtd
= req
->head
;
442 for (i
= 0; i
< req
->dtd_count
; i
++) {
444 if (i
!= req
->dtd_count
- 1)
445 next_dtd
= curr_dtd
->next_dtd_virt
;
446 dma_pool_free(dev
->dtd_pool
, curr_dtd
, curr_dtd
->dtd_dma
);
450 dma_unmap_single(&dev
->pdev
->dev
, req
->req
.dma
, req
->req
.length
,
451 is_in(ep
) ? PCI_DMA_TODEVICE
: PCI_DMA_FROMDEVICE
);
452 req
->req
.dma
= DMA_ADDR_INVALID
;
455 dma_sync_single_for_cpu(&dev
->pdev
->dev
, req
->req
.dma
,
457 is_in(ep
) ? DMA_TO_DEVICE
: DMA_FROM_DEVICE
);
459 if (status
!= -ESHUTDOWN
)
460 DBG(dev
, "complete %s, req %p, stat %d, len %u/%u\n",
461 ep
->ep
.name
, &req
->req
, status
,
462 req
->req
.actual
, req
->req
.length
);
464 /* don't modify queue heads during completion callback */
467 spin_unlock(&dev
->lock
);
468 /* complete routine from gadget driver */
469 if (req
->req
.complete
)
470 req
->req
.complete(&ep
->ep
, &req
->req
);
472 spin_lock(&dev
->lock
);
473 ep
->stopped
= stopped
;
475 VDBG(dev
, "<--- %s()\n", __func__
);
479 static void langwell_ep_fifo_flush(struct usb_ep
*_ep
);
481 /* delete all endpoint requests, called with spinlock held */
482 static void nuke(struct langwell_ep
*ep
, int status
)
484 /* called with spinlock held */
487 /* endpoint fifo flush */
488 if (&ep
->ep
&& ep
->desc
)
489 langwell_ep_fifo_flush(&ep
->ep
);
491 while (!list_empty(&ep
->queue
)) {
492 struct langwell_request
*req
= NULL
;
493 req
= list_entry(ep
->queue
.next
, struct langwell_request
,
495 done(ep
, req
, status
);
500 /*-------------------------------------------------------------------------*/
502 /* endpoint is no longer usable */
503 static int langwell_ep_disable(struct usb_ep
*_ep
)
505 struct langwell_ep
*ep
;
507 struct langwell_udc
*dev
;
511 ep
= container_of(_ep
, struct langwell_ep
, ep
);
513 VDBG(dev
, "---> %s()\n", __func__
);
515 if (!_ep
|| !ep
->desc
)
518 spin_lock_irqsave(&dev
->lock
, flags
);
520 /* disable endpoint control register */
522 endptctrl
= readl(&dev
->op_regs
->endptctrl
[ep_num
]);
524 endptctrl
&= ~EPCTRL_TXE
;
526 endptctrl
&= ~EPCTRL_RXE
;
527 writel(endptctrl
, &dev
->op_regs
->endptctrl
[ep_num
]);
529 /* nuke all pending requests (does flush) */
530 nuke(ep
, -ESHUTDOWN
);
535 spin_unlock_irqrestore(&dev
->lock
, flags
);
537 DBG(dev
, "disabled %s\n", _ep
->name
);
538 VDBG(dev
, "<--- %s()\n", __func__
);
544 /* allocate a request object to use with this endpoint */
545 static struct usb_request
*langwell_alloc_request(struct usb_ep
*_ep
,
548 struct langwell_ep
*ep
;
549 struct langwell_udc
*dev
;
550 struct langwell_request
*req
= NULL
;
555 ep
= container_of(_ep
, struct langwell_ep
, ep
);
557 VDBG(dev
, "---> %s()\n", __func__
);
559 req
= kzalloc(sizeof(*req
), gfp_flags
);
563 req
->req
.dma
= DMA_ADDR_INVALID
;
564 INIT_LIST_HEAD(&req
->queue
);
566 VDBG(dev
, "alloc request for %s\n", _ep
->name
);
567 VDBG(dev
, "<--- %s()\n", __func__
);
572 /* free a request object */
573 static void langwell_free_request(struct usb_ep
*_ep
,
574 struct usb_request
*_req
)
576 struct langwell_ep
*ep
;
577 struct langwell_udc
*dev
;
578 struct langwell_request
*req
= NULL
;
580 ep
= container_of(_ep
, struct langwell_ep
, ep
);
582 VDBG(dev
, "---> %s()\n", __func__
);
587 req
= container_of(_req
, struct langwell_request
, req
);
588 WARN_ON(!list_empty(&req
->queue
));
593 VDBG(dev
, "free request for %s\n", _ep
->name
);
594 VDBG(dev
, "<--- %s()\n", __func__
);
598 /*-------------------------------------------------------------------------*/
600 /* queue dTD and PRIME endpoint */
601 static int queue_dtd(struct langwell_ep
*ep
, struct langwell_request
*req
)
603 u32 bit_mask
, usbcmd
, endptstat
, dtd_dma
;
606 struct langwell_dqh
*dqh
;
607 struct langwell_udc
*dev
;
610 VDBG(dev
, "---> %s()\n", __func__
);
612 i
= ep
->ep_num
* 2 + is_in(ep
);
613 dqh
= &dev
->ep_dqh
[i
];
616 VDBG(dev
, "%s\n", ep
->name
);
619 VDBG(dev
, "%s-%s\n", ep
->name
, is_in(ep
) ? "in" : "out");
621 VDBG(dev
, "ep_dqh[%d] addr: 0x%08x\n", i
, (u32
)&(dev
->ep_dqh
[i
]));
623 bit_mask
= is_in(ep
) ?
624 (1 << (ep
->ep_num
+ 16)) : (1 << (ep
->ep_num
));
626 VDBG(dev
, "bit_mask = 0x%08x\n", bit_mask
);
628 /* check if the pipe is empty */
629 if (!(list_empty(&ep
->queue
))) {
630 /* add dTD to the end of linked list */
631 struct langwell_request
*lastreq
;
632 lastreq
= list_entry(ep
->queue
.prev
,
633 struct langwell_request
, queue
);
635 lastreq
->tail
->dtd_next
=
636 cpu_to_le32(req
->head
->dtd_dma
& DTD_NEXT_MASK
);
638 /* read prime bit, if 1 goto out */
639 if (readl(&dev
->op_regs
->endptprime
) & bit_mask
)
643 /* set ATDTW bit in USBCMD */
644 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
645 writel(usbcmd
| CMD_ATDTW
, &dev
->op_regs
->usbcmd
);
647 /* read correct status bit */
648 endptstat
= readl(&dev
->op_regs
->endptstat
) & bit_mask
;
650 } while (!(readl(&dev
->op_regs
->usbcmd
) & CMD_ATDTW
));
652 /* write ATDTW bit to 0 */
653 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
654 writel(usbcmd
& ~CMD_ATDTW
, &dev
->op_regs
->usbcmd
);
660 /* write dQH next pointer and terminate bit to 0 */
661 dtd_dma
= req
->head
->dtd_dma
& DTD_NEXT_MASK
;
662 dqh
->dtd_next
= cpu_to_le32(dtd_dma
);
664 /* clear active and halt bit */
665 dtd_status
= (u8
) ~(DTD_STS_ACTIVE
| DTD_STS_HALTED
);
666 dqh
->dtd_status
&= dtd_status
;
667 VDBG(dev
, "dqh->dtd_status = 0x%x\n", dqh
->dtd_status
);
669 /* write 1 to endptprime register to PRIME endpoint */
670 bit_mask
= is_in(ep
) ? (1 << (ep
->ep_num
+ 16)) : (1 << ep
->ep_num
);
671 VDBG(dev
, "endprime bit_mask = 0x%08x\n", bit_mask
);
672 writel(bit_mask
, &dev
->op_regs
->endptprime
);
674 VDBG(dev
, "<--- %s()\n", __func__
);
679 /* fill in the dTD structure to build a transfer descriptor */
680 static struct langwell_dtd
*build_dtd(struct langwell_request
*req
,
681 unsigned *length
, dma_addr_t
*dma
, int *is_last
)
684 struct langwell_dtd
*dtd
;
685 struct langwell_udc
*dev
;
689 VDBG(dev
, "---> %s()\n", __func__
);
691 /* the maximum transfer length, up to 16k bytes */
692 *length
= min(req
->req
.length
- req
->req
.actual
,
693 (unsigned)DTD_MAX_TRANSFER_LENGTH
);
695 /* create dTD dma_pool resource */
696 dtd
= dma_pool_alloc(dev
->dtd_pool
, GFP_KERNEL
, dma
);
701 /* initialize buffer page pointers */
702 buf_ptr
= (u32
)(req
->req
.dma
+ req
->req
.actual
);
703 for (i
= 0; i
< 5; i
++)
704 dtd
->dtd_buf
[i
] = cpu_to_le32(buf_ptr
+ i
* PAGE_SIZE
);
706 req
->req
.actual
+= *length
;
708 /* fill in total bytes with transfer size */
709 dtd
->dtd_total
= cpu_to_le16(*length
);
710 VDBG(dev
, "dtd->dtd_total = %d\n", dtd
->dtd_total
);
712 /* set is_last flag if req->req.zero is set or not */
714 if (*length
== 0 || (*length
% req
->ep
->ep
.maxpacket
) != 0)
718 } else if (req
->req
.length
== req
->req
.actual
) {
724 VDBG(dev
, "multi-dtd request!\n");
726 /* set interrupt on complete bit for the last dTD */
727 if (*is_last
&& !req
->req
.no_interrupt
)
730 /* set multiplier override 0 for non-ISO and non-TX endpoint */
733 /* set the active bit of status field to 1 */
734 dtd
->dtd_status
= DTD_STS_ACTIVE
;
735 VDBG(dev
, "dtd->dtd_status = 0x%02x\n", dtd
->dtd_status
);
737 VDBG(dev
, "length = %d, dma addr= 0x%08x\n", *length
, (int)*dma
);
738 VDBG(dev
, "<--- %s()\n", __func__
);
743 /* generate dTD linked list for a request */
744 static int req_to_dtd(struct langwell_request
*req
)
747 int is_last
, is_first
= 1;
748 struct langwell_dtd
*dtd
, *last_dtd
= NULL
;
749 struct langwell_udc
*dev
;
753 VDBG(dev
, "---> %s()\n", __func__
);
755 dtd
= build_dtd(req
, &count
, &dma
, &is_last
);
763 last_dtd
->dtd_next
= cpu_to_le32(dma
);
764 last_dtd
->next_dtd_virt
= dtd
;
770 /* set terminate bit to 1 for the last dTD */
771 dtd
->dtd_next
= DTD_TERM
;
775 VDBG(dev
, "<--- %s()\n", __func__
);
779 /*-------------------------------------------------------------------------*/
781 /* queue (submits) an I/O requests to an endpoint */
782 static int langwell_ep_queue(struct usb_ep
*_ep
, struct usb_request
*_req
,
785 struct langwell_request
*req
;
786 struct langwell_ep
*ep
;
787 struct langwell_udc
*dev
;
789 int is_iso
= 0, zlflag
= 0;
791 /* always require a cpu-view buffer */
792 req
= container_of(_req
, struct langwell_request
, req
);
793 ep
= container_of(_ep
, struct langwell_ep
, ep
);
795 if (!_req
|| !_req
->complete
|| !_req
->buf
796 || !list_empty(&req
->queue
)) {
800 if (unlikely(!_ep
|| !ep
->desc
))
805 VDBG(dev
, "---> %s()\n", __func__
);
807 if (ep
->desc
->bmAttributes
== USB_ENDPOINT_XFER_ISOC
) {
808 if (req
->req
.length
> ep
->ep
.maxpacket
)
813 if (unlikely(!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
))
816 /* set up dma mapping in case the caller didn't */
817 if (_req
->dma
== DMA_ADDR_INVALID
) {
818 /* WORKAROUND: WARN_ON(size == 0) */
819 if (_req
->length
== 0) {
820 VDBG(dev
, "req->length: 0->1\n");
825 _req
->dma
= dma_map_single(&dev
->pdev
->dev
,
826 _req
->buf
, _req
->length
,
827 is_in(ep
) ? DMA_TO_DEVICE
: DMA_FROM_DEVICE
);
828 if (zlflag
&& (_req
->length
== 1)) {
829 VDBG(dev
, "req->length: 1->0\n");
835 VDBG(dev
, "req->mapped = 1\n");
837 dma_sync_single_for_device(&dev
->pdev
->dev
,
838 _req
->dma
, _req
->length
,
839 is_in(ep
) ? DMA_TO_DEVICE
: DMA_FROM_DEVICE
);
841 VDBG(dev
, "req->mapped = 0\n");
844 DBG(dev
, "%s queue req %p, len %u, buf %p, dma 0x%08llx\n",
846 _req
, _req
->length
, _req
->buf
, (unsigned long long)_req
->dma
);
848 _req
->status
= -EINPROGRESS
;
852 spin_lock_irqsave(&dev
->lock
, flags
);
854 /* build and put dTDs to endpoint queue */
855 if (!req_to_dtd(req
)) {
858 spin_unlock_irqrestore(&dev
->lock
, flags
);
862 /* update ep0 state */
864 dev
->ep0_state
= DATA_STATE_XMIT
;
866 if (likely(req
!= NULL
)) {
867 list_add_tail(&req
->queue
, &ep
->queue
);
868 VDBG(dev
, "list_add_tail() \n");
871 spin_unlock_irqrestore(&dev
->lock
, flags
);
873 VDBG(dev
, "<--- %s()\n", __func__
);
878 /* dequeue (cancels, unlinks) an I/O request from an endpoint */
879 static int langwell_ep_dequeue(struct usb_ep
*_ep
, struct usb_request
*_req
)
881 struct langwell_ep
*ep
;
882 struct langwell_udc
*dev
;
883 struct langwell_request
*req
;
885 int stopped
, ep_num
, retval
= 0;
888 ep
= container_of(_ep
, struct langwell_ep
, ep
);
890 VDBG(dev
, "---> %s()\n", __func__
);
892 if (!_ep
|| !ep
->desc
|| !_req
)
898 spin_lock_irqsave(&dev
->lock
, flags
);
899 stopped
= ep
->stopped
;
901 /* quiesce dma while we patch the queue */
905 /* disable endpoint control register */
906 endptctrl
= readl(&dev
->op_regs
->endptctrl
[ep_num
]);
908 endptctrl
&= ~EPCTRL_TXE
;
910 endptctrl
&= ~EPCTRL_RXE
;
911 writel(endptctrl
, &dev
->op_regs
->endptctrl
[ep_num
]);
913 /* make sure it's still queued on this endpoint */
914 list_for_each_entry(req
, &ep
->queue
, queue
) {
915 if (&req
->req
== _req
)
919 if (&req
->req
!= _req
) {
924 /* queue head may be partially complete. */
925 if (ep
->queue
.next
== &req
->queue
) {
926 DBG(dev
, "unlink (%s) dma\n", _ep
->name
);
927 _req
->status
= -ECONNRESET
;
928 langwell_ep_fifo_flush(&ep
->ep
);
930 /* not the last request in endpoint queue */
931 if (likely(ep
->queue
.next
== &req
->queue
)) {
932 struct langwell_dqh
*dqh
;
933 struct langwell_request
*next_req
;
936 next_req
= list_entry(req
->queue
.next
,
937 struct langwell_request
, queue
);
939 /* point the dQH to the first dTD of next request */
940 writel((u32
) next_req
->head
, &dqh
->dqh_current
);
943 struct langwell_request
*prev_req
;
945 prev_req
= list_entry(req
->queue
.prev
,
946 struct langwell_request
, queue
);
947 writel(readl(&req
->tail
->dtd_next
),
948 &prev_req
->tail
->dtd_next
);
951 done(ep
, req
, -ECONNRESET
);
954 /* enable endpoint again */
955 endptctrl
= readl(&dev
->op_regs
->endptctrl
[ep_num
]);
957 endptctrl
|= EPCTRL_TXE
;
959 endptctrl
|= EPCTRL_RXE
;
960 writel(endptctrl
, &dev
->op_regs
->endptctrl
[ep_num
]);
962 ep
->stopped
= stopped
;
963 spin_unlock_irqrestore(&dev
->lock
, flags
);
965 VDBG(dev
, "<--- %s()\n", __func__
);
970 /*-------------------------------------------------------------------------*/
972 /* endpoint set/clear halt */
973 static void ep_set_halt(struct langwell_ep
*ep
, int value
)
977 struct langwell_udc
*dev
= ep
->dev
;
978 VDBG(dev
, "---> %s()\n", __func__
);
981 endptctrl
= readl(&dev
->op_regs
->endptctrl
[ep_num
]);
983 /* value: 1 - set halt, 0 - clear halt */
985 /* set the stall bit */
987 endptctrl
|= EPCTRL_TXS
;
989 endptctrl
|= EPCTRL_RXS
;
991 /* clear the stall bit and reset data toggle */
993 endptctrl
&= ~EPCTRL_TXS
;
994 endptctrl
|= EPCTRL_TXR
;
996 endptctrl
&= ~EPCTRL_RXS
;
997 endptctrl
|= EPCTRL_RXR
;
1001 writel(endptctrl
, &dev
->op_regs
->endptctrl
[ep_num
]);
1003 VDBG(dev
, "<--- %s()\n", __func__
);
1007 /* set the endpoint halt feature */
1008 static int langwell_ep_set_halt(struct usb_ep
*_ep
, int value
)
1010 struct langwell_ep
*ep
;
1011 struct langwell_udc
*dev
;
1012 unsigned long flags
;
1015 ep
= container_of(_ep
, struct langwell_ep
, ep
);
1018 VDBG(dev
, "---> %s()\n", __func__
);
1020 if (!_ep
|| !ep
->desc
)
1023 if (!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1026 if (ep
->desc
&& (ep
->desc
->bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
)
1027 == USB_ENDPOINT_XFER_ISOC
)
1030 spin_lock_irqsave(&dev
->lock
, flags
);
1033 * attempt to halt IN ep will fail if any transfer requests
1036 if (!list_empty(&ep
->queue
) && is_in(ep
) && value
) {
1037 /* IN endpoint FIFO holds bytes */
1038 DBG(dev
, "%s FIFO holds bytes\n", _ep
->name
);
1043 /* endpoint set/clear halt */
1045 ep_set_halt(ep
, value
);
1046 } else { /* endpoint 0 */
1047 dev
->ep0_state
= WAIT_FOR_SETUP
;
1048 dev
->ep0_dir
= USB_DIR_OUT
;
1051 spin_unlock_irqrestore(&dev
->lock
, flags
);
1052 DBG(dev
, "%s %s halt\n", _ep
->name
, value
? "set" : "clear");
1053 VDBG(dev
, "<--- %s()\n", __func__
);
1058 /* set the halt feature and ignores clear requests */
1059 static int langwell_ep_set_wedge(struct usb_ep
*_ep
)
1061 struct langwell_ep
*ep
;
1062 struct langwell_udc
*dev
;
1064 ep
= container_of(_ep
, struct langwell_ep
, ep
);
1067 VDBG(dev
, "---> %s()\n", __func__
);
1069 if (!_ep
|| !ep
->desc
)
1072 VDBG(dev
, "<--- %s()\n", __func__
);
1073 return usb_ep_set_halt(_ep
);
1077 /* flush contents of a fifo */
1078 static void langwell_ep_fifo_flush(struct usb_ep
*_ep
)
1080 struct langwell_ep
*ep
;
1081 struct langwell_udc
*dev
;
1083 unsigned long timeout
;
1085 ep
= container_of(_ep
, struct langwell_ep
, ep
);
1088 VDBG(dev
, "---> %s()\n", __func__
);
1090 if (!_ep
|| !ep
->desc
) {
1091 VDBG(dev
, "ep or ep->desc is NULL\n");
1092 VDBG(dev
, "<--- %s()\n", __func__
);
1096 VDBG(dev
, "%s-%s fifo flush\n", _ep
->name
, is_in(ep
) ? "in" : "out");
1098 /* flush endpoint buffer */
1099 if (ep
->ep_num
== 0)
1100 flush_bit
= (1 << 16) | 1;
1102 flush_bit
= 1 << (ep
->ep_num
+ 16); /* TX */
1104 flush_bit
= 1 << ep
->ep_num
; /* RX */
1106 /* wait until flush complete */
1107 timeout
= jiffies
+ FLUSH_TIMEOUT
;
1109 writel(flush_bit
, &dev
->op_regs
->endptflush
);
1110 while (readl(&dev
->op_regs
->endptflush
)) {
1111 if (time_after(jiffies
, timeout
)) {
1112 ERROR(dev
, "ep flush timeout\n");
1117 } while (readl(&dev
->op_regs
->endptstat
) & flush_bit
);
1119 VDBG(dev
, "<--- %s()\n", __func__
);
1123 /* endpoints operations structure */
1124 static const struct usb_ep_ops langwell_ep_ops
= {
1126 /* configure endpoint, making it usable */
1127 .enable
= langwell_ep_enable
,
1129 /* endpoint is no longer usable */
1130 .disable
= langwell_ep_disable
,
1132 /* allocate a request object to use with this endpoint */
1133 .alloc_request
= langwell_alloc_request
,
1135 /* free a request object */
1136 .free_request
= langwell_free_request
,
1138 /* queue (submits) an I/O requests to an endpoint */
1139 .queue
= langwell_ep_queue
,
1141 /* dequeue (cancels, unlinks) an I/O request from an endpoint */
1142 .dequeue
= langwell_ep_dequeue
,
1144 /* set the endpoint halt feature */
1145 .set_halt
= langwell_ep_set_halt
,
1147 /* set the halt feature and ignores clear requests */
1148 .set_wedge
= langwell_ep_set_wedge
,
1150 /* flush contents of a fifo */
1151 .fifo_flush
= langwell_ep_fifo_flush
,
1155 /*-------------------------------------------------------------------------*/
1157 /* device controller usb_gadget_ops structure */
1159 /* returns the current frame number */
1160 static int langwell_get_frame(struct usb_gadget
*_gadget
)
1162 struct langwell_udc
*dev
;
1168 dev
= container_of(_gadget
, struct langwell_udc
, gadget
);
1169 VDBG(dev
, "---> %s()\n", __func__
);
1171 retval
= readl(&dev
->op_regs
->frindex
) & FRINDEX_MASK
;
1173 VDBG(dev
, "<--- %s()\n", __func__
);
1178 /* tries to wake up the host connected to this gadget */
1179 static int langwell_wakeup(struct usb_gadget
*_gadget
)
1181 struct langwell_udc
*dev
;
1183 unsigned long flags
;
1188 dev
= container_of(_gadget
, struct langwell_udc
, gadget
);
1189 VDBG(dev
, "---> %s()\n", __func__
);
1191 /* Remote Wakeup feature not enabled by host */
1192 if (!dev
->remote_wakeup
)
1195 spin_lock_irqsave(&dev
->lock
, flags
);
1197 portsc1
= readl(&dev
->op_regs
->portsc1
);
1198 if (!(portsc1
& PORTS_SUSP
)) {
1199 spin_unlock_irqrestore(&dev
->lock
, flags
);
1203 /* LPM L1 to L0, remote wakeup */
1204 if (dev
->lpm
&& dev
->lpm_state
== LPM_L1
) {
1205 portsc1
|= PORTS_SLP
;
1206 writel(portsc1
, &dev
->op_regs
->portsc1
);
1209 /* force port resume */
1210 if (dev
->usb_state
== USB_STATE_SUSPENDED
) {
1211 portsc1
|= PORTS_FPR
;
1212 writel(portsc1
, &dev
->op_regs
->portsc1
);
1215 /* exit PHY low power suspend */
1216 devlc
= readl(&dev
->op_regs
->devlc
);
1217 VDBG(dev
, "devlc = 0x%08x\n", devlc
);
1219 writel(devlc
, &dev
->op_regs
->devlc
);
1221 spin_unlock_irqrestore(&dev
->lock
, flags
);
1223 VDBG(dev
, "<--- %s()\n", __func__
);
1228 /* notify controller that VBUS is powered or not */
1229 static int langwell_vbus_session(struct usb_gadget
*_gadget
, int is_active
)
1231 struct langwell_udc
*dev
;
1232 unsigned long flags
;
1238 dev
= container_of(_gadget
, struct langwell_udc
, gadget
);
1239 VDBG(dev
, "---> %s()\n", __func__
);
1241 spin_lock_irqsave(&dev
->lock
, flags
);
1242 VDBG(dev
, "VBUS status: %s\n", is_active
? "on" : "off");
1244 dev
->vbus_active
= (is_active
!= 0);
1245 if (dev
->driver
&& dev
->softconnected
&& dev
->vbus_active
) {
1246 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1247 usbcmd
|= CMD_RUNSTOP
;
1248 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1250 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1251 usbcmd
&= ~CMD_RUNSTOP
;
1252 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1255 spin_unlock_irqrestore(&dev
->lock
, flags
);
1257 VDBG(dev
, "<--- %s()\n", __func__
);
1262 /* constrain controller's VBUS power usage */
1263 static int langwell_vbus_draw(struct usb_gadget
*_gadget
, unsigned mA
)
1265 struct langwell_udc
*dev
;
1270 dev
= container_of(_gadget
, struct langwell_udc
, gadget
);
1271 VDBG(dev
, "---> %s()\n", __func__
);
1273 if (dev
->transceiver
) {
1274 VDBG(dev
, "otg_set_power\n");
1275 VDBG(dev
, "<--- %s()\n", __func__
);
1276 return otg_set_power(dev
->transceiver
, mA
);
1279 VDBG(dev
, "<--- %s()\n", __func__
);
1284 /* D+ pullup, software-controlled connect/disconnect to USB host */
1285 static int langwell_pullup(struct usb_gadget
*_gadget
, int is_on
)
1287 struct langwell_udc
*dev
;
1289 unsigned long flags
;
1294 dev
= container_of(_gadget
, struct langwell_udc
, gadget
);
1296 VDBG(dev
, "---> %s()\n", __func__
);
1298 spin_lock_irqsave(&dev
->lock
, flags
);
1299 dev
->softconnected
= (is_on
!= 0);
1301 if (dev
->driver
&& dev
->softconnected
&& dev
->vbus_active
) {
1302 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1303 usbcmd
|= CMD_RUNSTOP
;
1304 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1306 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1307 usbcmd
&= ~CMD_RUNSTOP
;
1308 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1310 spin_unlock_irqrestore(&dev
->lock
, flags
);
1312 VDBG(dev
, "<--- %s()\n", __func__
);
1317 /* device controller usb_gadget_ops structure */
1318 static const struct usb_gadget_ops langwell_ops
= {
1320 /* returns the current frame number */
1321 .get_frame
= langwell_get_frame
,
1323 /* tries to wake up the host connected to this gadget */
1324 .wakeup
= langwell_wakeup
,
1326 /* set the device selfpowered feature, always selfpowered */
1327 /* .set_selfpowered = langwell_set_selfpowered, */
1329 /* notify controller that VBUS is powered or not */
1330 .vbus_session
= langwell_vbus_session
,
1332 /* constrain controller's VBUS power usage */
1333 .vbus_draw
= langwell_vbus_draw
,
1335 /* D+ pullup, software-controlled connect/disconnect to USB host */
1336 .pullup
= langwell_pullup
,
1340 /*-------------------------------------------------------------------------*/
1342 /* device controller operations */
1344 /* reset device controller */
1345 static int langwell_udc_reset(struct langwell_udc
*dev
)
1347 u32 usbcmd
, usbmode
, devlc
, endpointlistaddr
;
1348 unsigned long timeout
;
1353 DBG(dev
, "---> %s()\n", __func__
);
1355 /* set controller to stop state */
1356 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1357 usbcmd
&= ~CMD_RUNSTOP
;
1358 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1360 /* reset device controller */
1361 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1363 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1365 /* wait for reset to complete */
1366 timeout
= jiffies
+ RESET_TIMEOUT
;
1367 while (readl(&dev
->op_regs
->usbcmd
) & CMD_RST
) {
1368 if (time_after(jiffies
, timeout
)) {
1369 ERROR(dev
, "device reset timeout\n");
1375 /* set controller to device mode */
1376 usbmode
= readl(&dev
->op_regs
->usbmode
);
1377 usbmode
|= MODE_DEVICE
;
1379 /* turn setup lockout off, require setup tripwire in usbcmd */
1380 usbmode
|= MODE_SLOM
;
1382 writel(usbmode
, &dev
->op_regs
->usbmode
);
1383 usbmode
= readl(&dev
->op_regs
->usbmode
);
1384 VDBG(dev
, "usbmode=0x%08x\n", usbmode
);
1386 /* Write-Clear setup status */
1387 writel(0, &dev
->op_regs
->usbsts
);
1389 /* if support USB LPM, ACK all LPM token */
1391 devlc
= readl(&dev
->op_regs
->devlc
);
1392 devlc
&= ~LPM_STL
; /* don't STALL LPM token */
1393 devlc
&= ~LPM_NYT_ACK
; /* ACK LPM token */
1394 writel(devlc
, &dev
->op_regs
->devlc
);
1397 /* fill endpointlistaddr register */
1398 endpointlistaddr
= dev
->ep_dqh_dma
;
1399 endpointlistaddr
&= ENDPOINTLISTADDR_MASK
;
1400 writel(endpointlistaddr
, &dev
->op_regs
->endpointlistaddr
);
1402 VDBG(dev
, "dQH base (vir: %p, phy: 0x%08x), endpointlistaddr=0x%08x\n",
1403 dev
->ep_dqh
, endpointlistaddr
,
1404 readl(&dev
->op_regs
->endpointlistaddr
));
1405 DBG(dev
, "<--- %s()\n", __func__
);
1410 /* reinitialize device controller endpoints */
1411 static int eps_reinit(struct langwell_udc
*dev
)
1413 struct langwell_ep
*ep
;
1417 VDBG(dev
, "---> %s()\n", __func__
);
1419 /* initialize ep0 */
1422 strncpy(ep
->name
, "ep0", sizeof(ep
->name
));
1423 ep
->ep
.name
= ep
->name
;
1424 ep
->ep
.ops
= &langwell_ep_ops
;
1426 ep
->ep
.maxpacket
= EP0_MAX_PKT_SIZE
;
1428 ep
->desc
= &langwell_ep0_desc
;
1429 INIT_LIST_HEAD(&ep
->queue
);
1431 ep
->ep_type
= USB_ENDPOINT_XFER_CONTROL
;
1433 /* initialize other endpoints */
1434 for (i
= 2; i
< dev
->ep_max
; i
++) {
1437 snprintf(name
, sizeof(name
), "ep%din", i
/ 2);
1439 snprintf(name
, sizeof(name
), "ep%dout", i
/ 2);
1441 strncpy(ep
->name
, name
, sizeof(ep
->name
));
1442 ep
->ep
.name
= ep
->name
;
1444 ep
->ep
.ops
= &langwell_ep_ops
;
1446 ep
->ep
.maxpacket
= (unsigned short) ~0;
1449 INIT_LIST_HEAD(&ep
->queue
);
1450 list_add_tail(&ep
->ep
.ep_list
, &dev
->gadget
.ep_list
);
1452 ep
->dqh
= &dev
->ep_dqh
[i
];
1455 VDBG(dev
, "<--- %s()\n", __func__
);
1460 /* enable interrupt and set controller to run state */
1461 static void langwell_udc_start(struct langwell_udc
*dev
)
1463 u32 usbintr
, usbcmd
;
1464 DBG(dev
, "---> %s()\n", __func__
);
1466 /* enable interrupts */
1467 usbintr
= INTR_ULPIE
/* ULPI */
1468 | INTR_SLE
/* suspend */
1469 /* | INTR_SRE SOF received */
1470 | INTR_URE
/* USB reset */
1471 | INTR_AAE
/* async advance */
1472 | INTR_SEE
/* system error */
1473 | INTR_FRE
/* frame list rollover */
1474 | INTR_PCE
/* port change detect */
1475 | INTR_UEE
/* USB error interrupt */
1476 | INTR_UE
; /* USB interrupt */
1477 writel(usbintr
, &dev
->op_regs
->usbintr
);
1479 /* clear stopped bit */
1482 /* set controller to run */
1483 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1484 usbcmd
|= CMD_RUNSTOP
;
1485 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1487 DBG(dev
, "<--- %s()\n", __func__
);
1491 /* disable interrupt and set controller to stop state */
1492 static void langwell_udc_stop(struct langwell_udc
*dev
)
1496 DBG(dev
, "---> %s()\n", __func__
);
1498 /* disable all interrupts */
1499 writel(0, &dev
->op_regs
->usbintr
);
1501 /* set stopped bit */
1504 /* set controller to stop state */
1505 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1506 usbcmd
&= ~CMD_RUNSTOP
;
1507 writel(usbcmd
, &dev
->op_regs
->usbcmd
);
1509 DBG(dev
, "<--- %s()\n", __func__
);
1513 /* stop all USB activities */
1514 static void stop_activity(struct langwell_udc
*dev
,
1515 struct usb_gadget_driver
*driver
)
1517 struct langwell_ep
*ep
;
1518 DBG(dev
, "---> %s()\n", __func__
);
1520 nuke(&dev
->ep
[0], -ESHUTDOWN
);
1522 list_for_each_entry(ep
, &dev
->gadget
.ep_list
, ep
.ep_list
) {
1523 nuke(ep
, -ESHUTDOWN
);
1526 /* report disconnect; the driver is already quiesced */
1528 spin_unlock(&dev
->lock
);
1529 driver
->disconnect(&dev
->gadget
);
1530 spin_lock(&dev
->lock
);
1533 DBG(dev
, "<--- %s()\n", __func__
);
1537 /*-------------------------------------------------------------------------*/
1539 /* device "function" sysfs attribute file */
1540 static ssize_t
show_function(struct device
*_dev
,
1541 struct device_attribute
*attr
, char *buf
)
1543 struct langwell_udc
*dev
= the_controller
;
1545 if (!dev
->driver
|| !dev
->driver
->function
1546 || strlen(dev
->driver
->function
) > PAGE_SIZE
)
1549 return scnprintf(buf
, PAGE_SIZE
, "%s\n", dev
->driver
->function
);
1551 static DEVICE_ATTR(function
, S_IRUGO
, show_function
, NULL
);
1554 /* device "langwell_udc" sysfs attribute file */
1555 static ssize_t
show_langwell_udc(struct device
*_dev
,
1556 struct device_attribute
*attr
, char *buf
)
1558 struct langwell_udc
*dev
= the_controller
;
1559 struct langwell_request
*req
;
1560 struct langwell_ep
*ep
= NULL
;
1565 unsigned long flags
;
1570 spin_lock_irqsave(&dev
->lock
, flags
);
1572 /* driver basic information */
1573 t
= scnprintf(next
, size
,
1576 "Gadget driver: %s\n\n",
1577 driver_name
, DRIVER_VERSION
,
1578 dev
->driver
? dev
->driver
->driver
.name
: "(none)");
1582 /* device registers */
1583 tmp_reg
= readl(&dev
->op_regs
->usbcmd
);
1584 t
= scnprintf(next
, size
,
1588 (tmp_reg
& CMD_SUTW
) ? 1 : 0,
1589 (tmp_reg
& CMD_RUNSTOP
) ? "Run" : "Stop");
1593 tmp_reg
= readl(&dev
->op_regs
->usbsts
);
1594 t
= scnprintf(next
, size
,
1596 "Device Suspend: %d\n"
1597 "Reset Received: %d\n"
1598 "System Error: %s\n"
1599 "USB Error Interrupt: %s\n\n",
1600 (tmp_reg
& STS_SLI
) ? 1 : 0,
1601 (tmp_reg
& STS_URI
) ? 1 : 0,
1602 (tmp_reg
& STS_SEI
) ? "Error" : "No error",
1603 (tmp_reg
& STS_UEI
) ? "Error detected" : "No error");
1607 tmp_reg
= readl(&dev
->op_regs
->usbintr
);
1608 t
= scnprintf(next
, size
,
1609 "USB Intrrupt Enable Reg:\n"
1610 "Sleep Enable: %d\n"
1611 "SOF Received Enable: %d\n"
1612 "Reset Enable: %d\n"
1613 "System Error Enable: %d\n"
1614 "Port Change Dectected Enable: %d\n"
1615 "USB Error Intr Enable: %d\n"
1616 "USB Intr Enable: %d\n\n",
1617 (tmp_reg
& INTR_SLE
) ? 1 : 0,
1618 (tmp_reg
& INTR_SRE
) ? 1 : 0,
1619 (tmp_reg
& INTR_URE
) ? 1 : 0,
1620 (tmp_reg
& INTR_SEE
) ? 1 : 0,
1621 (tmp_reg
& INTR_PCE
) ? 1 : 0,
1622 (tmp_reg
& INTR_UEE
) ? 1 : 0,
1623 (tmp_reg
& INTR_UE
) ? 1 : 0);
1627 tmp_reg
= readl(&dev
->op_regs
->frindex
);
1628 t
= scnprintf(next
, size
,
1629 "USB Frame Index Reg:\n"
1630 "Frame Number is 0x%08x\n\n",
1631 (tmp_reg
& FRINDEX_MASK
));
1635 tmp_reg
= readl(&dev
->op_regs
->deviceaddr
);
1636 t
= scnprintf(next
, size
,
1637 "USB Device Address Reg:\n"
1638 "Device Addr is 0x%x\n\n",
1643 tmp_reg
= readl(&dev
->op_regs
->endpointlistaddr
);
1644 t
= scnprintf(next
, size
,
1645 "USB Endpoint List Address Reg:\n"
1646 "Endpoint List Pointer is 0x%x\n\n",
1651 tmp_reg
= readl(&dev
->op_regs
->portsc1
);
1652 t
= scnprintf(next
, size
,
1653 "USB Port Status & Control Reg:\n"
1655 "Port Suspend Mode: %s\n"
1656 "Over-current Change: %s\n"
1657 "Port Enable/Disable Change: %s\n"
1658 "Port Enabled/Disabled: %s\n"
1659 "Current Connect Status: %s\n\n",
1660 (tmp_reg
& PORTS_PR
) ? "Reset" : "Not Reset",
1661 (tmp_reg
& PORTS_SUSP
) ? "Suspend " : "Not Suspend",
1662 (tmp_reg
& PORTS_OCC
) ? "Detected" : "No",
1663 (tmp_reg
& PORTS_PEC
) ? "Changed" : "Not Changed",
1664 (tmp_reg
& PORTS_PE
) ? "Enable" : "Not Correct",
1665 (tmp_reg
& PORTS_CCS
) ? "Attached" : "Not Attached");
1669 tmp_reg
= readl(&dev
->op_regs
->devlc
);
1670 t
= scnprintf(next
, size
,
1671 "Device LPM Control Reg:\n"
1672 "Parallel Transceiver : %d\n"
1673 "Serial Transceiver : %d\n"
1675 "Port Force Full Speed Connenct: %s\n"
1676 "PHY Low Power Suspend Clock Disable: %s\n"
1677 "BmAttributes: %d\n\n",
1679 (tmp_reg
& LPM_STS
) ? 1 : 0,
1682 switch (LPM_PSPD(tmp_reg
)) {
1683 case LPM_SPEED_FULL
:
1684 s
= "Full Speed"; break;
1686 s
= "Low Speed"; break;
1687 case LPM_SPEED_HIGH
:
1688 s
= "High Speed"; break;
1690 s
= "Unknown Speed"; break;
1694 (tmp_reg
& LPM_PFSC
) ? "Force Full Speed" : "Not Force",
1695 (tmp_reg
& LPM_PHCD
) ? "Disabled" : "Enabled",
1700 tmp_reg
= readl(&dev
->op_regs
->usbmode
);
1701 t
= scnprintf(next
, size
,
1703 "Controller Mode is : %s\n\n", ({
1705 switch (MODE_CM(tmp_reg
)) {
1709 s
= "Device Controller"; break;
1711 s
= "Host Controller"; break;
1720 tmp_reg
= readl(&dev
->op_regs
->endptsetupstat
);
1721 t
= scnprintf(next
, size
,
1722 "Endpoint Setup Status Reg:\n"
1723 "SETUP on ep 0x%04x\n\n",
1724 tmp_reg
& SETUPSTAT_MASK
);
1728 for (i
= 0; i
< dev
->ep_max
/ 2; i
++) {
1729 tmp_reg
= readl(&dev
->op_regs
->endptctrl
[i
]);
1730 t
= scnprintf(next
, size
, "EP Ctrl Reg [%d]: 0x%08x\n",
1735 tmp_reg
= readl(&dev
->op_regs
->endptprime
);
1736 t
= scnprintf(next
, size
, "EP Prime Reg: 0x%08x\n\n", tmp_reg
);
1740 /* langwell_udc, langwell_ep, langwell_request structure information */
1742 t
= scnprintf(next
, size
, "%s MaxPacketSize: 0x%x, ep_num: %d\n",
1743 ep
->ep
.name
, ep
->ep
.maxpacket
, ep
->ep_num
);
1747 if (list_empty(&ep
->queue
)) {
1748 t
= scnprintf(next
, size
, "its req queue is empty\n\n");
1752 list_for_each_entry(req
, &ep
->queue
, queue
) {
1753 t
= scnprintf(next
, size
,
1754 "req %p actual 0x%x length 0x%x buf %p\n",
1755 &req
->req
, req
->req
.actual
,
1756 req
->req
.length
, req
->req
.buf
);
1761 /* other gadget->eplist ep */
1762 list_for_each_entry(ep
, &dev
->gadget
.ep_list
, ep
.ep_list
) {
1764 t
= scnprintf(next
, size
,
1765 "\n%s MaxPacketSize: 0x%x, "
1767 ep
->ep
.name
, ep
->ep
.maxpacket
,
1772 if (list_empty(&ep
->queue
)) {
1773 t
= scnprintf(next
, size
,
1774 "its req queue is empty\n\n");
1778 list_for_each_entry(req
, &ep
->queue
, queue
) {
1779 t
= scnprintf(next
, size
,
1780 "req %p actual 0x%x length "
1782 &req
->req
, req
->req
.actual
,
1783 req
->req
.length
, req
->req
.buf
);
1791 spin_unlock_irqrestore(&dev
->lock
, flags
);
1792 return PAGE_SIZE
- size
;
1794 static DEVICE_ATTR(langwell_udc
, S_IRUGO
, show_langwell_udc
, NULL
);
1797 /*-------------------------------------------------------------------------*/
1800 * when a driver is successfully registered, it will receive
1801 * control requests including set_configuration(), which enables
1802 * non-control requests. then usb traffic follows until a
1803 * disconnect is reported. then a host may connect again, or
1804 * the driver might get unbound.
1807 int usb_gadget_register_driver(struct usb_gadget_driver
*driver
)
1809 struct langwell_udc
*dev
= the_controller
;
1810 unsigned long flags
;
1816 DBG(dev
, "---> %s()\n", __func__
);
1821 spin_lock_irqsave(&dev
->lock
, flags
);
1823 /* hook up the driver ... */
1824 driver
->driver
.bus
= NULL
;
1825 dev
->driver
= driver
;
1826 dev
->gadget
.dev
.driver
= &driver
->driver
;
1828 spin_unlock_irqrestore(&dev
->lock
, flags
);
1830 retval
= driver
->bind(&dev
->gadget
);
1832 DBG(dev
, "bind to driver %s --> %d\n",
1833 driver
->driver
.name
, retval
);
1835 dev
->gadget
.dev
.driver
= NULL
;
1839 retval
= device_create_file(&dev
->pdev
->dev
, &dev_attr_function
);
1843 dev
->usb_state
= USB_STATE_ATTACHED
;
1844 dev
->ep0_state
= WAIT_FOR_SETUP
;
1845 dev
->ep0_dir
= USB_DIR_OUT
;
1847 /* enable interrupt and set controller to run state */
1849 langwell_udc_start(dev
);
1851 VDBG(dev
, "After langwell_udc_start(), print all registers:\n");
1853 print_all_registers(dev
);
1856 INFO(dev
, "register driver: %s\n", driver
->driver
.name
);
1857 VDBG(dev
, "<--- %s()\n", __func__
);
1861 driver
->unbind(&dev
->gadget
);
1862 dev
->gadget
.dev
.driver
= NULL
;
1865 DBG(dev
, "<--- %s()\n", __func__
);
1868 EXPORT_SYMBOL(usb_gadget_register_driver
);
1871 /* unregister gadget driver */
1872 int usb_gadget_unregister_driver(struct usb_gadget_driver
*driver
)
1874 struct langwell_udc
*dev
= the_controller
;
1875 unsigned long flags
;
1880 DBG(dev
, "---> %s()\n", __func__
);
1882 if (unlikely(!driver
|| !driver
->bind
|| !driver
->unbind
))
1885 /* unbind OTG transceiver */
1886 if (dev
->transceiver
)
1887 (void)otg_set_peripheral(dev
->transceiver
, 0);
1889 /* disable interrupt and set controller to stop state */
1890 langwell_udc_stop(dev
);
1892 dev
->usb_state
= USB_STATE_ATTACHED
;
1893 dev
->ep0_state
= WAIT_FOR_SETUP
;
1894 dev
->ep0_dir
= USB_DIR_OUT
;
1896 spin_lock_irqsave(&dev
->lock
, flags
);
1898 /* stop all usb activities */
1899 dev
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1900 stop_activity(dev
, driver
);
1901 spin_unlock_irqrestore(&dev
->lock
, flags
);
1903 /* unbind gadget driver */
1904 driver
->unbind(&dev
->gadget
);
1905 dev
->gadget
.dev
.driver
= NULL
;
1908 device_remove_file(&dev
->pdev
->dev
, &dev_attr_function
);
1910 INFO(dev
, "unregistered driver '%s'\n", driver
->driver
.name
);
1911 DBG(dev
, "<--- %s()\n", __func__
);
1914 EXPORT_SYMBOL(usb_gadget_unregister_driver
);
1917 /*-------------------------------------------------------------------------*/
1920 * setup tripwire is used as a semaphore to ensure that the setup data
1921 * payload is extracted from a dQH without being corrupted
1923 static void setup_tripwire(struct langwell_udc
*dev
)
1927 unsigned long timeout
;
1928 struct langwell_dqh
*dqh
;
1930 VDBG(dev
, "---> %s()\n", __func__
);
1933 dqh
= &dev
->ep_dqh
[EP_DIR_OUT
];
1935 /* Write-Clear endptsetupstat */
1936 endptsetupstat
= readl(&dev
->op_regs
->endptsetupstat
);
1937 writel(endptsetupstat
, &dev
->op_regs
->endptsetupstat
);
1939 /* wait until endptsetupstat is cleared */
1940 timeout
= jiffies
+ SETUPSTAT_TIMEOUT
;
1941 while (readl(&dev
->op_regs
->endptsetupstat
)) {
1942 if (time_after(jiffies
, timeout
)) {
1943 ERROR(dev
, "setup_tripwire timeout\n");
1949 /* while a hazard exists when setup packet arrives */
1951 /* set setup tripwire bit */
1952 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1953 writel(usbcmd
| CMD_SUTW
, &dev
->op_regs
->usbcmd
);
1955 /* copy the setup packet to local buffer */
1956 memcpy(&dev
->local_setup_buff
, &dqh
->dqh_setup
, 8);
1957 } while (!(readl(&dev
->op_regs
->usbcmd
) & CMD_SUTW
));
1959 /* Write-Clear setup tripwire bit */
1960 usbcmd
= readl(&dev
->op_regs
->usbcmd
);
1961 writel(usbcmd
& ~CMD_SUTW
, &dev
->op_regs
->usbcmd
);
1963 VDBG(dev
, "<--- %s()\n", __func__
);
1967 /* protocol ep0 stall, will automatically be cleared on new transaction */
1968 static void ep0_stall(struct langwell_udc
*dev
)
1972 VDBG(dev
, "---> %s()\n", __func__
);
1974 /* set TX and RX to stall */
1975 endptctrl
= readl(&dev
->op_regs
->endptctrl
[0]);
1976 endptctrl
|= EPCTRL_TXS
| EPCTRL_RXS
;
1977 writel(endptctrl
, &dev
->op_regs
->endptctrl
[0]);
1979 /* update ep0 state */
1980 dev
->ep0_state
= WAIT_FOR_SETUP
;
1981 dev
->ep0_dir
= USB_DIR_OUT
;
1983 VDBG(dev
, "<--- %s()\n", __func__
);
1987 /* PRIME a status phase for ep0 */
1988 static int prime_status_phase(struct langwell_udc
*dev
, int dir
)
1990 struct langwell_request
*req
;
1991 struct langwell_ep
*ep
;
1994 VDBG(dev
, "---> %s()\n", __func__
);
1996 if (dir
== EP_DIR_IN
)
1997 dev
->ep0_dir
= USB_DIR_IN
;
1999 dev
->ep0_dir
= USB_DIR_OUT
;
2002 dev
->ep0_state
= WAIT_FOR_OUT_STATUS
;
2004 req
= dev
->status_req
;
2007 req
->req
.length
= 0;
2008 req
->req
.status
= -EINPROGRESS
;
2009 req
->req
.actual
= 0;
2010 req
->req
.complete
= NULL
;
2013 if (!req_to_dtd(req
))
2014 status
= queue_dtd(ep
, req
);
2019 ERROR(dev
, "can't queue ep0 status request\n");
2021 list_add_tail(&req
->queue
, &ep
->queue
);
2023 VDBG(dev
, "<--- %s()\n", __func__
);
2028 /* SET_ADDRESS request routine */
2029 static void set_address(struct langwell_udc
*dev
, u16 value
,
2030 u16 index
, u16 length
)
2032 VDBG(dev
, "---> %s()\n", __func__
);
2034 /* save the new address to device struct */
2035 dev
->dev_addr
= (u8
) value
;
2036 VDBG(dev
, "dev->dev_addr = %d\n", dev
->dev_addr
);
2038 /* update usb state */
2039 dev
->usb_state
= USB_STATE_ADDRESS
;
2042 if (prime_status_phase(dev
, EP_DIR_IN
))
2045 VDBG(dev
, "<--- %s()\n", __func__
);
2049 /* return endpoint by windex */
2050 static struct langwell_ep
*get_ep_by_windex(struct langwell_udc
*dev
,
2053 struct langwell_ep
*ep
;
2054 VDBG(dev
, "---> %s()\n", __func__
);
2056 if ((wIndex
& USB_ENDPOINT_NUMBER_MASK
) == 0)
2059 list_for_each_entry(ep
, &dev
->gadget
.ep_list
, ep
.ep_list
) {
2060 u8 bEndpointAddress
;
2064 bEndpointAddress
= ep
->desc
->bEndpointAddress
;
2065 if ((wIndex
^ bEndpointAddress
) & USB_DIR_IN
)
2068 if ((wIndex
& USB_ENDPOINT_NUMBER_MASK
)
2069 == (bEndpointAddress
& USB_ENDPOINT_NUMBER_MASK
))
2073 VDBG(dev
, "<--- %s()\n", __func__
);
2078 /* return whether endpoint is stalled, 0: not stalled; 1: stalled */
2079 static int ep_is_stall(struct langwell_ep
*ep
)
2081 struct langwell_udc
*dev
= ep
->dev
;
2085 VDBG(dev
, "---> %s()\n", __func__
);
2087 endptctrl
= readl(&dev
->op_regs
->endptctrl
[ep
->ep_num
]);
2089 retval
= endptctrl
& EPCTRL_TXS
? 1 : 0;
2091 retval
= endptctrl
& EPCTRL_RXS
? 1 : 0;
2093 VDBG(dev
, "<--- %s()\n", __func__
);
2098 /* GET_STATUS request routine */
2099 static void get_status(struct langwell_udc
*dev
, u8 request_type
, u16 value
,
2100 u16 index
, u16 length
)
2102 struct langwell_request
*req
;
2103 struct langwell_ep
*ep
;
2104 u16 status_data
= 0; /* 16 bits cpu view status data */
2107 VDBG(dev
, "---> %s()\n", __func__
);
2111 if ((request_type
& USB_RECIP_MASK
) == USB_RECIP_DEVICE
) {
2112 /* get device status */
2113 status_data
= 1 << USB_DEVICE_SELF_POWERED
;
2114 status_data
|= dev
->remote_wakeup
<< USB_DEVICE_REMOTE_WAKEUP
;
2115 } else if ((request_type
& USB_RECIP_MASK
) == USB_RECIP_INTERFACE
) {
2116 /* get interface status */
2118 } else if ((request_type
& USB_RECIP_MASK
) == USB_RECIP_ENDPOINT
) {
2119 /* get endpoint status */
2120 struct langwell_ep
*epn
;
2121 epn
= get_ep_by_windex(dev
, index
);
2122 /* stall if endpoint doesn't exist */
2126 status_data
= ep_is_stall(epn
) << USB_ENDPOINT_HALT
;
2129 dev
->ep0_dir
= USB_DIR_IN
;
2131 /* borrow the per device status_req */
2132 req
= dev
->status_req
;
2134 /* fill in the reqest structure */
2135 *((u16
*) req
->req
.buf
) = cpu_to_le16(status_data
);
2137 req
->req
.length
= 2;
2138 req
->req
.status
= -EINPROGRESS
;
2139 req
->req
.actual
= 0;
2140 req
->req
.complete
= NULL
;
2143 /* prime the data phase */
2144 if (!req_to_dtd(req
))
2145 status
= queue_dtd(ep
, req
);
2150 ERROR(dev
, "response error on GET_STATUS request\n");
2154 list_add_tail(&req
->queue
, &ep
->queue
);
2155 dev
->ep0_state
= DATA_STATE_XMIT
;
2157 VDBG(dev
, "<--- %s()\n", __func__
);
2161 VDBG(dev
, "<--- %s()\n", __func__
);
2165 /* setup packet interrupt handler */
2166 static void handle_setup_packet(struct langwell_udc
*dev
,
2167 struct usb_ctrlrequest
*setup
)
2169 u16 wValue
= le16_to_cpu(setup
->wValue
);
2170 u16 wIndex
= le16_to_cpu(setup
->wIndex
);
2171 u16 wLength
= le16_to_cpu(setup
->wLength
);
2173 VDBG(dev
, "---> %s()\n", __func__
);
2175 /* ep0 fifo flush */
2176 nuke(&dev
->ep
[0], -ESHUTDOWN
);
2178 DBG(dev
, "SETUP %02x.%02x v%04x i%04x l%04x\n",
2179 setup
->bRequestType
, setup
->bRequest
,
2180 wValue
, wIndex
, wLength
);
2182 /* RNDIS gadget delegate */
2183 if ((setup
->bRequestType
== 0x21) && (setup
->bRequest
== 0x00)) {
2184 /* USB_CDC_SEND_ENCAPSULATED_COMMAND */
2188 /* USB_CDC_GET_ENCAPSULATED_RESPONSE */
2189 if ((setup
->bRequestType
== 0xa1) && (setup
->bRequest
== 0x01)) {
2190 /* USB_CDC_GET_ENCAPSULATED_RESPONSE */
2194 /* We process some stardard setup requests here */
2195 switch (setup
->bRequest
) {
2196 case USB_REQ_GET_STATUS
:
2197 DBG(dev
, "SETUP: USB_REQ_GET_STATUS\n");
2198 /* get status, DATA and STATUS phase */
2199 if ((setup
->bRequestType
& (USB_DIR_IN
| USB_TYPE_MASK
))
2200 != (USB_DIR_IN
| USB_TYPE_STANDARD
))
2202 get_status(dev
, setup
->bRequestType
, wValue
, wIndex
, wLength
);
2205 case USB_REQ_SET_ADDRESS
:
2206 DBG(dev
, "SETUP: USB_REQ_SET_ADDRESS\n");
2208 if (setup
->bRequestType
!= (USB_DIR_OUT
| USB_TYPE_STANDARD
2209 | USB_RECIP_DEVICE
))
2211 set_address(dev
, wValue
, wIndex
, wLength
);
2214 case USB_REQ_CLEAR_FEATURE
:
2215 case USB_REQ_SET_FEATURE
:
2218 int rc
= -EOPNOTSUPP
;
2219 if (setup
->bRequest
== USB_REQ_SET_FEATURE
)
2220 DBG(dev
, "SETUP: USB_REQ_SET_FEATURE\n");
2221 else if (setup
->bRequest
== USB_REQ_CLEAR_FEATURE
)
2222 DBG(dev
, "SETUP: USB_REQ_CLEAR_FEATURE\n");
2224 if ((setup
->bRequestType
& (USB_RECIP_MASK
| USB_TYPE_MASK
))
2225 == (USB_RECIP_ENDPOINT
| USB_TYPE_STANDARD
)) {
2226 struct langwell_ep
*epn
;
2227 epn
= get_ep_by_windex(dev
, wIndex
);
2228 /* stall if endpoint doesn't exist */
2234 if (wValue
!= 0 || wLength
!= 0
2235 || epn
->ep_num
> dev
->ep_max
)
2238 spin_unlock(&dev
->lock
);
2239 rc
= langwell_ep_set_halt(&epn
->ep
,
2240 (setup
->bRequest
== USB_REQ_SET_FEATURE
)
2242 spin_lock(&dev
->lock
);
2244 } else if ((setup
->bRequestType
& (USB_RECIP_MASK
2245 | USB_TYPE_MASK
)) == (USB_RECIP_DEVICE
2246 | USB_TYPE_STANDARD
)) {
2247 if (!gadget_is_otg(&dev
->gadget
))
2249 else if (setup
->bRequest
== USB_DEVICE_B_HNP_ENABLE
) {
2250 dev
->gadget
.b_hnp_enable
= 1;
2251 #ifdef OTG_TRANSCEIVER
2252 if (!dev
->lotg
->otg
.default_a
)
2253 dev
->lotg
->hsm
.b_hnp_enable
= 1;
2255 } else if (setup
->bRequest
== USB_DEVICE_A_HNP_SUPPORT
)
2256 dev
->gadget
.a_hnp_support
= 1;
2257 else if (setup
->bRequest
==
2258 USB_DEVICE_A_ALT_HNP_SUPPORT
)
2259 dev
->gadget
.a_alt_hnp_support
= 1;
2267 if (prime_status_phase(dev
, EP_DIR_IN
))
2273 case USB_REQ_GET_DESCRIPTOR
:
2274 DBG(dev
, "SETUP: USB_REQ_GET_DESCRIPTOR\n");
2277 case USB_REQ_SET_DESCRIPTOR
:
2278 DBG(dev
, "SETUP: USB_REQ_SET_DESCRIPTOR unsupported\n");
2281 case USB_REQ_GET_CONFIGURATION
:
2282 DBG(dev
, "SETUP: USB_REQ_GET_CONFIGURATION\n");
2285 case USB_REQ_SET_CONFIGURATION
:
2286 DBG(dev
, "SETUP: USB_REQ_SET_CONFIGURATION\n");
2289 case USB_REQ_GET_INTERFACE
:
2290 DBG(dev
, "SETUP: USB_REQ_GET_INTERFACE\n");
2293 case USB_REQ_SET_INTERFACE
:
2294 DBG(dev
, "SETUP: USB_REQ_SET_INTERFACE\n");
2297 case USB_REQ_SYNCH_FRAME
:
2298 DBG(dev
, "SETUP: USB_REQ_SYNCH_FRAME unsupported\n");
2302 /* delegate USB standard requests to the gadget driver */
2305 /* USB requests handled by gadget */
2307 /* DATA phase from gadget, STATUS phase from udc */
2308 dev
->ep0_dir
= (setup
->bRequestType
& USB_DIR_IN
)
2309 ? USB_DIR_IN
: USB_DIR_OUT
;
2310 VDBG(dev
, "dev->ep0_dir = 0x%x, wLength = %d\n",
2311 dev
->ep0_dir
, wLength
);
2312 spin_unlock(&dev
->lock
);
2313 if (dev
->driver
->setup(&dev
->gadget
,
2314 &dev
->local_setup_buff
) < 0)
2316 spin_lock(&dev
->lock
);
2317 dev
->ep0_state
= (setup
->bRequestType
& USB_DIR_IN
)
2318 ? DATA_STATE_XMIT
: DATA_STATE_RECV
;
2320 /* no DATA phase, IN STATUS phase from gadget */
2321 dev
->ep0_dir
= USB_DIR_IN
;
2322 VDBG(dev
, "dev->ep0_dir = 0x%x, wLength = %d\n",
2323 dev
->ep0_dir
, wLength
);
2324 spin_unlock(&dev
->lock
);
2325 if (dev
->driver
->setup(&dev
->gadget
,
2326 &dev
->local_setup_buff
) < 0)
2328 spin_lock(&dev
->lock
);
2329 dev
->ep0_state
= WAIT_FOR_OUT_STATUS
;
2334 VDBG(dev
, "<--- %s()\n", __func__
);
2339 /* transfer completion, process endpoint request and free the completed dTDs
2342 static int process_ep_req(struct langwell_udc
*dev
, int index
,
2343 struct langwell_request
*curr_req
)
2345 struct langwell_dtd
*curr_dtd
;
2346 struct langwell_dqh
*curr_dqh
;
2347 int td_complete
, actual
, remaining_length
;
2352 curr_dqh
= &dev
->ep_dqh
[index
];
2355 curr_dtd
= curr_req
->head
;
2357 actual
= curr_req
->req
.length
;
2359 VDBG(dev
, "---> %s()\n", __func__
);
2361 for (i
= 0; i
< curr_req
->dtd_count
; i
++) {
2362 remaining_length
= le16_to_cpu(curr_dtd
->dtd_total
);
2363 actual
-= remaining_length
;
2365 /* command execution states by dTD */
2366 dtd_status
= curr_dtd
->dtd_status
;
2369 /* transfers completed successfully */
2370 if (!remaining_length
) {
2372 VDBG(dev
, "dTD transmitted successfully\n");
2375 VDBG(dev
, "TX dTD remains data\n");
2385 /* transfers completed with errors */
2386 if (dtd_status
& DTD_STS_ACTIVE
) {
2387 DBG(dev
, "request not completed\n");
2390 } else if (dtd_status
& DTD_STS_HALTED
) {
2391 ERROR(dev
, "dTD error %08x dQH[%d]\n",
2393 /* clear the errors and halt condition */
2394 curr_dqh
->dtd_status
= 0;
2397 } else if (dtd_status
& DTD_STS_DBE
) {
2398 DBG(dev
, "data buffer (overflow) error\n");
2401 } else if (dtd_status
& DTD_STS_TRE
) {
2402 DBG(dev
, "transaction(ISO) error\n");
2406 ERROR(dev
, "unknown error (0x%x)!\n",
2410 if (i
!= curr_req
->dtd_count
- 1)
2411 curr_dtd
= (struct langwell_dtd
*)
2412 curr_dtd
->next_dtd_virt
;
2418 curr_req
->req
.actual
= actual
;
2420 VDBG(dev
, "<--- %s()\n", __func__
);
2425 /* complete DATA or STATUS phase of ep0 prime status phase if needed */
2426 static void ep0_req_complete(struct langwell_udc
*dev
,
2427 struct langwell_ep
*ep0
, struct langwell_request
*req
)
2430 VDBG(dev
, "---> %s()\n", __func__
);
2432 if (dev
->usb_state
== USB_STATE_ADDRESS
) {
2433 /* set the new address */
2434 new_addr
= (u32
)dev
->dev_addr
;
2435 writel(new_addr
<< USBADR_SHIFT
, &dev
->op_regs
->deviceaddr
);
2437 new_addr
= USBADR(readl(&dev
->op_regs
->deviceaddr
));
2438 VDBG(dev
, "new_addr = %d\n", new_addr
);
2443 switch (dev
->ep0_state
) {
2444 case DATA_STATE_XMIT
:
2445 /* receive status phase */
2446 if (prime_status_phase(dev
, EP_DIR_OUT
))
2449 case DATA_STATE_RECV
:
2450 /* send status phase */
2451 if (prime_status_phase(dev
, EP_DIR_IN
))
2454 case WAIT_FOR_OUT_STATUS
:
2455 dev
->ep0_state
= WAIT_FOR_SETUP
;
2457 case WAIT_FOR_SETUP
:
2458 ERROR(dev
, "unexpect ep0 packets\n");
2465 VDBG(dev
, "<--- %s()\n", __func__
);
2469 /* USB transfer completion interrupt */
2470 static void handle_trans_complete(struct langwell_udc
*dev
)
2473 int i
, ep_num
, dir
, bit_mask
, status
;
2474 struct langwell_ep
*epn
;
2475 struct langwell_request
*curr_req
, *temp_req
;
2477 VDBG(dev
, "---> %s()\n", __func__
);
2479 complete_bits
= readl(&dev
->op_regs
->endptcomplete
);
2480 VDBG(dev
, "endptcomplete register: 0x%08x\n", complete_bits
);
2482 /* Write-Clear the bits in endptcomplete register */
2483 writel(complete_bits
, &dev
->op_regs
->endptcomplete
);
2485 if (!complete_bits
) {
2486 DBG(dev
, "complete_bits = 0\n");
2490 for (i
= 0; i
< dev
->ep_max
; i
++) {
2494 bit_mask
= 1 << (ep_num
+ 16 * dir
);
2496 if (!(complete_bits
& bit_mask
))
2505 if (epn
->name
== NULL
) {
2506 WARNING(dev
, "invalid endpoint\n");
2511 /* ep0 in and out */
2512 DBG(dev
, "%s-%s transfer completed\n",
2514 is_in(epn
) ? "in" : "out");
2516 DBG(dev
, "%s transfer completed\n", epn
->name
);
2518 /* process the req queue until an uncomplete request */
2519 list_for_each_entry_safe(curr_req
, temp_req
,
2520 &epn
->queue
, queue
) {
2521 status
= process_ep_req(dev
, i
, curr_req
);
2522 VDBG(dev
, "%s req status: %d\n", epn
->name
, status
);
2527 /* write back status to req */
2528 curr_req
->req
.status
= status
;
2530 /* ep0 request completion */
2532 ep0_req_complete(dev
, epn
, curr_req
);
2535 done(epn
, curr_req
, status
);
2540 VDBG(dev
, "<--- %s()\n", __func__
);
2545 /* port change detect interrupt handler */
2546 static void handle_port_change(struct langwell_udc
*dev
)
2551 VDBG(dev
, "---> %s()\n", __func__
);
2556 portsc1
= readl(&dev
->op_regs
->portsc1
);
2557 devlc
= readl(&dev
->op_regs
->devlc
);
2558 VDBG(dev
, "portsc1 = 0x%08x, devlc = 0x%08x\n",
2561 /* bus reset is finished */
2562 if (!(portsc1
& PORTS_PR
)) {
2564 speed
= LPM_PSPD(devlc
);
2566 case LPM_SPEED_HIGH
:
2567 dev
->gadget
.speed
= USB_SPEED_HIGH
;
2569 case LPM_SPEED_FULL
:
2570 dev
->gadget
.speed
= USB_SPEED_FULL
;
2573 dev
->gadget
.speed
= USB_SPEED_LOW
;
2576 dev
->gadget
.speed
= USB_SPEED_UNKNOWN
;
2579 VDBG(dev
, "speed = %d, dev->gadget.speed = %d\n",
2580 speed
, dev
->gadget
.speed
);
2584 if (dev
->lpm
&& dev
->lpm_state
== LPM_L0
)
2585 if (portsc1
& PORTS_SUSP
&& portsc1
& PORTS_SLP
) {
2586 INFO(dev
, "LPM L0 to L1\n");
2587 dev
->lpm_state
= LPM_L1
;
2590 /* LPM L1 to L0, force resume or remote wakeup finished */
2591 if (dev
->lpm
&& dev
->lpm_state
== LPM_L1
)
2592 if (!(portsc1
& PORTS_SUSP
)) {
2593 if (portsc1
& PORTS_SLP
)
2594 INFO(dev
, "LPM L1 to L0, force resume\n");
2596 INFO(dev
, "LPM L1 to L0, remote wakeup\n");
2598 dev
->lpm_state
= LPM_L0
;
2601 /* update USB state */
2602 if (!dev
->resume_state
)
2603 dev
->usb_state
= USB_STATE_DEFAULT
;
2605 VDBG(dev
, "<--- %s()\n", __func__
);
2609 /* USB reset interrupt handler */
2610 static void handle_usb_reset(struct langwell_udc
*dev
)
2615 unsigned long timeout
;
2617 VDBG(dev
, "---> %s()\n", __func__
);
2619 /* Write-Clear the device address */
2620 deviceaddr
= readl(&dev
->op_regs
->deviceaddr
);
2621 writel(deviceaddr
& ~USBADR_MASK
, &dev
->op_regs
->deviceaddr
);
2625 /* clear usb state */
2626 dev
->resume_state
= 0;
2628 /* LPM L1 to L0, reset */
2630 dev
->lpm_state
= LPM_L0
;
2632 dev
->ep0_dir
= USB_DIR_OUT
;
2633 dev
->ep0_state
= WAIT_FOR_SETUP
;
2634 dev
->remote_wakeup
= 0; /* default to 0 on reset */
2635 dev
->gadget
.b_hnp_enable
= 0;
2636 dev
->gadget
.a_hnp_support
= 0;
2637 dev
->gadget
.a_alt_hnp_support
= 0;
2639 /* Write-Clear all the setup token semaphores */
2640 endptsetupstat
= readl(&dev
->op_regs
->endptsetupstat
);
2641 writel(endptsetupstat
, &dev
->op_regs
->endptsetupstat
);
2643 /* Write-Clear all the endpoint complete status bits */
2644 endptcomplete
= readl(&dev
->op_regs
->endptcomplete
);
2645 writel(endptcomplete
, &dev
->op_regs
->endptcomplete
);
2647 /* wait until all endptprime bits cleared */
2648 timeout
= jiffies
+ PRIME_TIMEOUT
;
2649 while (readl(&dev
->op_regs
->endptprime
)) {
2650 if (time_after(jiffies
, timeout
)) {
2651 ERROR(dev
, "USB reset timeout\n");
2657 /* write 1s to endptflush register to clear any primed buffers */
2658 writel((u32
) ~0, &dev
->op_regs
->endptflush
);
2660 if (readl(&dev
->op_regs
->portsc1
) & PORTS_PR
) {
2661 VDBG(dev
, "USB bus reset\n");
2662 /* bus is reseting */
2665 /* reset all the queues, stop all USB activities */
2666 stop_activity(dev
, dev
->driver
);
2667 dev
->usb_state
= USB_STATE_DEFAULT
;
2669 VDBG(dev
, "device controller reset\n");
2670 /* controller reset */
2671 langwell_udc_reset(dev
);
2673 /* reset all the queues, stop all USB activities */
2674 stop_activity(dev
, dev
->driver
);
2676 /* reset ep0 dQH and endptctrl */
2679 /* enable interrupt and set controller to run state */
2680 langwell_udc_start(dev
);
2682 dev
->usb_state
= USB_STATE_ATTACHED
;
2685 #ifdef OTG_TRANSCEIVER
2686 /* refer to USB OTG 6.6.2.3 b_hnp_en is cleared */
2687 if (!dev
->lotg
->otg
.default_a
)
2688 dev
->lotg
->hsm
.b_hnp_enable
= 0;
2691 VDBG(dev
, "<--- %s()\n", __func__
);
2695 /* USB bus suspend/resume interrupt */
2696 static void handle_bus_suspend(struct langwell_udc
*dev
)
2699 DBG(dev
, "---> %s()\n", __func__
);
2701 dev
->resume_state
= dev
->usb_state
;
2702 dev
->usb_state
= USB_STATE_SUSPENDED
;
2704 #ifdef OTG_TRANSCEIVER
2705 if (dev
->lotg
->otg
.default_a
) {
2706 if (dev
->lotg
->hsm
.b_bus_suspend_vld
== 1) {
2707 dev
->lotg
->hsm
.b_bus_suspend
= 1;
2708 /* notify transceiver the state changes */
2709 if (spin_trylock(&dev
->lotg
->wq_lock
)) {
2710 langwell_update_transceiver();
2711 spin_unlock(&dev
->lotg
->wq_lock
);
2714 dev
->lotg
->hsm
.b_bus_suspend_vld
++;
2716 if (!dev
->lotg
->hsm
.a_bus_suspend
) {
2717 dev
->lotg
->hsm
.a_bus_suspend
= 1;
2718 /* notify transceiver the state changes */
2719 if (spin_trylock(&dev
->lotg
->wq_lock
)) {
2720 langwell_update_transceiver();
2721 spin_unlock(&dev
->lotg
->wq_lock
);
2727 /* report suspend to the driver */
2729 if (dev
->driver
->suspend
) {
2730 spin_unlock(&dev
->lock
);
2731 dev
->driver
->suspend(&dev
->gadget
);
2732 spin_lock(&dev
->lock
);
2733 DBG(dev
, "suspend %s\n", dev
->driver
->driver
.name
);
2737 /* enter PHY low power suspend */
2738 devlc
= readl(&dev
->op_regs
->devlc
);
2739 VDBG(dev
, "devlc = 0x%08x\n", devlc
);
2741 writel(devlc
, &dev
->op_regs
->devlc
);
2743 DBG(dev
, "<--- %s()\n", __func__
);
2747 static void handle_bus_resume(struct langwell_udc
*dev
)
2750 DBG(dev
, "---> %s()\n", __func__
);
2752 dev
->usb_state
= dev
->resume_state
;
2753 dev
->resume_state
= 0;
2755 /* exit PHY low power suspend */
2756 devlc
= readl(&dev
->op_regs
->devlc
);
2757 VDBG(dev
, "devlc = 0x%08x\n", devlc
);
2759 writel(devlc
, &dev
->op_regs
->devlc
);
2761 #ifdef OTG_TRANSCEIVER
2762 if (dev
->lotg
->otg
.default_a
== 0)
2763 dev
->lotg
->hsm
.a_bus_suspend
= 0;
2766 /* report resume to the driver */
2768 if (dev
->driver
->resume
) {
2769 spin_unlock(&dev
->lock
);
2770 dev
->driver
->resume(&dev
->gadget
);
2771 spin_lock(&dev
->lock
);
2772 DBG(dev
, "resume %s\n", dev
->driver
->driver
.name
);
2776 DBG(dev
, "<--- %s()\n", __func__
);
2780 /* USB device controller interrupt handler */
2781 static irqreturn_t
langwell_irq(int irq
, void *_dev
)
2783 struct langwell_udc
*dev
= _dev
;
2789 VDBG(dev
, "---> %s()\n", __func__
);
2792 VDBG(dev
, "handle IRQ_NONE\n");
2793 VDBG(dev
, "<--- %s()\n", __func__
);
2797 spin_lock(&dev
->lock
);
2800 usbsts
= readl(&dev
->op_regs
->usbsts
);
2802 /* USB interrupt enable */
2803 usbintr
= readl(&dev
->op_regs
->usbintr
);
2805 irq_sts
= usbsts
& usbintr
;
2806 VDBG(dev
, "usbsts = 0x%08x, usbintr = 0x%08x, irq_sts = 0x%08x\n",
2807 usbsts
, usbintr
, irq_sts
);
2810 VDBG(dev
, "handle IRQ_NONE\n");
2811 VDBG(dev
, "<--- %s()\n", __func__
);
2812 spin_unlock(&dev
->lock
);
2816 /* Write-Clear interrupt status bits */
2817 writel(irq_sts
, &dev
->op_regs
->usbsts
);
2819 /* resume from suspend */
2820 portsc1
= readl(&dev
->op_regs
->portsc1
);
2821 if (dev
->usb_state
== USB_STATE_SUSPENDED
)
2822 if (!(portsc1
& PORTS_SUSP
))
2823 handle_bus_resume(dev
);
2826 if (irq_sts
& STS_UI
) {
2827 VDBG(dev
, "USB interrupt\n");
2829 /* setup packet received from ep0 */
2830 if (readl(&dev
->op_regs
->endptsetupstat
)
2831 & EP0SETUPSTAT_MASK
) {
2832 VDBG(dev
, "USB SETUP packet received interrupt\n");
2833 /* setup tripwire semaphone */
2834 setup_tripwire(dev
);
2835 handle_setup_packet(dev
, &dev
->local_setup_buff
);
2838 /* USB transfer completion */
2839 if (readl(&dev
->op_regs
->endptcomplete
)) {
2840 VDBG(dev
, "USB transfer completion interrupt\n");
2841 handle_trans_complete(dev
);
2845 /* SOF received interrupt (for ISO transfer) */
2846 if (irq_sts
& STS_SRI
) {
2848 /* VDBG(dev, "SOF received interrupt\n"); */
2851 /* port change detect interrupt */
2852 if (irq_sts
& STS_PCI
) {
2853 VDBG(dev
, "port change detect interrupt\n");
2854 handle_port_change(dev
);
2857 /* suspend interrrupt */
2858 if (irq_sts
& STS_SLI
) {
2859 VDBG(dev
, "suspend interrupt\n");
2860 handle_bus_suspend(dev
);
2863 /* USB reset interrupt */
2864 if (irq_sts
& STS_URI
) {
2865 VDBG(dev
, "USB reset interrupt\n");
2866 handle_usb_reset(dev
);
2869 /* USB error or system error interrupt */
2870 if (irq_sts
& (STS_UEI
| STS_SEI
)) {
2872 WARNING(dev
, "error IRQ, irq_sts: %x\n", irq_sts
);
2875 spin_unlock(&dev
->lock
);
2877 VDBG(dev
, "<--- %s()\n", __func__
);
2882 /*-------------------------------------------------------------------------*/
2884 /* release device structure */
2885 static void gadget_release(struct device
*_dev
)
2887 struct langwell_udc
*dev
= the_controller
;
2889 DBG(dev
, "---> %s()\n", __func__
);
2891 complete(dev
->done
);
2893 DBG(dev
, "<--- %s()\n", __func__
);
2898 /* tear down the binding between this driver and the pci device */
2899 static void langwell_udc_remove(struct pci_dev
*pdev
)
2901 struct langwell_udc
*dev
= the_controller
;
2903 DECLARE_COMPLETION(done
);
2905 BUG_ON(dev
->driver
);
2906 DBG(dev
, "---> %s()\n", __func__
);
2910 /* free memory allocated in probe */
2912 dma_pool_destroy(dev
->dtd_pool
);
2914 if (dev
->status_req
) {
2915 kfree(dev
->status_req
->req
.buf
);
2916 kfree(dev
->status_req
);
2920 dma_free_coherent(&pdev
->dev
, dev
->ep_dqh_size
,
2921 dev
->ep_dqh
, dev
->ep_dqh_dma
);
2925 /* diable IRQ handler */
2927 free_irq(pdev
->irq
, dev
);
2929 #ifndef OTG_TRANSCEIVER
2931 iounmap(dev
->cap_regs
);
2934 release_mem_region(pci_resource_start(pdev
, 0),
2935 pci_resource_len(pdev
, 0));
2938 pci_disable_device(pdev
);
2940 if (dev
->transceiver
) {
2941 otg_put_transceiver(dev
->transceiver
);
2942 dev
->transceiver
= NULL
;
2947 dev
->cap_regs
= NULL
;
2949 INFO(dev
, "unbind\n");
2950 DBG(dev
, "<--- %s()\n", __func__
);
2952 device_unregister(&dev
->gadget
.dev
);
2953 device_remove_file(&pdev
->dev
, &dev_attr_langwell_udc
);
2955 #ifndef OTG_TRANSCEIVER
2956 pci_set_drvdata(pdev
, NULL
);
2959 /* free dev, wait for the release() finished */
2960 wait_for_completion(&done
);
2962 the_controller
= NULL
;
2967 * wrap this driver around the specified device, but
2968 * don't respond over USB until a gadget driver binds to us.
2970 static int langwell_udc_probe(struct pci_dev
*pdev
,
2971 const struct pci_device_id
*id
)
2973 struct langwell_udc
*dev
;
2974 #ifndef OTG_TRANSCEIVER
2975 unsigned long resource
, len
;
2977 void __iomem
*base
= NULL
;
2981 if (the_controller
) {
2982 dev_warn(&pdev
->dev
, "ignoring\n");
2986 /* alloc, and start init */
2987 dev
= kzalloc(sizeof *dev
, GFP_KERNEL
);
2993 /* initialize device spinlock */
2994 spin_lock_init(&dev
->lock
);
2997 DBG(dev
, "---> %s()\n", __func__
);
2999 #ifdef OTG_TRANSCEIVER
3000 /* PCI device is already enabled by otg_transceiver driver */
3003 /* mem region and register base */
3005 dev
->transceiver
= otg_get_transceiver();
3006 dev
->lotg
= otg_to_langwell(dev
->transceiver
);
3007 base
= dev
->lotg
->regs
;
3009 pci_set_drvdata(pdev
, dev
);
3011 /* now all the pci goodies ... */
3012 if (pci_enable_device(pdev
) < 0) {
3018 /* control register: BAR 0 */
3019 resource
= pci_resource_start(pdev
, 0);
3020 len
= pci_resource_len(pdev
, 0);
3021 if (!request_mem_region(resource
, len
, driver_name
)) {
3022 ERROR(dev
, "controller already in use\n");
3028 base
= ioremap_nocache(resource
, len
);
3031 ERROR(dev
, "can't map memory\n");
3036 dev
->cap_regs
= (struct langwell_cap_regs __iomem
*) base
;
3037 VDBG(dev
, "dev->cap_regs: %p\n", dev
->cap_regs
);
3038 dev
->op_regs
= (struct langwell_op_regs __iomem
*)
3039 (base
+ OP_REG_OFFSET
);
3040 VDBG(dev
, "dev->op_regs: %p\n", dev
->op_regs
);
3042 /* irq setup after old hardware is cleaned up */
3044 ERROR(dev
, "No IRQ. Check PCI setup!\n");
3049 #ifndef OTG_TRANSCEIVER
3050 INFO(dev
, "irq %d, io mem: 0x%08lx, len: 0x%08lx, pci mem 0x%p\n",
3051 pdev
->irq
, resource
, len
, base
);
3052 /* enables bus-mastering for device dev */
3053 pci_set_master(pdev
);
3055 if (request_irq(pdev
->irq
, langwell_irq
, IRQF_SHARED
,
3056 driver_name
, dev
) != 0) {
3057 ERROR(dev
, "request interrupt %d failed\n", pdev
->irq
);
3064 /* set stopped bit */
3067 /* capabilities and endpoint number */
3068 dev
->lpm
= (readl(&dev
->cap_regs
->hccparams
) & HCC_LEN
) ? 1 : 0;
3069 dev
->dciversion
= readw(&dev
->cap_regs
->dciversion
);
3070 dev
->devcap
= (readl(&dev
->cap_regs
->dccparams
) & DEVCAP
) ? 1 : 0;
3071 VDBG(dev
, "dev->lpm: %d\n", dev
->lpm
);
3072 VDBG(dev
, "dev->dciversion: 0x%04x\n", dev
->dciversion
);
3073 VDBG(dev
, "dccparams: 0x%08x\n", readl(&dev
->cap_regs
->dccparams
));
3074 VDBG(dev
, "dev->devcap: %d\n", dev
->devcap
);
3076 ERROR(dev
, "can't support device mode\n");
3081 /* a pair of endpoints (out/in) for each address */
3082 dev
->ep_max
= DEN(readl(&dev
->cap_regs
->dccparams
)) * 2;
3083 VDBG(dev
, "dev->ep_max: %d\n", dev
->ep_max
);
3085 /* allocate endpoints memory */
3086 dev
->ep
= kzalloc(sizeof(struct langwell_ep
) * dev
->ep_max
,
3089 ERROR(dev
, "allocate endpoints memory failed\n");
3094 /* allocate device dQH memory */
3095 size
= dev
->ep_max
* sizeof(struct langwell_dqh
);
3096 VDBG(dev
, "orig size = %d\n", size
);
3097 if (size
< DQH_ALIGNMENT
)
3098 size
= DQH_ALIGNMENT
;
3099 else if ((size
% DQH_ALIGNMENT
) != 0) {
3100 size
+= DQH_ALIGNMENT
+ 1;
3101 size
&= ~(DQH_ALIGNMENT
- 1);
3103 dev
->ep_dqh
= dma_alloc_coherent(&pdev
->dev
, size
,
3104 &dev
->ep_dqh_dma
, GFP_KERNEL
);
3106 ERROR(dev
, "allocate dQH memory failed\n");
3110 dev
->ep_dqh_size
= size
;
3111 VDBG(dev
, "ep_dqh_size = %d\n", dev
->ep_dqh_size
);
3113 /* initialize ep0 status request structure */
3114 dev
->status_req
= kzalloc(sizeof(struct langwell_request
), GFP_KERNEL
);
3115 if (!dev
->status_req
) {
3116 ERROR(dev
, "allocate status_req memory failed\n");
3120 INIT_LIST_HEAD(&dev
->status_req
->queue
);
3122 /* allocate a small amount of memory to get valid address */
3123 dev
->status_req
->req
.buf
= kmalloc(8, GFP_KERNEL
);
3124 dev
->status_req
->req
.dma
= virt_to_phys(dev
->status_req
->req
.buf
);
3126 dev
->resume_state
= USB_STATE_NOTATTACHED
;
3127 dev
->usb_state
= USB_STATE_POWERED
;
3128 dev
->ep0_dir
= USB_DIR_OUT
;
3129 dev
->remote_wakeup
= 0; /* default to 0 on reset */
3131 #ifndef OTG_TRANSCEIVER
3132 /* reset device controller */
3133 langwell_udc_reset(dev
);
3136 /* initialize gadget structure */
3137 dev
->gadget
.ops
= &langwell_ops
; /* usb_gadget_ops */
3138 dev
->gadget
.ep0
= &dev
->ep
[0].ep
; /* gadget ep0 */
3139 INIT_LIST_HEAD(&dev
->gadget
.ep_list
); /* ep_list */
3140 dev
->gadget
.speed
= USB_SPEED_UNKNOWN
; /* speed */
3141 dev
->gadget
.is_dualspeed
= 1; /* support dual speed */
3142 #ifdef OTG_TRANSCEIVER
3143 dev
->gadget
.is_otg
= 1; /* support otg mode */
3146 /* the "gadget" abstracts/virtualizes the controller */
3147 dev_set_name(&dev
->gadget
.dev
, "gadget");
3148 dev
->gadget
.dev
.parent
= &pdev
->dev
;
3149 dev
->gadget
.dev
.dma_mask
= pdev
->dev
.dma_mask
;
3150 dev
->gadget
.dev
.release
= gadget_release
;
3151 dev
->gadget
.name
= driver_name
; /* gadget name */
3153 /* controller endpoints reinit */
3156 #ifndef OTG_TRANSCEIVER
3157 /* reset ep0 dQH and endptctrl */
3161 /* create dTD dma_pool resource */
3162 dev
->dtd_pool
= dma_pool_create("langwell_dtd",
3164 sizeof(struct langwell_dtd
),
3168 if (!dev
->dtd_pool
) {
3174 INFO(dev
, "%s\n", driver_desc
);
3175 INFO(dev
, "irq %d, pci mem %p\n", pdev
->irq
, base
);
3176 INFO(dev
, "Driver version: " DRIVER_VERSION
"\n");
3177 INFO(dev
, "Support (max) %d endpoints\n", dev
->ep_max
);
3178 INFO(dev
, "Device interface version: 0x%04x\n", dev
->dciversion
);
3179 INFO(dev
, "Controller mode: %s\n", dev
->devcap
? "Device" : "Host");
3180 INFO(dev
, "Support USB LPM: %s\n", dev
->lpm
? "Yes" : "No");
3182 VDBG(dev
, "After langwell_udc_probe(), print all registers:\n");
3184 print_all_registers(dev
);
3187 the_controller
= dev
;
3189 retval
= device_register(&dev
->gadget
.dev
);
3193 retval
= device_create_file(&pdev
->dev
, &dev_attr_langwell_udc
);
3197 VDBG(dev
, "<--- %s()\n", __func__
);
3202 DBG(dev
, "<--- %s()\n", __func__
);
3203 langwell_udc_remove(pdev
);
3210 /* device controller suspend */
3211 static int langwell_udc_suspend(struct pci_dev
*pdev
, pm_message_t state
)
3213 struct langwell_udc
*dev
= the_controller
;
3216 DBG(dev
, "---> %s()\n", __func__
);
3218 /* disable interrupt and set controller to stop state */
3219 langwell_udc_stop(dev
);
3221 /* diable IRQ handler */
3223 free_irq(pdev
->irq
, dev
);
3227 /* save PCI state */
3228 pci_save_state(pdev
);
3230 /* set device power state */
3231 pci_set_power_state(pdev
, PCI_D3hot
);
3233 /* enter PHY low power suspend */
3234 devlc
= readl(&dev
->op_regs
->devlc
);
3235 VDBG(dev
, "devlc = 0x%08x\n", devlc
);
3237 writel(devlc
, &dev
->op_regs
->devlc
);
3239 DBG(dev
, "<--- %s()\n", __func__
);
3244 /* device controller resume */
3245 static int langwell_udc_resume(struct pci_dev
*pdev
)
3247 struct langwell_udc
*dev
= the_controller
;
3250 DBG(dev
, "---> %s()\n", __func__
);
3252 /* exit PHY low power suspend */
3253 devlc
= readl(&dev
->op_regs
->devlc
);
3254 VDBG(dev
, "devlc = 0x%08x\n", devlc
);
3256 writel(devlc
, &dev
->op_regs
->devlc
);
3258 /* set device D0 power state */
3259 pci_set_power_state(pdev
, PCI_D0
);
3261 /* restore PCI state */
3262 pci_restore_state(pdev
);
3264 /* enable IRQ handler */
3265 if (request_irq(pdev
->irq
, langwell_irq
, IRQF_SHARED
, driver_name
, dev
)
3267 ERROR(dev
, "request interrupt %d failed\n", pdev
->irq
);
3272 /* reset and start controller to run state */
3274 /* reset device controller */
3275 langwell_udc_reset(dev
);
3277 /* reset ep0 dQH and endptctrl */
3280 /* start device if gadget is loaded */
3282 langwell_udc_start(dev
);
3285 /* reset USB status */
3286 dev
->usb_state
= USB_STATE_ATTACHED
;
3287 dev
->ep0_state
= WAIT_FOR_SETUP
;
3288 dev
->ep0_dir
= USB_DIR_OUT
;
3290 DBG(dev
, "<--- %s()\n", __func__
);
3295 /* pci driver shutdown */
3296 static void langwell_udc_shutdown(struct pci_dev
*pdev
)
3298 struct langwell_udc
*dev
= the_controller
;
3301 DBG(dev
, "---> %s()\n", __func__
);
3303 /* reset controller mode to IDLE */
3304 usbmode
= readl(&dev
->op_regs
->usbmode
);
3305 DBG(dev
, "usbmode = 0x%08x\n", usbmode
);
3306 usbmode
&= (~3 | MODE_IDLE
);
3307 writel(usbmode
, &dev
->op_regs
->usbmode
);
3309 DBG(dev
, "<--- %s()\n", __func__
);
3312 /*-------------------------------------------------------------------------*/
3314 static const struct pci_device_id pci_ids
[] = { {
3315 .class = ((PCI_CLASS_SERIAL_USB
<< 8) | 0xfe),
3319 .subvendor
= PCI_ANY_ID
,
3320 .subdevice
= PCI_ANY_ID
,
3321 }, { /* end: all zeroes */ }
3325 MODULE_DEVICE_TABLE(pci
, pci_ids
);
3328 static struct pci_driver langwell_pci_driver
= {
3329 .name
= (char *) driver_name
,
3330 .id_table
= pci_ids
,
3332 .probe
= langwell_udc_probe
,
3333 .remove
= langwell_udc_remove
,
3335 /* device controller suspend/resume */
3336 .suspend
= langwell_udc_suspend
,
3337 .resume
= langwell_udc_resume
,
3339 .shutdown
= langwell_udc_shutdown
,
3343 MODULE_DESCRIPTION(DRIVER_DESC
);
3344 MODULE_AUTHOR("Xiaochen Shen <xiaochen.shen@intel.com>");
3345 MODULE_VERSION(DRIVER_VERSION
);
3346 MODULE_LICENSE("GPL");
3349 static int __init
init(void)
3351 #ifdef OTG_TRANSCEIVER
3352 return langwell_register_peripheral(&langwell_pci_driver
);
3354 return pci_register_driver(&langwell_pci_driver
);
3360 static void __exit
cleanup(void)
3362 #ifdef OTG_TRANSCEIVER
3363 return langwell_unregister_peripheral(&langwell_pci_driver
);
3365 pci_unregister_driver(&langwell_pci_driver
);
3368 module_exit(cleanup
);