forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.1 KiB
97 lines
2.1 KiB
// SPDX-License-Identifier: GPL-2.0+ |
|
/* |
|
* linux/drivers/usb/gadget/s3c2410_udc.h |
|
* Samsung on-chip full speed USB device controllers |
|
* |
|
* Copyright (C) 2004-2007 Herbert Pötzl - Arnaud Patard |
|
* Additional cleanups by Ben Dooks <[email protected]> |
|
*/ |
|
|
|
#ifndef _S3C2410_UDC_H |
|
#define _S3C2410_UDC_H |
|
|
|
struct s3c2410_ep { |
|
struct list_head queue; |
|
unsigned long last_io; /* jiffies timestamp */ |
|
struct usb_gadget *gadget; |
|
struct s3c2410_udc *dev; |
|
struct usb_ep ep; |
|
u8 num; |
|
|
|
unsigned short fifo_size; |
|
u8 bEndpointAddress; |
|
u8 bmAttributes; |
|
|
|
unsigned halted : 1; |
|
unsigned already_seen : 1; |
|
unsigned setup_stage : 1; |
|
}; |
|
|
|
|
|
/* Warning : ep0 has a fifo of 16 bytes */ |
|
/* Don't try to set 32 or 64 */ |
|
/* also testusb 14 fails wit 16 but is */ |
|
/* fine with 8 */ |
|
#define EP0_FIFO_SIZE 8 |
|
#define EP_FIFO_SIZE 64 |
|
#define DEFAULT_POWER_STATE 0x00 |
|
|
|
#define S3C2440_EP_FIFO_SIZE 128 |
|
|
|
static const char ep0name [] = "ep0"; |
|
|
|
static const char *const ep_name[] = { |
|
ep0name, /* everyone has ep0 */ |
|
/* s3c2410 four bidirectional bulk endpoints */ |
|
"ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk", |
|
}; |
|
|
|
#define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name) |
|
|
|
struct s3c2410_request { |
|
struct list_head queue; /* ep's requests */ |
|
struct usb_request req; |
|
}; |
|
|
|
enum ep0_state { |
|
EP0_IDLE, |
|
EP0_IN_DATA_PHASE, |
|
EP0_OUT_DATA_PHASE, |
|
EP0_END_XFER, |
|
EP0_STALL, |
|
}; |
|
|
|
static const char *ep0states[]= { |
|
"EP0_IDLE", |
|
"EP0_IN_DATA_PHASE", |
|
"EP0_OUT_DATA_PHASE", |
|
"EP0_END_XFER", |
|
"EP0_STALL", |
|
}; |
|
|
|
struct s3c2410_udc { |
|
spinlock_t lock; |
|
|
|
struct s3c2410_ep ep[S3C2410_ENDPOINTS]; |
|
int address; |
|
struct usb_gadget gadget; |
|
struct usb_gadget_driver *driver; |
|
struct s3c2410_request fifo_req; |
|
u8 fifo_buf[EP_FIFO_SIZE]; |
|
u16 devstatus; |
|
|
|
u32 port_status; |
|
int ep0state; |
|
|
|
unsigned got_irq : 1; |
|
|
|
unsigned req_std : 1; |
|
unsigned req_config : 1; |
|
unsigned req_pending : 1; |
|
u8 vbus; |
|
struct dentry *regs_info; |
|
int irq; |
|
}; |
|
#define to_s3c2410(g) (container_of((g), struct s3c2410_udc, gadget)) |
|
|
|
#endif
|
|
|