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; | |
3fc154b6 AP |
22 | struct usb_ep ep; |
23 | u8 num; | |
24 | ||
25 | unsigned short fifo_size; | |
26 | u8 bEndpointAddress; | |
27 | u8 bmAttributes; | |
28 | ||
29 | unsigned halted : 1; | |
30 | unsigned already_seen : 1; | |
31 | unsigned setup_stage : 1; | |
32 | }; | |
33 | ||
34 | ||
35 | /* Warning : ep0 has a fifo of 16 bytes */ | |
36 | /* Don't try to set 32 or 64 */ | |
37 | /* also testusb 14 fails wit 16 but is */ | |
38 | /* fine with 8 */ | |
39 | #define EP0_FIFO_SIZE 8 | |
40 | #define EP_FIFO_SIZE 64 | |
41 | #define DEFAULT_POWER_STATE 0x00 | |
42 | ||
43 | #define S3C2440_EP_FIFO_SIZE 128 | |
44 | ||
45 | static const char ep0name [] = "ep0"; | |
46 | ||
47 | static const char *const ep_name[] = { | |
48 | ep0name, /* everyone has ep0 */ | |
49 | /* s3c2410 four bidirectional bulk endpoints */ | |
50 | "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk", | |
51 | }; | |
52 | ||
53 | #define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name) | |
54 | ||
55 | struct s3c2410_request { | |
56 | struct list_head queue; /* ep's requests */ | |
57 | struct usb_request req; | |
58 | }; | |
59 | ||
60 | enum ep0_state { | |
61 | EP0_IDLE, | |
62 | EP0_IN_DATA_PHASE, | |
63 | EP0_OUT_DATA_PHASE, | |
64 | EP0_END_XFER, | |
65 | EP0_STALL, | |
66 | }; | |
67 | ||
68 | static const char *ep0states[]= { | |
69 | "EP0_IDLE", | |
70 | "EP0_IN_DATA_PHASE", | |
71 | "EP0_OUT_DATA_PHASE", | |
72 | "EP0_END_XFER", | |
73 | "EP0_STALL", | |
74 | }; | |
75 | ||
76 | struct s3c2410_udc { | |
77 | spinlock_t lock; | |
78 | ||
79 | struct s3c2410_ep ep[S3C2410_ENDPOINTS]; | |
80 | int address; | |
81 | struct usb_gadget gadget; | |
82 | struct usb_gadget_driver *driver; | |
83 | struct s3c2410_request fifo_req; | |
84 | u8 fifo_buf[EP_FIFO_SIZE]; | |
85 | u16 devstatus; | |
86 | ||
87 | u32 port_status; | |
88 | int ep0state; | |
89 | ||
90 | unsigned got_irq : 1; | |
91 | ||
92 | unsigned req_std : 1; | |
93 | unsigned req_config : 1; | |
94 | unsigned req_pending : 1; | |
95 | u8 vbus; | |
96 | struct dentry *regs_info; | |
97 | }; | |
98 | ||
99 | #endif |