PageRenderTime 96ms CodeModel.GetById 33ms app.highlight 49ms RepoModel.GetById 1ms app.codeStats 0ms

/drivers/usb/gadget/at91_udc.c

https://bitbucket.org/slukk/jb-tsm-kernel-4.2
C | 1998 lines | 1451 code | 275 blank | 272 comment | 301 complexity | 1d153ce5cf415847f082291b383643cc MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0

Large files files are truncated, but you can click here to view the full file

   1/*
   2 * at91_udc -- driver for at91-series USB peripheral controller
   3 *
   4 * Copyright (C) 2004 by Thomas Rathbone
   5 * Copyright (C) 2005 by HP Labs
   6 * Copyright (C) 2005 by David Brownell
   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.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the
  20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  21 * Boston, MA  02111-1307, USA.
  22 */
  23
  24#undef	VERBOSE_DEBUG
  25#undef	PACKET_TRACE
  26
  27#include <linux/kernel.h>
  28#include <linux/module.h>
  29#include <linux/platform_device.h>
  30#include <linux/delay.h>
  31#include <linux/ioport.h>
  32#include <linux/slab.h>
  33#include <linux/errno.h>
  34#include <linux/init.h>
  35#include <linux/list.h>
  36#include <linux/interrupt.h>
  37#include <linux/proc_fs.h>
  38#include <linux/clk.h>
  39#include <linux/usb/ch9.h>
  40#include <linux/usb/gadget.h>
  41#include <linux/prefetch.h>
  42
  43#include <asm/byteorder.h>
  44#include <mach/hardware.h>
  45#include <asm/io.h>
  46#include <asm/irq.h>
  47#include <asm/system.h>
  48#include <asm/gpio.h>
  49
  50#include <mach/board.h>
  51#include <mach/cpu.h>
  52#include <mach/at91sam9261_matrix.h>
  53
  54#include "at91_udc.h"
  55
  56
  57/*
  58 * This controller is simple and PIO-only.  It's used in many AT91-series
  59 * full speed USB controllers, including the at91rm9200 (arm920T, with MMU),
  60 * at91sam926x (arm926ejs, with MMU), and several no-mmu versions.
  61 *
  62 * This driver expects the board has been wired with two GPIOs suppporting
  63 * a VBUS sensing IRQ, and a D+ pullup.  (They may be omitted, but the
  64 * testing hasn't covered such cases.)
  65 *
  66 * The pullup is most important (so it's integrated on sam926x parts).  It
  67 * provides software control over whether the host enumerates the device.
  68 *
  69 * The VBUS sensing helps during enumeration, and allows both USB clocks
  70 * (and the transceiver) to stay gated off until they're necessary, saving
  71 * power.  During USB suspend, the 48 MHz clock is gated off in hardware;
  72 * it may also be gated off by software during some Linux sleep states.
  73 */
  74
  75#define	DRIVER_VERSION	"3 May 2006"
  76
  77static const char driver_name [] = "at91_udc";
  78static const char ep0name[] = "ep0";
  79
  80#define VBUS_POLL_TIMEOUT	msecs_to_jiffies(1000)
  81
  82#define at91_udp_read(udc, reg) \
  83	__raw_readl((udc)->udp_baseaddr + (reg))
  84#define at91_udp_write(udc, reg, val) \
  85	__raw_writel((val), (udc)->udp_baseaddr + (reg))
  86
  87/*-------------------------------------------------------------------------*/
  88
  89#ifdef CONFIG_USB_GADGET_DEBUG_FILES
  90
  91#include <linux/seq_file.h>
  92
  93static const char debug_filename[] = "driver/udc";
  94
  95#define FOURBITS "%s%s%s%s"
  96#define EIGHTBITS FOURBITS FOURBITS
  97
  98static void proc_ep_show(struct seq_file *s, struct at91_ep *ep)
  99{
 100	static char		*types[] = {
 101		"control", "out-iso", "out-bulk", "out-int",
 102		"BOGUS",   "in-iso",  "in-bulk",  "in-int"};
 103
 104	u32			csr;
 105	struct at91_request	*req;
 106	unsigned long	flags;
 107	struct at91_udc	*udc = ep->udc;
 108
 109	spin_lock_irqsave(&udc->lock, flags);
 110
 111	csr = __raw_readl(ep->creg);
 112
 113	/* NOTE:  not collecting per-endpoint irq statistics... */
 114
 115	seq_printf(s, "\n");
 116	seq_printf(s, "%s, maxpacket %d %s%s %s%s\n",
 117			ep->ep.name, ep->ep.maxpacket,
 118			ep->is_in ? "in" : "out",
 119			ep->is_iso ? " iso" : "",
 120			ep->is_pingpong
 121				? (ep->fifo_bank ? "pong" : "ping")
 122				: "",
 123			ep->stopped ? " stopped" : "");
 124	seq_printf(s, "csr %08x rxbytes=%d %s %s %s" EIGHTBITS "\n",
 125		csr,
 126		(csr & 0x07ff0000) >> 16,
 127		(csr & (1 << 15)) ? "enabled" : "disabled",
 128		(csr & (1 << 11)) ? "DATA1" : "DATA0",
 129		types[(csr & 0x700) >> 8],
 130
 131		/* iff type is control then print current direction */
 132		(!(csr & 0x700))
 133			? ((csr & (1 << 7)) ? " IN" : " OUT")
 134			: "",
 135		(csr & (1 << 6)) ? " rxdatabk1" : "",
 136		(csr & (1 << 5)) ? " forcestall" : "",
 137		(csr & (1 << 4)) ? " txpktrdy" : "",
 138
 139		(csr & (1 << 3)) ? " stallsent" : "",
 140		(csr & (1 << 2)) ? " rxsetup" : "",
 141		(csr & (1 << 1)) ? " rxdatabk0" : "",
 142		(csr & (1 << 0)) ? " txcomp" : "");
 143	if (list_empty (&ep->queue))
 144		seq_printf(s, "\t(queue empty)\n");
 145
 146	else list_for_each_entry (req, &ep->queue, queue) {
 147		unsigned	length = req->req.actual;
 148
 149		seq_printf(s, "\treq %p len %d/%d buf %p\n",
 150				&req->req, length,
 151				req->req.length, req->req.buf);
 152	}
 153	spin_unlock_irqrestore(&udc->lock, flags);
 154}
 155
 156static void proc_irq_show(struct seq_file *s, const char *label, u32 mask)
 157{
 158	int i;
 159
 160	seq_printf(s, "%s %04x:%s%s" FOURBITS, label, mask,
 161		(mask & (1 << 13)) ? " wakeup" : "",
 162		(mask & (1 << 12)) ? " endbusres" : "",
 163
 164		(mask & (1 << 11)) ? " sofint" : "",
 165		(mask & (1 << 10)) ? " extrsm" : "",
 166		(mask & (1 << 9)) ? " rxrsm" : "",
 167		(mask & (1 << 8)) ? " rxsusp" : "");
 168	for (i = 0; i < 8; i++) {
 169		if (mask & (1 << i))
 170			seq_printf(s, " ep%d", i);
 171	}
 172	seq_printf(s, "\n");
 173}
 174
 175static int proc_udc_show(struct seq_file *s, void *unused)
 176{
 177	struct at91_udc	*udc = s->private;
 178	struct at91_ep	*ep;
 179	u32		tmp;
 180
 181	seq_printf(s, "%s: version %s\n", driver_name, DRIVER_VERSION);
 182
 183	seq_printf(s, "vbus %s, pullup %s, %s powered%s, gadget %s\n\n",
 184		udc->vbus ? "present" : "off",
 185		udc->enabled
 186			? (udc->vbus ? "active" : "enabled")
 187			: "disabled",
 188		udc->selfpowered ? "self" : "VBUS",
 189		udc->suspended ? ", suspended" : "",
 190		udc->driver ? udc->driver->driver.name : "(none)");
 191
 192	/* don't access registers when interface isn't clocked */
 193	if (!udc->clocked) {
 194		seq_printf(s, "(not clocked)\n");
 195		return 0;
 196	}
 197
 198	tmp = at91_udp_read(udc, AT91_UDP_FRM_NUM);
 199	seq_printf(s, "frame %05x:%s%s frame=%d\n", tmp,
 200		(tmp & AT91_UDP_FRM_OK) ? " ok" : "",
 201		(tmp & AT91_UDP_FRM_ERR) ? " err" : "",
 202		(tmp & AT91_UDP_NUM));
 203
 204	tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
 205	seq_printf(s, "glbstate %02x:%s" FOURBITS "\n", tmp,
 206		(tmp & AT91_UDP_RMWUPE) ? " rmwupe" : "",
 207		(tmp & AT91_UDP_RSMINPR) ? " rsminpr" : "",
 208		(tmp & AT91_UDP_ESR) ? " esr" : "",
 209		(tmp & AT91_UDP_CONFG) ? " confg" : "",
 210		(tmp & AT91_UDP_FADDEN) ? " fadden" : "");
 211
 212	tmp = at91_udp_read(udc, AT91_UDP_FADDR);
 213	seq_printf(s, "faddr   %03x:%s fadd=%d\n", tmp,
 214		(tmp & AT91_UDP_FEN) ? " fen" : "",
 215		(tmp & AT91_UDP_FADD));
 216
 217	proc_irq_show(s, "imr   ", at91_udp_read(udc, AT91_UDP_IMR));
 218	proc_irq_show(s, "isr   ", at91_udp_read(udc, AT91_UDP_ISR));
 219
 220	if (udc->enabled && udc->vbus) {
 221		proc_ep_show(s, &udc->ep[0]);
 222		list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
 223			if (ep->desc)
 224				proc_ep_show(s, ep);
 225		}
 226	}
 227	return 0;
 228}
 229
 230static int proc_udc_open(struct inode *inode, struct file *file)
 231{
 232	return single_open(file, proc_udc_show, PDE(inode)->data);
 233}
 234
 235static const struct file_operations proc_ops = {
 236	.owner		= THIS_MODULE,
 237	.open		= proc_udc_open,
 238	.read		= seq_read,
 239	.llseek		= seq_lseek,
 240	.release	= single_release,
 241};
 242
 243static void create_debug_file(struct at91_udc *udc)
 244{
 245	udc->pde = proc_create_data(debug_filename, 0, NULL, &proc_ops, udc);
 246}
 247
 248static void remove_debug_file(struct at91_udc *udc)
 249{
 250	if (udc->pde)
 251		remove_proc_entry(debug_filename, NULL);
 252}
 253
 254#else
 255
 256static inline void create_debug_file(struct at91_udc *udc) {}
 257static inline void remove_debug_file(struct at91_udc *udc) {}
 258
 259#endif
 260
 261
 262/*-------------------------------------------------------------------------*/
 263
 264static void done(struct at91_ep *ep, struct at91_request *req, int status)
 265{
 266	unsigned	stopped = ep->stopped;
 267	struct at91_udc	*udc = ep->udc;
 268
 269	list_del_init(&req->queue);
 270	if (req->req.status == -EINPROGRESS)
 271		req->req.status = status;
 272	else
 273		status = req->req.status;
 274	if (status && status != -ESHUTDOWN)
 275		VDBG("%s done %p, status %d\n", ep->ep.name, req, status);
 276
 277	ep->stopped = 1;
 278	spin_unlock(&udc->lock);
 279	req->req.complete(&ep->ep, &req->req);
 280	spin_lock(&udc->lock);
 281	ep->stopped = stopped;
 282
 283	/* ep0 is always ready; other endpoints need a non-empty queue */
 284	if (list_empty(&ep->queue) && ep->int_mask != (1 << 0))
 285		at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask);
 286}
 287
 288/*-------------------------------------------------------------------------*/
 289
 290/* bits indicating OUT fifo has data ready */
 291#define	RX_DATA_READY	(AT91_UDP_RX_DATA_BK0 | AT91_UDP_RX_DATA_BK1)
 292
 293/*
 294 * Endpoint FIFO CSR bits have a mix of bits, making it unsafe to just write
 295 * back most of the value you just read (because of side effects, including
 296 * bits that may change after reading and before writing).
 297 *
 298 * Except when changing a specific bit, always write values which:
 299 *  - clear SET_FX bits (setting them could change something)
 300 *  - set CLR_FX bits (clearing them could change something)
 301 *
 302 * There are also state bits like FORCESTALL, EPEDS, DIR, and EPTYPE
 303 * that shouldn't normally be changed.
 304 *
 305 * NOTE at91sam9260 docs mention synch between UDPCK and MCK clock domains,
 306 * implying a need to wait for one write to complete (test relevant bits)
 307 * before starting the next write.  This shouldn't be an issue given how
 308 * infrequently we write, except maybe for write-then-read idioms.
 309 */
 310#define	SET_FX	(AT91_UDP_TXPKTRDY)
 311#define	CLR_FX	(RX_DATA_READY | AT91_UDP_RXSETUP \
 312		| AT91_UDP_STALLSENT | AT91_UDP_TXCOMP)
 313
 314/* pull OUT packet data from the endpoint's fifo */
 315static int read_fifo (struct at91_ep *ep, struct at91_request *req)
 316{
 317	u32 __iomem	*creg = ep->creg;
 318	u8 __iomem	*dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0));
 319	u32		csr;
 320	u8		*buf;
 321	unsigned int	count, bufferspace, is_done;
 322
 323	buf = req->req.buf + req->req.actual;
 324	bufferspace = req->req.length - req->req.actual;
 325
 326	/*
 327	 * there might be nothing to read if ep_queue() calls us,
 328	 * or if we already emptied both pingpong buffers
 329	 */
 330rescan:
 331	csr = __raw_readl(creg);
 332	if ((csr & RX_DATA_READY) == 0)
 333		return 0;
 334
 335	count = (csr & AT91_UDP_RXBYTECNT) >> 16;
 336	if (count > ep->ep.maxpacket)
 337		count = ep->ep.maxpacket;
 338	if (count > bufferspace) {
 339		DBG("%s buffer overflow\n", ep->ep.name);
 340		req->req.status = -EOVERFLOW;
 341		count = bufferspace;
 342	}
 343	__raw_readsb(dreg, buf, count);
 344
 345	/* release and swap pingpong mem bank */
 346	csr |= CLR_FX;
 347	if (ep->is_pingpong) {
 348		if (ep->fifo_bank == 0) {
 349			csr &= ~(SET_FX | AT91_UDP_RX_DATA_BK0);
 350			ep->fifo_bank = 1;
 351		} else {
 352			csr &= ~(SET_FX | AT91_UDP_RX_DATA_BK1);
 353			ep->fifo_bank = 0;
 354		}
 355	} else
 356		csr &= ~(SET_FX | AT91_UDP_RX_DATA_BK0);
 357	__raw_writel(csr, creg);
 358
 359	req->req.actual += count;
 360	is_done = (count < ep->ep.maxpacket);
 361	if (count == bufferspace)
 362		is_done = 1;
 363
 364	PACKET("%s %p out/%d%s\n", ep->ep.name, &req->req, count,
 365			is_done ? " (done)" : "");
 366
 367	/*
 368	 * avoid extra trips through IRQ logic for packets already in
 369	 * the fifo ... maybe preventing an extra (expensive) OUT-NAK
 370	 */
 371	if (is_done)
 372		done(ep, req, 0);
 373	else if (ep->is_pingpong) {
 374		/*
 375		 * One dummy read to delay the code because of a HW glitch:
 376		 * CSR returns bad RXCOUNT when read too soon after updating
 377		 * RX_DATA_BK flags.
 378		 */
 379		csr = __raw_readl(creg);
 380
 381		bufferspace -= count;
 382		buf += count;
 383		goto rescan;
 384	}
 385
 386	return is_done;
 387}
 388
 389/* load fifo for an IN packet */
 390static int write_fifo(struct at91_ep *ep, struct at91_request *req)
 391{
 392	u32 __iomem	*creg = ep->creg;
 393	u32		csr = __raw_readl(creg);
 394	u8 __iomem	*dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0));
 395	unsigned	total, count, is_last;
 396	u8		*buf;
 397
 398	/*
 399	 * TODO: allow for writing two packets to the fifo ... that'll
 400	 * reduce the amount of IN-NAKing, but probably won't affect
 401	 * throughput much.  (Unlike preventing OUT-NAKing!)
 402	 */
 403
 404	/*
 405	 * If ep_queue() calls us, the queue is empty and possibly in
 406	 * odd states like TXCOMP not yet cleared (we do it, saving at
 407	 * least one IRQ) or the fifo not yet being free.  Those aren't
 408	 * issues normally (IRQ handler fast path).
 409	 */
 410	if (unlikely(csr & (AT91_UDP_TXCOMP | AT91_UDP_TXPKTRDY))) {
 411		if (csr & AT91_UDP_TXCOMP) {
 412			csr |= CLR_FX;
 413			csr &= ~(SET_FX | AT91_UDP_TXCOMP);
 414			__raw_writel(csr, creg);
 415			csr = __raw_readl(creg);
 416		}
 417		if (csr & AT91_UDP_TXPKTRDY)
 418			return 0;
 419	}
 420
 421	buf = req->req.buf + req->req.actual;
 422	prefetch(buf);
 423	total = req->req.length - req->req.actual;
 424	if (ep->ep.maxpacket < total) {
 425		count = ep->ep.maxpacket;
 426		is_last = 0;
 427	} else {
 428		count = total;
 429		is_last = (count < ep->ep.maxpacket) || !req->req.zero;
 430	}
 431
 432	/*
 433	 * Write the packet, maybe it's a ZLP.
 434	 *
 435	 * NOTE:  incrementing req->actual before we receive the ACK means
 436	 * gadget driver IN bytecounts can be wrong in fault cases.  That's
 437	 * fixable with PIO drivers like this one (save "count" here, and
 438	 * do the increment later on TX irq), but not for most DMA hardware.
 439	 *
 440	 * So all gadget drivers must accept that potential error.  Some
 441	 * hardware supports precise fifo status reporting, letting them
 442	 * recover when the actual bytecount matters (e.g. for USB Test
 443	 * and Measurement Class devices).
 444	 */
 445	__raw_writesb(dreg, buf, count);
 446	csr &= ~SET_FX;
 447	csr |= CLR_FX | AT91_UDP_TXPKTRDY;
 448	__raw_writel(csr, creg);
 449	req->req.actual += count;
 450
 451	PACKET("%s %p in/%d%s\n", ep->ep.name, &req->req, count,
 452			is_last ? " (done)" : "");
 453	if (is_last)
 454		done(ep, req, 0);
 455	return is_last;
 456}
 457
 458static void nuke(struct at91_ep *ep, int status)
 459{
 460	struct at91_request *req;
 461
 462	// terminer chaque requete dans la queue
 463	ep->stopped = 1;
 464	if (list_empty(&ep->queue))
 465		return;
 466
 467	VDBG("%s %s\n", __func__, ep->ep.name);
 468	while (!list_empty(&ep->queue)) {
 469		req = list_entry(ep->queue.next, struct at91_request, queue);
 470		done(ep, req, status);
 471	}
 472}
 473
 474/*-------------------------------------------------------------------------*/
 475
 476static int at91_ep_enable(struct usb_ep *_ep,
 477				const struct usb_endpoint_descriptor *desc)
 478{
 479	struct at91_ep	*ep = container_of(_ep, struct at91_ep, ep);
 480	struct at91_udc	*udc = ep->udc;
 481	u16		maxpacket;
 482	u32		tmp;
 483	unsigned long	flags;
 484
 485	if (!_ep || !ep
 486			|| !desc || ep->desc
 487			|| _ep->name == ep0name
 488			|| desc->bDescriptorType != USB_DT_ENDPOINT
 489			|| (maxpacket = le16_to_cpu(desc->wMaxPacketSize)) == 0
 490			|| maxpacket > ep->maxpacket) {
 491		DBG("bad ep or descriptor\n");
 492		return -EINVAL;
 493	}
 494
 495	if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
 496		DBG("bogus device state\n");
 497		return -ESHUTDOWN;
 498	}
 499
 500	tmp = usb_endpoint_type(desc);
 501	switch (tmp) {
 502	case USB_ENDPOINT_XFER_CONTROL:
 503		DBG("only one control endpoint\n");
 504		return -EINVAL;
 505	case USB_ENDPOINT_XFER_INT:
 506		if (maxpacket > 64)
 507			goto bogus_max;
 508		break;
 509	case USB_ENDPOINT_XFER_BULK:
 510		switch (maxpacket) {
 511		case 8:
 512		case 16:
 513		case 32:
 514		case 64:
 515			goto ok;
 516		}
 517bogus_max:
 518		DBG("bogus maxpacket %d\n", maxpacket);
 519		return -EINVAL;
 520	case USB_ENDPOINT_XFER_ISOC:
 521		if (!ep->is_pingpong) {
 522			DBG("iso requires double buffering\n");
 523			return -EINVAL;
 524		}
 525		break;
 526	}
 527
 528ok:
 529	spin_lock_irqsave(&udc->lock, flags);
 530
 531	/* initialize endpoint to match this descriptor */
 532	ep->is_in = usb_endpoint_dir_in(desc);
 533	ep->is_iso = (tmp == USB_ENDPOINT_XFER_ISOC);
 534	ep->stopped = 0;
 535	if (ep->is_in)
 536		tmp |= 0x04;
 537	tmp <<= 8;
 538	tmp |= AT91_UDP_EPEDS;
 539	__raw_writel(tmp, ep->creg);
 540
 541	ep->desc = desc;
 542	ep->ep.maxpacket = maxpacket;
 543
 544	/*
 545	 * reset/init endpoint fifo.  NOTE:  leaves fifo_bank alone,
 546	 * since endpoint resets don't reset hw pingpong state.
 547	 */
 548	at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
 549	at91_udp_write(udc, AT91_UDP_RST_EP, 0);
 550
 551	spin_unlock_irqrestore(&udc->lock, flags);
 552	return 0;
 553}
 554
 555static int at91_ep_disable (struct usb_ep * _ep)
 556{
 557	struct at91_ep	*ep = container_of(_ep, struct at91_ep, ep);
 558	struct at91_udc	*udc = ep->udc;
 559	unsigned long	flags;
 560
 561	if (ep == &ep->udc->ep[0])
 562		return -EINVAL;
 563
 564	spin_lock_irqsave(&udc->lock, flags);
 565
 566	nuke(ep, -ESHUTDOWN);
 567
 568	/* restore the endpoint's pristine config */
 569	ep->desc = NULL;
 570	ep->ep.maxpacket = ep->maxpacket;
 571
 572	/* reset fifos and endpoint */
 573	if (ep->udc->clocked) {
 574		at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
 575		at91_udp_write(udc, AT91_UDP_RST_EP, 0);
 576		__raw_writel(0, ep->creg);
 577	}
 578
 579	spin_unlock_irqrestore(&udc->lock, flags);
 580	return 0;
 581}
 582
 583/*
 584 * this is a PIO-only driver, so there's nothing
 585 * interesting for request or buffer allocation.
 586 */
 587
 588static struct usb_request *
 589at91_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 590{
 591	struct at91_request *req;
 592
 593	req = kzalloc(sizeof (struct at91_request), gfp_flags);
 594	if (!req)
 595		return NULL;
 596
 597	INIT_LIST_HEAD(&req->queue);
 598	return &req->req;
 599}
 600
 601static void at91_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
 602{
 603	struct at91_request *req;
 604
 605	req = container_of(_req, struct at91_request, req);
 606	BUG_ON(!list_empty(&req->queue));
 607	kfree(req);
 608}
 609
 610static int at91_ep_queue(struct usb_ep *_ep,
 611			struct usb_request *_req, gfp_t gfp_flags)
 612{
 613	struct at91_request	*req;
 614	struct at91_ep		*ep;
 615	struct at91_udc		*udc;
 616	int			status;
 617	unsigned long		flags;
 618
 619	req = container_of(_req, struct at91_request, req);
 620	ep = container_of(_ep, struct at91_ep, ep);
 621
 622	if (!_req || !_req->complete
 623			|| !_req->buf || !list_empty(&req->queue)) {
 624		DBG("invalid request\n");
 625		return -EINVAL;
 626	}
 627
 628	if (!_ep || (!ep->desc && ep->ep.name != ep0name)) {
 629		DBG("invalid ep\n");
 630		return -EINVAL;
 631	}
 632
 633	udc = ep->udc;
 634
 635	if (!udc || !udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
 636		DBG("invalid device\n");
 637		return -EINVAL;
 638	}
 639
 640	_req->status = -EINPROGRESS;
 641	_req->actual = 0;
 642
 643	spin_lock_irqsave(&udc->lock, flags);
 644
 645	/* try to kickstart any empty and idle queue */
 646	if (list_empty(&ep->queue) && !ep->stopped) {
 647		int	is_ep0;
 648
 649		/*
 650		 * If this control request has a non-empty DATA stage, this
 651		 * will start that stage.  It works just like a non-control
 652		 * request (until the status stage starts, maybe early).
 653		 *
 654		 * If the data stage is empty, then this starts a successful
 655		 * IN/STATUS stage.  (Unsuccessful ones use set_halt.)
 656		 */
 657		is_ep0 = (ep->ep.name == ep0name);
 658		if (is_ep0) {
 659			u32	tmp;
 660
 661			if (!udc->req_pending) {
 662				status = -EINVAL;
 663				goto done;
 664			}
 665
 666			/*
 667			 * defer changing CONFG until after the gadget driver
 668			 * reconfigures the endpoints.
 669			 */
 670			if (udc->wait_for_config_ack) {
 671				tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
 672				tmp ^= AT91_UDP_CONFG;
 673				VDBG("toggle config\n");
 674				at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
 675			}
 676			if (req->req.length == 0) {
 677ep0_in_status:
 678				PACKET("ep0 in/status\n");
 679				status = 0;
 680				tmp = __raw_readl(ep->creg);
 681				tmp &= ~SET_FX;
 682				tmp |= CLR_FX | AT91_UDP_TXPKTRDY;
 683				__raw_writel(tmp, ep->creg);
 684				udc->req_pending = 0;
 685				goto done;
 686			}
 687		}
 688
 689		if (ep->is_in)
 690			status = write_fifo(ep, req);
 691		else {
 692			status = read_fifo(ep, req);
 693
 694			/* IN/STATUS stage is otherwise triggered by irq */
 695			if (status && is_ep0)
 696				goto ep0_in_status;
 697		}
 698	} else
 699		status = 0;
 700
 701	if (req && !status) {
 702		list_add_tail (&req->queue, &ep->queue);
 703		at91_udp_write(udc, AT91_UDP_IER, ep->int_mask);
 704	}
 705done:
 706	spin_unlock_irqrestore(&udc->lock, flags);
 707	return (status < 0) ? status : 0;
 708}
 709
 710static int at91_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 711{
 712	struct at91_ep		*ep;
 713	struct at91_request	*req;
 714	unsigned long		flags;
 715	struct at91_udc		*udc;
 716
 717	ep = container_of(_ep, struct at91_ep, ep);
 718	if (!_ep || ep->ep.name == ep0name)
 719		return -EINVAL;
 720
 721	udc = ep->udc;
 722
 723	spin_lock_irqsave(&udc->lock, flags);
 724
 725	/* make sure it's actually queued on this endpoint */
 726	list_for_each_entry (req, &ep->queue, queue) {
 727		if (&req->req == _req)
 728			break;
 729	}
 730	if (&req->req != _req) {
 731		spin_unlock_irqrestore(&udc->lock, flags);
 732		return -EINVAL;
 733	}
 734
 735	done(ep, req, -ECONNRESET);
 736	spin_unlock_irqrestore(&udc->lock, flags);
 737	return 0;
 738}
 739
 740static int at91_ep_set_halt(struct usb_ep *_ep, int value)
 741{
 742	struct at91_ep	*ep = container_of(_ep, struct at91_ep, ep);
 743	struct at91_udc	*udc = ep->udc;
 744	u32 __iomem	*creg;
 745	u32		csr;
 746	unsigned long	flags;
 747	int		status = 0;
 748
 749	if (!_ep || ep->is_iso || !ep->udc->clocked)
 750		return -EINVAL;
 751
 752	creg = ep->creg;
 753	spin_lock_irqsave(&udc->lock, flags);
 754
 755	csr = __raw_readl(creg);
 756
 757	/*
 758	 * fail with still-busy IN endpoints, ensuring correct sequencing
 759	 * of data tx then stall.  note that the fifo rx bytecount isn't
 760	 * completely accurate as a tx bytecount.
 761	 */
 762	if (ep->is_in && (!list_empty(&ep->queue) || (csr >> 16) != 0))
 763		status = -EAGAIN;
 764	else {
 765		csr |= CLR_FX;
 766		csr &= ~SET_FX;
 767		if (value) {
 768			csr |= AT91_UDP_FORCESTALL;
 769			VDBG("halt %s\n", ep->ep.name);
 770		} else {
 771			at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
 772			at91_udp_write(udc, AT91_UDP_RST_EP, 0);
 773			csr &= ~AT91_UDP_FORCESTALL;
 774		}
 775		__raw_writel(csr, creg);
 776	}
 777
 778	spin_unlock_irqrestore(&udc->lock, flags);
 779	return status;
 780}
 781
 782static const struct usb_ep_ops at91_ep_ops = {
 783	.enable		= at91_ep_enable,
 784	.disable	= at91_ep_disable,
 785	.alloc_request	= at91_ep_alloc_request,
 786	.free_request	= at91_ep_free_request,
 787	.queue		= at91_ep_queue,
 788	.dequeue	= at91_ep_dequeue,
 789	.set_halt	= at91_ep_set_halt,
 790	// there's only imprecise fifo status reporting
 791};
 792
 793/*-------------------------------------------------------------------------*/
 794
 795static int at91_get_frame(struct usb_gadget *gadget)
 796{
 797	struct at91_udc *udc = to_udc(gadget);
 798
 799	if (!to_udc(gadget)->clocked)
 800		return -EINVAL;
 801	return at91_udp_read(udc, AT91_UDP_FRM_NUM) & AT91_UDP_NUM;
 802}
 803
 804static int at91_wakeup(struct usb_gadget *gadget)
 805{
 806	struct at91_udc	*udc = to_udc(gadget);
 807	u32		glbstate;
 808	int		status = -EINVAL;
 809	unsigned long	flags;
 810
 811	DBG("%s\n", __func__ );
 812	spin_lock_irqsave(&udc->lock, flags);
 813
 814	if (!udc->clocked || !udc->suspended)
 815		goto done;
 816
 817	/* NOTE:  some "early versions" handle ESR differently ... */
 818
 819	glbstate = at91_udp_read(udc, AT91_UDP_GLB_STAT);
 820	if (!(glbstate & AT91_UDP_ESR))
 821		goto done;
 822	glbstate |= AT91_UDP_ESR;
 823	at91_udp_write(udc, AT91_UDP_GLB_STAT, glbstate);
 824
 825done:
 826	spin_unlock_irqrestore(&udc->lock, flags);
 827	return status;
 828}
 829
 830/* reinit == restore initial software state */
 831static void udc_reinit(struct at91_udc *udc)
 832{
 833	u32 i;
 834
 835	INIT_LIST_HEAD(&udc->gadget.ep_list);
 836	INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
 837
 838	for (i = 0; i < NUM_ENDPOINTS; i++) {
 839		struct at91_ep *ep = &udc->ep[i];
 840
 841		if (i != 0)
 842			list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
 843		ep->desc = NULL;
 844		ep->stopped = 0;
 845		ep->fifo_bank = 0;
 846		ep->ep.maxpacket = ep->maxpacket;
 847		ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i);
 848		// initialiser une queue par endpoint
 849		INIT_LIST_HEAD(&ep->queue);
 850	}
 851}
 852
 853static void stop_activity(struct at91_udc *udc)
 854{
 855	struct usb_gadget_driver *driver = udc->driver;
 856	int i;
 857
 858	if (udc->gadget.speed == USB_SPEED_UNKNOWN)
 859		driver = NULL;
 860	udc->gadget.speed = USB_SPEED_UNKNOWN;
 861	udc->suspended = 0;
 862
 863	for (i = 0; i < NUM_ENDPOINTS; i++) {
 864		struct at91_ep *ep = &udc->ep[i];
 865		ep->stopped = 1;
 866		nuke(ep, -ESHUTDOWN);
 867	}
 868	if (driver) {
 869		spin_unlock(&udc->lock);
 870		driver->disconnect(&udc->gadget);
 871		spin_lock(&udc->lock);
 872	}
 873
 874	udc_reinit(udc);
 875}
 876
 877static void clk_on(struct at91_udc *udc)
 878{
 879	if (udc->clocked)
 880		return;
 881	udc->clocked = 1;
 882	clk_enable(udc->iclk);
 883	clk_enable(udc->fclk);
 884}
 885
 886static void clk_off(struct at91_udc *udc)
 887{
 888	if (!udc->clocked)
 889		return;
 890	udc->clocked = 0;
 891	udc->gadget.speed = USB_SPEED_UNKNOWN;
 892	clk_disable(udc->fclk);
 893	clk_disable(udc->iclk);
 894}
 895
 896/*
 897 * activate/deactivate link with host; minimize power usage for
 898 * inactive links by cutting clocks and transceiver power.
 899 */
 900static void pullup(struct at91_udc *udc, int is_on)
 901{
 902	int	active = !udc->board.pullup_active_low;
 903
 904	if (!udc->enabled || !udc->vbus)
 905		is_on = 0;
 906	DBG("%sactive\n", is_on ? "" : "in");
 907
 908	if (is_on) {
 909		clk_on(udc);
 910		at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
 911		at91_udp_write(udc, AT91_UDP_TXVC, 0);
 912		if (cpu_is_at91rm9200())
 913			gpio_set_value(udc->board.pullup_pin, active);
 914		else if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) {
 915			u32	txvc = at91_udp_read(udc, AT91_UDP_TXVC);
 916
 917			txvc |= AT91_UDP_TXVC_PUON;
 918			at91_udp_write(udc, AT91_UDP_TXVC, txvc);
 919		} else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
 920			u32	usbpucr;
 921
 922			usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR);
 923			usbpucr |= AT91_MATRIX_USBPUCR_PUON;
 924			at91_sys_write(AT91_MATRIX_USBPUCR, usbpucr);
 925		}
 926	} else {
 927		stop_activity(udc);
 928		at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
 929		at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
 930		if (cpu_is_at91rm9200())
 931			gpio_set_value(udc->board.pullup_pin, !active);
 932		else if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) {
 933			u32	txvc = at91_udp_read(udc, AT91_UDP_TXVC);
 934
 935			txvc &= ~AT91_UDP_TXVC_PUON;
 936			at91_udp_write(udc, AT91_UDP_TXVC, txvc);
 937		} else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
 938			u32	usbpucr;
 939
 940			usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR);
 941			usbpucr &= ~AT91_MATRIX_USBPUCR_PUON;
 942			at91_sys_write(AT91_MATRIX_USBPUCR, usbpucr);
 943		}
 944		clk_off(udc);
 945	}
 946}
 947
 948/* vbus is here!  turn everything on that's ready */
 949static int at91_vbus_session(struct usb_gadget *gadget, int is_active)
 950{
 951	struct at91_udc	*udc = to_udc(gadget);
 952	unsigned long	flags;
 953
 954	// VDBG("vbus %s\n", is_active ? "on" : "off");
 955	spin_lock_irqsave(&udc->lock, flags);
 956	udc->vbus = (is_active != 0);
 957	if (udc->driver)
 958		pullup(udc, is_active);
 959	else
 960		pullup(udc, 0);
 961	spin_unlock_irqrestore(&udc->lock, flags);
 962	return 0;
 963}
 964
 965static int at91_pullup(struct usb_gadget *gadget, int is_on)
 966{
 967	struct at91_udc	*udc = to_udc(gadget);
 968	unsigned long	flags;
 969
 970	spin_lock_irqsave(&udc->lock, flags);
 971	udc->enabled = is_on = !!is_on;
 972	pullup(udc, is_on);
 973	spin_unlock_irqrestore(&udc->lock, flags);
 974	return 0;
 975}
 976
 977static int at91_set_selfpowered(struct usb_gadget *gadget, int is_on)
 978{
 979	struct at91_udc	*udc = to_udc(gadget);
 980	unsigned long	flags;
 981
 982	spin_lock_irqsave(&udc->lock, flags);
 983	udc->selfpowered = (is_on != 0);
 984	spin_unlock_irqrestore(&udc->lock, flags);
 985	return 0;
 986}
 987
 988static const struct usb_gadget_ops at91_udc_ops = {
 989	.get_frame		= at91_get_frame,
 990	.wakeup			= at91_wakeup,
 991	.set_selfpowered	= at91_set_selfpowered,
 992	.vbus_session		= at91_vbus_session,
 993	.pullup			= at91_pullup,
 994
 995	/*
 996	 * VBUS-powered devices may also also want to support bigger
 997	 * power budgets after an appropriate SET_CONFIGURATION.
 998	 */
 999	// .vbus_power		= at91_vbus_power,
1000};
1001
1002/*-------------------------------------------------------------------------*/
1003
1004static int handle_ep(struct at91_ep *ep)
1005{
1006	struct at91_request	*req;
1007	u32 __iomem		*creg = ep->creg;
1008	u32			csr = __raw_readl(creg);
1009
1010	if (!list_empty(&ep->queue))
1011		req = list_entry(ep->queue.next,
1012			struct at91_request, queue);
1013	else
1014		req = NULL;
1015
1016	if (ep->is_in) {
1017		if (csr & (AT91_UDP_STALLSENT | AT91_UDP_TXCOMP)) {
1018			csr |= CLR_FX;
1019			csr &= ~(SET_FX | AT91_UDP_STALLSENT | AT91_UDP_TXCOMP);
1020			__raw_writel(csr, creg);
1021		}
1022		if (req)
1023			return write_fifo(ep, req);
1024
1025	} else {
1026		if (csr & AT91_UDP_STALLSENT) {
1027			/* STALLSENT bit == ISOERR */
1028			if (ep->is_iso && req)
1029				req->req.status = -EILSEQ;
1030			csr |= CLR_FX;
1031			csr &= ~(SET_FX | AT91_UDP_STALLSENT);
1032			__raw_writel(csr, creg);
1033			csr = __raw_readl(creg);
1034		}
1035		if (req && (csr & RX_DATA_READY))
1036			return read_fifo(ep, req);
1037	}
1038	return 0;
1039}
1040
1041union setup {
1042	u8			raw[8];
1043	struct usb_ctrlrequest	r;
1044};
1045
1046static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr)
1047{
1048	u32 __iomem	*creg = ep->creg;
1049	u8 __iomem	*dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0));
1050	unsigned	rxcount, i = 0;
1051	u32		tmp;
1052	union setup	pkt;
1053	int		status = 0;
1054
1055	/* read and ack SETUP; hard-fail for bogus packets */
1056	rxcount = (csr & AT91_UDP_RXBYTECNT) >> 16;
1057	if (likely(rxcount == 8)) {
1058		while (rxcount--)
1059			pkt.raw[i++] = __raw_readb(dreg);
1060		if (pkt.r.bRequestType & USB_DIR_IN) {
1061			csr |= AT91_UDP_DIR;
1062			ep->is_in = 1;
1063		} else {
1064			csr &= ~AT91_UDP_DIR;
1065			ep->is_in = 0;
1066		}
1067	} else {
1068		// REVISIT this happens sometimes under load; why??
1069		ERR("SETUP len %d, csr %08x\n", rxcount, csr);
1070		status = -EINVAL;
1071	}
1072	csr |= CLR_FX;
1073	csr &= ~(SET_FX | AT91_UDP_RXSETUP);
1074	__raw_writel(csr, creg);
1075	udc->wait_for_addr_ack = 0;
1076	udc->wait_for_config_ack = 0;
1077	ep->stopped = 0;
1078	if (unlikely(status != 0))
1079		goto stall;
1080
1081#define w_index		le16_to_cpu(pkt.r.wIndex)
1082#define w_value		le16_to_cpu(pkt.r.wValue)
1083#define w_length	le16_to_cpu(pkt.r.wLength)
1084
1085	VDBG("SETUP %02x.%02x v%04x i%04x l%04x\n",
1086			pkt.r.bRequestType, pkt.r.bRequest,
1087			w_value, w_index, w_length);
1088
1089	/*
1090	 * A few standard requests get handled here, ones that touch
1091	 * hardware ... notably for device and endpoint features.
1092	 */
1093	udc->req_pending = 1;
1094	csr = __raw_readl(creg);
1095	csr |= CLR_FX;
1096	csr &= ~SET_FX;
1097	switch ((pkt.r.bRequestType << 8) | pkt.r.bRequest) {
1098
1099	case ((USB_TYPE_STANDARD|USB_RECIP_DEVICE) << 8)
1100			| USB_REQ_SET_ADDRESS:
1101		__raw_writel(csr | AT91_UDP_TXPKTRDY, creg);
1102		udc->addr = w_value;
1103		udc->wait_for_addr_ack = 1;
1104		udc->req_pending = 0;
1105		/* FADDR is set later, when we ack host STATUS */
1106		return;
1107
1108	case ((USB_TYPE_STANDARD|USB_RECIP_DEVICE) << 8)
1109			| USB_REQ_SET_CONFIGURATION:
1110		tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_CONFG;
1111		if (pkt.r.wValue)
1112			udc->wait_for_config_ack = (tmp == 0);
1113		else
1114			udc->wait_for_config_ack = (tmp != 0);
1115		if (udc->wait_for_config_ack)
1116			VDBG("wait for config\n");
1117		/* CONFG is toggled later, if gadget driver succeeds */
1118		break;
1119
1120	/*
1121	 * Hosts may set or clear remote wakeup status, and
1122	 * devices may report they're VBUS powered.
1123	 */
1124	case ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE) << 8)
1125			| USB_REQ_GET_STATUS:
1126		tmp = (udc->selfpowered << USB_DEVICE_SELF_POWERED);
1127		if (at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_ESR)
1128			tmp |= (1 << USB_DEVICE_REMOTE_WAKEUP);
1129		PACKET("get device status\n");
1130		__raw_writeb(tmp, dreg);
1131		__raw_writeb(0, dreg);
1132		goto write_in;
1133		/* then STATUS starts later, automatically */
1134	case ((USB_TYPE_STANDARD|USB_RECIP_DEVICE) << 8)
1135			| USB_REQ_SET_FEATURE:
1136		if (w_value != USB_DEVICE_REMOTE_WAKEUP)
1137			goto stall;
1138		tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1139		tmp |= AT91_UDP_ESR;
1140		at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1141		goto succeed;
1142	case ((USB_TYPE_STANDARD|USB_RECIP_DEVICE) << 8)
1143			| USB_REQ_CLEAR_FEATURE:
1144		if (w_value != USB_DEVICE_REMOTE_WAKEUP)
1145			goto stall;
1146		tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1147		tmp &= ~AT91_UDP_ESR;
1148		at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1149		goto succeed;
1150
1151	/*
1152	 * Interfaces have no feature settings; this is pretty useless.
1153	 * we won't even insist the interface exists...
1154	 */
1155	case ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE) << 8)
1156			| USB_REQ_GET_STATUS:
1157		PACKET("get interface status\n");
1158		__raw_writeb(0, dreg);
1159		__raw_writeb(0, dreg);
1160		goto write_in;
1161		/* then STATUS starts later, automatically */
1162	case ((USB_TYPE_STANDARD|USB_RECIP_INTERFACE) << 8)
1163			| USB_REQ_SET_FEATURE:
1164	case ((USB_TYPE_STANDARD|USB_RECIP_INTERFACE) << 8)
1165			| USB_REQ_CLEAR_FEATURE:
1166		goto stall;
1167
1168	/*
1169	 * Hosts may clear bulk/intr endpoint halt after the gadget
1170	 * driver sets it (not widely used); or set it (for testing)
1171	 */
1172	case ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT) << 8)
1173			| USB_REQ_GET_STATUS:
1174		tmp = w_index & USB_ENDPOINT_NUMBER_MASK;
1175		ep = &udc->ep[tmp];
1176		if (tmp >= NUM_ENDPOINTS || (tmp && !ep->desc))
1177			goto stall;
1178
1179		if (tmp) {
1180			if ((w_index & USB_DIR_IN)) {
1181				if (!ep->is_in)
1182					goto stall;
1183			} else if (ep->is_in)
1184				goto stall;
1185		}
1186		PACKET("get %s status\n", ep->ep.name);
1187		if (__raw_readl(ep->creg) & AT91_UDP_FORCESTALL)
1188			tmp = (1 << USB_ENDPOINT_HALT);
1189		else
1190			tmp = 0;
1191		__raw_writeb(tmp, dreg);
1192		__raw_writeb(0, dreg);
1193		goto write_in;
1194		/* then STATUS starts later, automatically */
1195	case ((USB_TYPE_STANDARD|USB_RECIP_ENDPOINT) << 8)
1196			| USB_REQ_SET_FEATURE:
1197		tmp = w_index & USB_ENDPOINT_NUMBER_MASK;
1198		ep = &udc->ep[tmp];
1199		if (w_value != USB_ENDPOINT_HALT || tmp >= NUM_ENDPOINTS)
1200			goto stall;
1201		if (!ep->desc || ep->is_iso)
1202			goto stall;
1203		if ((w_index & USB_DIR_IN)) {
1204			if (!ep->is_in)
1205				goto stall;
1206		} else if (ep->is_in)
1207			goto stall;
1208
1209		tmp = __raw_readl(ep->creg);
1210		tmp &= ~SET_FX;
1211		tmp |= CLR_FX | AT91_UDP_FORCESTALL;
1212		__raw_writel(tmp, ep->creg);
1213		goto succeed;
1214	case ((USB_TYPE_STANDARD|USB_RECIP_ENDPOINT) << 8)
1215			| USB_REQ_CLEAR_FEATURE:
1216		tmp = w_index & USB_ENDPOINT_NUMBER_MASK;
1217		ep = &udc->ep[tmp];
1218		if (w_value != USB_ENDPOINT_HALT || tmp >= NUM_ENDPOINTS)
1219			goto stall;
1220		if (tmp == 0)
1221			goto succeed;
1222		if (!ep->desc || ep->is_iso)
1223			goto stall;
1224		if ((w_index & USB_DIR_IN)) {
1225			if (!ep->is_in)
1226				goto stall;
1227		} else if (ep->is_in)
1228			goto stall;
1229
1230		at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
1231		at91_udp_write(udc, AT91_UDP_RST_EP, 0);
1232		tmp = __raw_readl(ep->creg);
1233		tmp |= CLR_FX;
1234		tmp &= ~(SET_FX | AT91_UDP_FORCESTALL);
1235		__raw_writel(tmp, ep->creg);
1236		if (!list_empty(&ep->queue))
1237			handle_ep(ep);
1238		goto succeed;
1239	}
1240
1241#undef w_value
1242#undef w_index
1243#undef w_length
1244
1245	/* pass request up to the gadget driver */
1246	if (udc->driver) {
1247		spin_unlock(&udc->lock);
1248		status = udc->driver->setup(&udc->gadget, &pkt.r);
1249		spin_lock(&udc->lock);
1250	}
1251	else
1252		status = -ENODEV;
1253	if (status < 0) {
1254stall:
1255		VDBG("req %02x.%02x protocol STALL; stat %d\n",
1256				pkt.r.bRequestType, pkt.r.bRequest, status);
1257		csr |= AT91_UDP_FORCESTALL;
1258		__raw_writel(csr, creg);
1259		udc->req_pending = 0;
1260	}
1261	return;
1262
1263succeed:
1264	/* immediate successful (IN) STATUS after zero length DATA */
1265	PACKET("ep0 in/status\n");
1266write_in:
1267	csr |= AT91_UDP_TXPKTRDY;
1268	__raw_writel(csr, creg);
1269	udc->req_pending = 0;
1270}
1271
1272static void handle_ep0(struct at91_udc *udc)
1273{
1274	struct at91_ep		*ep0 = &udc->ep[0];
1275	u32 __iomem		*creg = ep0->creg;
1276	u32			csr = __raw_readl(creg);
1277	struct at91_request	*req;
1278
1279	if (unlikely(csr & AT91_UDP_STALLSENT)) {
1280		nuke(ep0, -EPROTO);
1281		udc->req_pending = 0;
1282		csr |= CLR_FX;
1283		csr &= ~(SET_FX | AT91_UDP_STALLSENT | AT91_UDP_FORCESTALL);
1284		__raw_writel(csr, creg);
1285		VDBG("ep0 stalled\n");
1286		csr = __raw_readl(creg);
1287	}
1288	if (csr & AT91_UDP_RXSETUP) {
1289		nuke(ep0, 0);
1290		udc->req_pending = 0;
1291		handle_setup(udc, ep0, csr);
1292		return;
1293	}
1294
1295	if (list_empty(&ep0->queue))
1296		req = NULL;
1297	else
1298		req = list_entry(ep0->queue.next, struct at91_request, queue);
1299
1300	/* host ACKed an IN packet that we sent */
1301	if (csr & AT91_UDP_TXCOMP) {
1302		csr |= CLR_FX;
1303		csr &= ~(SET_FX | AT91_UDP_TXCOMP);
1304
1305		/* write more IN DATA? */
1306		if (req && ep0->is_in) {
1307			if (handle_ep(ep0))
1308				udc->req_pending = 0;
1309
1310		/*
1311		 * Ack after:
1312		 *  - last IN DATA packet (including GET_STATUS)
1313		 *  - IN/STATUS for OUT DATA
1314		 *  - IN/STATUS for any zero-length DATA stage
1315		 * except for the IN DATA case, the host should send
1316		 * an OUT status later, which we'll ack.
1317		 */
1318		} else {
1319			udc->req_pending = 0;
1320			__raw_writel(csr, creg);
1321
1322			/*
1323			 * SET_ADDRESS takes effect only after the STATUS
1324			 * (to the original address) gets acked.
1325			 */
1326			if (udc->wait_for_addr_ack) {
1327				u32	tmp;
1328
1329				at91_udp_write(udc, AT91_UDP_FADDR,
1330						AT91_UDP_FEN | udc->addr);
1331				tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1332				tmp &= ~AT91_UDP_FADDEN;
1333				if (udc->addr)
1334					tmp |= AT91_UDP_FADDEN;
1335				at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1336
1337				udc->wait_for_addr_ack = 0;
1338				VDBG("address %d\n", udc->addr);
1339			}
1340		}
1341	}
1342
1343	/* OUT packet arrived ... */
1344	else if (csr & AT91_UDP_RX_DATA_BK0) {
1345		csr |= CLR_FX;
1346		csr &= ~(SET_FX | AT91_UDP_RX_DATA_BK0);
1347
1348		/* OUT DATA stage */
1349		if (!ep0->is_in) {
1350			if (req) {
1351				if (handle_ep(ep0)) {
1352					/* send IN/STATUS */
1353					PACKET("ep0 in/status\n");
1354					csr = __raw_readl(creg);
1355					csr &= ~SET_FX;
1356					csr |= CLR_FX | AT91_UDP_TXPKTRDY;
1357					__raw_writel(csr, creg);
1358					udc->req_pending = 0;
1359				}
1360			} else if (udc->req_pending) {
1361				/*
1362				 * AT91 hardware has a hard time with this
1363				 * "deferred response" mode for control-OUT
1364				 * transfers.  (For control-IN it's fine.)
1365				 *
1366				 * The normal solution leaves OUT data in the
1367				 * fifo until the gadget driver is ready.
1368				 * We couldn't do that here without disabling
1369				 * the IRQ that tells about SETUP packets,
1370				 * e.g. when the host gets impatient...
1371				 *
1372				 * Working around it by copying into a buffer
1373				 * would almost be a non-deferred response,
1374				 * except that it wouldn't permit reliable
1375				 * stalling of the request.  Instead, demand
1376				 * that gadget drivers not use this mode.
1377				 */
1378				DBG("no control-OUT deferred responses!\n");
1379				__raw_writel(csr | AT91_UDP_FORCESTALL, creg);
1380				udc->req_pending = 0;
1381			}
1382
1383		/* STATUS stage for control-IN; ack.  */
1384		} else {
1385			PACKET("ep0 out/status ACK\n");
1386			__raw_writel(csr, creg);
1387
1388			/* "early" status stage */
1389			if (req)
1390				done(ep0, req, 0);
1391		}
1392	}
1393}
1394
1395static irqreturn_t at91_udc_irq (int irq, void *_udc)
1396{
1397	struct at91_udc		*udc = _udc;
1398	u32			rescans = 5;
1399	int			disable_clock = 0;
1400	unsigned long		flags;
1401
1402	spin_lock_irqsave(&udc->lock, flags);
1403
1404	if (!udc->clocked) {
1405		clk_on(udc);
1406		disable_clock = 1;
1407	}
1408
1409	while (rescans--) {
1410		u32 status;
1411
1412		status = at91_udp_read(udc, AT91_UDP_ISR)
1413			& at91_udp_read(udc, AT91_UDP_IMR);
1414		if (!status)
1415			break;
1416
1417		/* USB reset irq:  not maskable */
1418		if (status & AT91_UDP_ENDBUSRES) {
1419			at91_udp_write(udc, AT91_UDP_IDR, ~MINIMUS_INTERRUPTUS);
1420			at91_udp_write(udc, AT91_UDP_IER, MINIMUS_INTERRUPTUS);
1421			/* Atmel code clears this irq twice */
1422			at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1423			at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1424			VDBG("end bus reset\n");
1425			udc->addr = 0;
1426			stop_activity(udc);
1427
1428			/* enable ep0 */
1429			at91_udp_write(udc, AT91_UDP_CSR(0),
1430					AT91_UDP_EPEDS | AT91_UDP_EPTYPE_CTRL);
1431			udc->gadget.speed = USB_SPEED_FULL;
1432			udc->suspended = 0;
1433			at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_EP(0));
1434
1435			/*
1436			 * NOTE:  this driver keeps clocks off unless the
1437			 * USB host is present.  That saves power, but for
1438			 * boards that don't support VBUS detection, both
1439			 * clocks need to be active most of the time.
1440			 */
1441
1442		/* host initiated suspend (3+ms bus idle) */
1443		} else if (status & AT91_UDP_RXSUSP) {
1444			at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXSUSP);
1445			at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXRSM);
1446			at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXSUSP);
1447			// VDBG("bus suspend\n");
1448			if (udc->suspended)
1449				continue;
1450			udc->suspended = 1;
1451
1452			/*
1453			 * NOTE:  when suspending a VBUS-powered device, the
1454			 * gadget driver should switch into slow clock mode
1455			 * and then into standby to avoid drawing more than
1456			 * 500uA power (2500uA for some high-power configs).
1457			 */
1458			if (udc->driver && udc->driver->suspend) {
1459				spin_unlock(&udc->lock);
1460				udc->driver->suspend(&udc->gadget);
1461				spin_lock(&udc->lock);
1462			}
1463
1464		/* host initiated resume */
1465		} else if (status & AT91_UDP_RXRSM) {
1466			at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
1467			at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXSUSP);
1468			at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
1469			// VDBG("bus resume\n");
1470			if (!udc->suspended)
1471				continue;
1472			udc->suspended = 0;
1473
1474			/*
1475			 * NOTE:  for a VBUS-powered device, the gadget driver
1476			 * would normally want to switch out of slow clock
1477			 * mode into normal mode.
1478			 */
1479			if (udc->driver && udc->driver->resume) {
1480				spin_unlock(&udc->lock);
1481				udc->driver->resume(&udc->gadget);
1482				spin_lock(&udc->lock);
1483			}
1484
1485		/* endpoint IRQs are cleared by handling them */
1486		} else {
1487			int		i;
1488			unsigned	mask = 1;
1489			struct at91_ep	*ep = &udc->ep[1];
1490
1491			if (status & mask)
1492				handle_ep0(udc);
1493			for (i = 1; i < NUM_ENDPOINTS; i++) {
1494				mask <<= 1;
1495				if (status & mask)
1496					handle_ep(ep);
1497				ep++;
1498			}
1499		}
1500	}
1501
1502	if (disable_clock)
1503		clk_off(udc);
1504
1505	spin_unlock_irqrestore(&udc->lock, flags);
1506
1507	return IRQ_HANDLED;
1508}
1509
1510/*-------------------------------------------------------------------------*/
1511
1512static void nop_release(struct device *dev)
1513{
1514	/* nothing to free */
1515}
1516
1517static struct at91_udc controller = {
1518	.gadget = {
1519		.ops	= &at91_udc_ops,
1520		.ep0	= &controller.ep[0].ep,
1521		.name	= driver_name,
1522		.dev	= {
1523			.init_name = "gadget",
1524			.release = nop_release,
1525		}
1526	},
1527	.ep[0] = {
1528		.ep = {
1529			.name	= ep0name,
1530			.ops	= &at91_ep_ops,
1531		},
1532		.udc		= &controller,
1533		.maxpacket	= 8,
1534		.int_mask	= 1 << 0,
1535	},
1536	.ep[1] = {
1537		.ep = {
1538			.name	= "ep1",
1539			.ops	= &at91_ep_ops,
1540		},
1541		.udc		= &controller,
1542		.is_pingpong	= 1,
1543		.maxpacket	= 64,
1544		.int_mask	= 1 << 1,
1545	},
1546	.ep[2] = {
1547		.ep = {
1548			.name	= "ep2",
1549			.ops	= &at91_ep_ops,
1550		},
1551		.udc		= &controller,
1552		.is_pingpong	= 1,
1553		.maxpacket	= 64,
1554		.int_mask	= 1 << 2,
1555	},
1556	.ep[3] = {
1557		.ep = {
1558			/* could actually do bulk too */
1559			.name	= "ep3-int",
1560			.ops	= &at91_ep_ops,
1561		},
1562		.udc		= &controller,
1563		.maxpacket	= 8,
1564		.int_mask	= 1 << 3,
1565	},
1566	.ep[4] = {
1567		.ep = {
1568			.name	= "ep4",
1569			.ops	= &at91_ep_ops,
1570		},
1571		.udc		= &controller,
1572		.is_pingpong	= 1,
1573		.maxpacket	= 256,
1574		.int_mask	= 1 << 4,
1575	},
1576	.ep[5] = {
1577		.ep = {
1578			.name	= "ep5",
1579			.ops	= &at91_ep_ops,
1580		},
1581		.udc		= &controller,
1582		.is_pingpong	= 1,
1583		.maxpacket	= 256,
1584		.int_mask	= 1 << 5,
1585	},
1586	/* ep6 and ep7 are also reserved (custom silicon might use them) */
1587};
1588
1589static void at91_vbus_update(struct at91_udc *udc, unsigned value)
1590{
1591	value ^= udc->board.vbus_active_low;
1592	if (value != udc->vbus)
1593		at91_vbus_session(&udc->gadget, value);
1594}
1595
1596static irqreturn_t at91_vbus_irq(int irq, void *_udc)
1597{
1598	struct at91_udc	*udc = _udc;
1599
1600	/* vbus needs at least brief debouncing */
1601	udelay(10);
1602	at91_vbus_update(udc, gpio_get_value(udc->board.vbus_pin));
1603
1604	return IRQ_HANDLED;
1605}
1606
1607static void at91_vbus_timer_work(struct work_struct *work)
1608{
1609	struct at91_udc *udc = container_of(work, struct at91_udc,
1610					    vbus_timer_work);
1611
1612	at91_vbus_update(udc, gpio_get_value_cansleep(udc->board.vbus_pin));
1613
1614	if (!timer_pending(&udc->vbus_timer))
1615		mod_timer(&udc->vbus_timer, jiffies + VBUS_POLL_TIMEOUT);
1616}
1617
1618static void at91_vbus_timer(unsigned long data)
1619{
1620	struct at91_udc *udc = (struct at91_udc *)data;
1621
1622	/*
1623	 * If we are polling vbus it is likely that the gpio is on an
1624	 * bus such as i2c or spi which may sleep, so schedule some work
1625	 * to read the vbus gpio
1626	 */
1627	if (!work_pending(&udc->vbus_timer_work))
1628		schedule_work(&udc->vbus_timer_work);
1629}
1630
1631int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
1632		int (*bind)(struct usb_gadget *))
1633{
1634	struct at91_udc	*udc = &controller;
1635	int		retval;
1636	unsigned long	flags;
1637
1638	if (!driver
1639			|| driver->speed < USB_SPEED_FULL
1640			|| !bind
1641			|| !driver->setup) {
1642		DBG("bad parameter.\n");
1643		return -EINVAL;
1644	}
1645
1646	if (udc->driver) {
1647		DBG("UDC already has a gadget driver\n");
1648		return -EBUSY;
1649	}
1650
1651	udc->driver = driver;
1652	udc->gadget.dev.driver = &driver->driver;
1653	dev_set_drvdata(&udc->gadget.dev, &driver->driver);
1654	udc->enabled = 1;
1655	udc->selfpowered = 1;
1656
1657	retval = bind(&udc->gadget);
1658	if (retval) {
1659		DBG("bind() returned %d\n", retval);
1660		udc->driver = NULL;
1661		udc->gadget.dev.driver = NULL;
1662		dev_set_drvdata(&udc->gadget.dev, NULL);
1663		udc->enabled = 0;
1664		udc->selfpowered = 0;
1665		return retval;
1666	}
1667
1668	spin_lock_irqsave(&udc->lock, flags);
1669	pullup(udc, 1);
1670	spin_unlock_irqrestore(&udc->lock, flags);
1671
1672	DBG("bound to %s\n", driver->driver.name);
1673	return 0;
1674}
1675EXPORT_SYMBOL(usb_gadget_probe_driver);
1676
1677int usb_gadget_unregister_driver (struct usb_gadget_driver *driver)
1678{
1679	struct at91_udc *udc = &controller;
1680	unsigned long	flags;
1681
1682	if (!driver || driver != udc->driver || !driver->unbind)
1683		return -EINVAL;
1684
1685	spin_lock_irqsave(&udc->lock, flags);
1686	udc->enabled = 0;
1687	at91_udp_write(udc, AT91_UDP_IDR, ~0);
1688	pullup(udc, 0);
1689	spin_unlock_irqrestore(&udc->lock, flags);
1690
1691	driver->unbind(&udc->gadget);
1692	udc->gadget.dev.driver = NULL;
1693	dev_set_drvdata(&udc->gadget.dev, NULL);
1694	udc->driver = NULL;
1695
1696	DBG("unbound from %s\n", driver->driver.name);
1697	return 0;
1698}
1699EXPORT_SYMBOL (usb_gadget_unregister_driver);
1700
1701/*-------------------------------------------------------------------------*/
1702
1703static void at91udc_shutdown(struct platform_device *dev)
1704{
1705	struct at91_udc *udc = platform_get_drvdata(dev);
1706	unsigned long	flags;
1707
1708	/* force disconnect on reboot */
1709	spin_lock_irqsave(&udc->lock, flags);
1710	pullup(platform_get_drvdata(dev), 0);
1711	spin_unlock_irqrestore(&udc->lock, flags);
1712}
1713
1714static int __init at91udc_probe(struct platform_device *pdev)
1715{
1716	struct device	*dev = &pdev->dev;
1717	struct at91_udc	*udc;
1718	int		retval;
1719	struct resource	*res;
1720
1721	if (!dev->platform_data) {
1722		/* small (so we copy it) but critical! */
1723		DBG("missing platform_data\n");
1724		return -ENODEV;
1725	}
1726
1727	if (pdev->num_resources != 2) {
1728		DBG("invalid num_resources\n");
1729		return -ENODEV;
1730	}
1731	if ((pdev->resource[0].flags != IORESOURCE_MEM)
1732			|| (pdev->resource[1].flags != IORESOURCE_IRQ)) {
1733		DBG("invalid resource type\n");
1734		return -ENODEV;
1735	}
1736
1737	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1738	if (!res)
1739		return -ENXIO;
1740
1741	if (!request_mem_region(res->start, resource_size(res), driver_name)) {
1742		DBG("someone's using UDC memory\n");
1743		return -EBUSY;
1744	}
1745
1746	/* init software state */
1747	udc = &controller;
1748	udc->gadget.dev.parent = dev;
1749	udc->board = *(struct at91_udc_data *) dev->platform_data;
1750	udc->pdev = pdev;
1751	udc->enabled = 0;
1752	spin_lock_init(&udc->lock);
1753
1754	/* rm9200 needs manual D+ pullup; off by default */
1755	if (cpu_is_at91rm9200()) {
1756		if (udc->board.pullup_pin <= 0) {
1757			DBG("no D+ pullup?\n");
1758			retval = -ENODEV;
1759			goto fail0;
1760		}
1761		retval = gpio_request(udc->board.pullup_pin, "udc_pullup");
1762		if (retval) {
1763			DBG("D+ pullup is busy\n");
1764			goto fail0;
1765		}
1766		gpio_direction_output(udc->board.pullup_pin,
1767				udc->board.pullup_active_low);
1768	}
1769
1770	/* newer chips have more FIFO memory than rm9200 */
1771	if (cpu_is_at91sam9260() || cpu_is_at91sam9g20()) {
1772		udc->ep[0].maxpacket = 64;
1773		udc->ep[3].maxpacket = 64;
1774		udc->ep[4].maxpacket = 512;
1775		udc->ep[5].maxpacket = 512;
1776	} else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
1777		udc->ep[3].maxpacket = 64;
1778	} else if (cpu_is_at91sam9263()) {
1779		udc->ep[0].maxpacket = 64;
1780		udc->ep[3].maxpacket = 64;
1781	}
1782
1783	udc->udp_baseaddr = ioremap(res->start, resource_size(res));
1784	if (!udc->udp_baseaddr) {
1785		retval = -ENOMEM;
1786		goto fail0a;
1787	}
1788
1789	udc_reinit(udc);
1790
1791	/* get interface and function clocks */
1792	udc->iclk = clk_get(dev, "udc_clk");
1793	udc->fclk = clk_get(dev, "udpck");
1794	if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk)) {
1795		DBG("clocks missing\n");
1796		retval = -ENODEV;
1797		/* NOTE: we "know" here that refcounts on these are NOPs */
1798		goto fail0b;
1799	}
1800
1801	retval = device_register(&udc->gadget.dev);
1802	if (retval < 0) {
1803		put_device(&udc->gadget.dev);
1804		goto fail0b;
1805	}
1806
1807	/* don't do anything until we have both gadget driver and VBUS */
1808	clk_enable(udc->iclk);
1809	at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
1810	at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
1811	/* Clear all pending interrupts - UDP may be used by bootloader. */
1812	at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
1813	clk_disable(udc->iclk);
1814
1815	/* request UDC and maybe VBUS irqs */
1816	udc->udp_irq = platform_get_irq(pdev, 0);
1817	retval = request_irq(udc->udp_irq, at91_udc_irq,
1818			IRQF_DISABLED, driver_name, udc);
1819	if (retval < 0) {
1820		DBG("request irq %d failed\n", udc->udp_irq);
1821		goto fail1;
1822	}
1823	if (udc->board.vbus_pin > 0) {
1824		retval = gpio_request(udc->board.vbus_pin, "udc_vbus");
1825		if (retval < 0) {
1826			DBG("request vbus pin failed\n");
1827			goto fail2;
1828		}
1829		gpio_direction_input(udc->board.vbus_pin);
1830
1831		/*
1832		 * Get the initial state of VBUS - we cannot expect
1833		 * a pending interrupt.
1834		 */
1835		udc->vbus = gpio_get_value_cansleep(udc->board.vbus_pin) ^
1836			udc->board.vbus_active_low;
1837
1838		if (udc->board.vbus_polled) {
1839			INIT_WORK(&udc->vbus_timer_work, at91_vbus_timer_work);
1840			setup_timer(&udc->vbus_timer, at91_vbus_timer,
1841				    (unsigned long)udc);
1842			mod_timer(&udc->vbus_timer,
1843				  jiffies + VBUS_POLL_TIMEOUT);
1844		} else {
1845			if (request_irq(udc->board.vbus_pin, at91_vbus_irq,
1846					IRQF_DISABLED, driver_name, udc)) {
1847				DBG("request vbus irq %d failed\n",
1848				    udc->board.vbus_pin);
1849				retval = -EBUSY;
1850				goto fail3;
1851			}
1852		}
1853	} else {
1854		DBG("no VBUS detection, assuming always-on\n");
1855		udc->vbus = 1;
1856	}
1857	dev_set_drvdata(dev, udc);
1858	device_init_wakeup(dev, 1);
1859	create_debug_file(udc);
1860
1861	INFO("%s version %s\n", driver_name, DRIVER_VERSION);
1862	return 0;
1863
1864fail3:
1865	if (udc->board.vbus_pin > 0)
1866		gpio_free(udc->board.vbus_pin);
1867fail2:
1868	free_irq(udc->udp_irq, udc);
1869fail1:
1870	device_unregister(&udc->gadget.dev);
1871fail0b:
1872	iounmap(udc->udp_baseaddr);
1873fail0a:
1874	if (cpu_is_at91rm9200())
1875		gpio_free(udc->board.pullup_pin);
1876fail0:
1877	release_mem_region(res->start, resource_size(res));
1878	DBG("%s probe failed, %d\n", driver_name, retval);
1879	return retval;
1880}
1881
1882static int __exit at91udc_remove(struct platform_device *pdev)
1883{
1884	struct at91_udc *udc = platform_get_drvdata(pdev);
1885	struct resource *res;
1886	unsigned long	flags;
1887
1888	DBG("remove\n");
1889
1890	if (udc->driver)
1891		return -EBUSY;
1892
1893	spin_lock_irqsave(&udc->lock, flags);
1894	pullup(udc, 0);
1895	spin_unlock_irqrestore(&udc->lock, flags);
1896
1897	device_init_wakeup(&pdev->dev, 0);
1898	remove_debug_file(udc);
1899	if (udc->board.vbus_pin > 0) {
1900		free_irq(udc->board.vbus_pin, udc);
1901		gpio_free(udc->board.vbus_pin);
1902	}
1903	free_irq(udc->udp_irq, udc);
1904	device_unregister(&udc->gadget.dev);
1905
1906	iounmap(udc->udp_baseaddr);
1907
1908	if (cpu_is_at91rm9200())
1909		gpio_free(udc->board.pullup_pin);
1910
1911	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1912	release_mem_region(res->start, resource_size(res));
1913
1914	clk_put(udc->iclk);
1915	clk_put(udc->fclk);
1916
1917	return 0;
1918}
1919
1920#ifdef CONFIG_PM
1921static int at91udc_suspend(struct platform_device *pdev, pm_message_t mesg)
1922{
1923	struct at91_udc *udc = platform_get_drvdata(pdev);
1924	int		wake = udc->driver && device_may_wakeup(&pdev->dev);
1925	unsigned long	flags;
1926
1927	/* Unless we can act normally to the host (letting it wake us up
1928	 * whenever it has work for us) force disconnect.  Wakeup requires
1929	 * PLLB for USB events (signaling for reset, wakeup, or incoming
1930	 * tokens) and VBUS irqs (on systems which support them).
1931	 */
1932	if ((!udc->suspended && udc->addr)
1933			|| !wake
1934			|| at91_suspend_entering_slow_clock()) {
1935		spin_lock_irqsave(&udc->lock, flags);
1936		pullup(udc, 0);
1937		wake = 0;
1938		spin_unlock_irqrestore(&udc->lock, flags);
1939	} else
1940		enable_irq_wake(udc->udp_irq);
1941
1942	ud

Large files files are truncated, but you can click here to view the full file