13fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard/* 23fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * linux/drivers/usb/gadget/s3c2410_udc.h 33fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * Samsung on-chip full speed USB device controllers 43fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * 5d36b691077dc59c74efec0d54ed21b86f7a2a21aAl Viro * Copyright (C) 2004-2007 Herbert Pötzl - Arnaud Patard 63fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * Additional cleanups by Ben Dooks <ben-linux@fluff.org> 73fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * 83fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * This program is free software; you can redistribute it and/or modify 93fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * it under the terms of the GNU General Public License as published by 103fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * the Free Software Foundation; either version 2 of the License, or 113fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard * (at your option) any later version. 123fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard */ 133fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 143fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#ifndef _S3C2410_UDC_H 153fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#define _S3C2410_UDC_H 163fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 173fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardstruct s3c2410_ep { 183fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct list_head queue; 193fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned long last_io; /* jiffies timestamp */ 203fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct usb_gadget *gadget; 213fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct s3c2410_udc *dev; 223fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard const struct usb_endpoint_descriptor *desc; 233fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct usb_ep ep; 243fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u8 num; 253fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 263fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned short fifo_size; 273fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u8 bEndpointAddress; 283fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u8 bmAttributes; 293fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 303fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned halted : 1; 313fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned already_seen : 1; 323fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned setup_stage : 1; 333fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard}; 343fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 353fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 363fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard/* Warning : ep0 has a fifo of 16 bytes */ 373fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard/* Don't try to set 32 or 64 */ 383fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard/* also testusb 14 fails wit 16 but is */ 393fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard/* fine with 8 */ 403fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#define EP0_FIFO_SIZE 8 413fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#define EP_FIFO_SIZE 64 423fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#define DEFAULT_POWER_STATE 0x00 433fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 443fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#define S3C2440_EP_FIFO_SIZE 128 453fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 463fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardstatic const char ep0name [] = "ep0"; 473fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 483fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardstatic const char *const ep_name[] = { 493fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard ep0name, /* everyone has ep0 */ 503fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard /* s3c2410 four bidirectional bulk endpoints */ 513fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk", 523fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard}; 533fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 543fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name) 553fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 563fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardstruct s3c2410_request { 573fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct list_head queue; /* ep's requests */ 583fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct usb_request req; 593fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard}; 603fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 613fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardenum ep0_state { 623fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard EP0_IDLE, 633fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard EP0_IN_DATA_PHASE, 643fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard EP0_OUT_DATA_PHASE, 653fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard EP0_END_XFER, 663fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard EP0_STALL, 673fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard}; 683fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 693fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardstatic const char *ep0states[]= { 703fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard "EP0_IDLE", 713fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard "EP0_IN_DATA_PHASE", 723fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard "EP0_OUT_DATA_PHASE", 733fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard "EP0_END_XFER", 743fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard "EP0_STALL", 753fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard}; 763fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 773fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patardstruct s3c2410_udc { 783fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard spinlock_t lock; 793fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 803fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct s3c2410_ep ep[S3C2410_ENDPOINTS]; 813fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard int address; 823fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct usb_gadget gadget; 833fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct usb_gadget_driver *driver; 843fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct s3c2410_request fifo_req; 853fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u8 fifo_buf[EP_FIFO_SIZE]; 863fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u16 devstatus; 873fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 883fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u32 port_status; 893fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard int ep0state; 903fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 913fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned got_irq : 1; 923fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 933fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned req_std : 1; 943fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned req_config : 1; 953fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard unsigned req_pending : 1; 963fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard u8 vbus; 973fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard struct dentry *regs_info; 983fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard}; 993fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard 1003fc154b6b8134b98bb94d60cad9a46ec1ffbe372Arnaud Patard#endif 101