Commit | Line | Data |
---|---|---|
3fc154b6 AP |
1 | /* |
2 | * linux/drivers/usb/gadget/s3c2410_udc.h | |
3 | * Samsung on-chip full speed USB device controllers | |
4 | * | |
d36b6910 | 5 | * Copyright (C) 2004-2007 Herbert Pƶtzl - Arnaud Patard |
3fc154b6 AP |
6 | * Additional cleanups by Ben Dooks <ben-linux@fluff.org> |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
3fc154b6 AP |
12 | */ |
13 | ||
14 | #ifndef _S3C2410_UDC_H | |
15 | #define _S3C2410_UDC_H | |
16 | ||
17 | struct s3c2410_ep { | |
18 | struct list_head queue; | |
19 | unsigned long last_io; /* jiffies timestamp */ | |
20 | struct usb_gadget *gadget; | |
21 | struct s3c2410_udc *dev; | |
22 | const struct usb_endpoint_descriptor *desc; | |
23 | struct usb_ep ep; | |
24 | u8 num; | |
25 | ||
26 | unsigned short fifo_size; | |
27 | u8 bEndpointAddress; | |
28 | u8 bmAttributes; | |
29 | ||
30 | unsigned halted : 1; | |
31 | unsigned already_seen : 1; | |
32 | unsigned setup_stage : 1; | |
33 | }; | |
34 | ||
35 | ||
36 | /* Warning : ep0 has a fifo of 16 bytes */ | |
37 | /* Don't try to set 32 or 64 */ | |
38 | /* also testusb 14 fails wit 16 but is */ | |
39 | /* fine with 8 */ | |
40 | #define EP0_FIFO_SIZE 8 | |
41 | #define EP_FIFO_SIZE 64 | |
42 | #define DEFAULT_POWER_STATE 0x00 | |
43 | ||
44 | #define S3C2440_EP_FIFO_SIZE 128 | |
45 | ||
46 | static const char ep0name [] = "ep0"; | |
47 | ||
48 | static const char *const ep_name[] = { | |
49 | ep0name, /* everyone has ep0 */ | |
50 | /* s3c2410 four bidirectional bulk endpoints */ | |
51 | "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk", | |
52 | }; | |
53 | ||
54 | #define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name) | |
55 | ||
56 | struct s3c2410_request { | |
57 | struct list_head queue; /* ep's requests */ | |
58 | struct usb_request req; | |
59 | }; | |
60 | ||
61 | enum ep0_state { | |
62 | EP0_IDLE, | |
63 | EP0_IN_DATA_PHASE, | |
64 | EP0_OUT_DATA_PHASE, | |
65 | EP0_END_XFER, | |
66 | EP0_STALL, | |
67 | }; | |
68 | ||
69 | static const char *ep0states[]= { | |
70 | "EP0_IDLE", | |
71 | "EP0_IN_DATA_PHASE", | |
72 | "EP0_OUT_DATA_PHASE", | |
73 | "EP0_END_XFER", | |
74 | "EP0_STALL", | |
75 | }; | |
76 | ||
77 | struct s3c2410_udc { | |
78 | spinlock_t lock; | |
79 | ||
80 | struct s3c2410_ep ep[S3C2410_ENDPOINTS]; | |
81 | int address; | |
82 | struct usb_gadget gadget; | |
83 | struct usb_gadget_driver *driver; | |
84 | struct s3c2410_request fifo_req; | |
85 | u8 fifo_buf[EP_FIFO_SIZE]; | |
86 | u16 devstatus; | |
87 | ||
88 | u32 port_status; | |
89 | int ep0state; | |
90 | ||
91 | unsigned got_irq : 1; | |
92 | ||
93 | unsigned req_std : 1; | |
94 | unsigned req_config : 1; | |
95 | unsigned req_pending : 1; | |
96 | u8 vbus; | |
97 | struct dentry *regs_info; | |
98 | }; | |
99 | ||
100 | #endif |