Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
   1/*
   2 *	driver/usb/gadget/imx_udc.c
   3 *
   4 *	Copyright (C) 2005 Mike Lee <eemike@gmail.com>
   5 *	Copyright (C) 2008 Darius Augulis <augulis.darius@gmail.com>
   6 *
   7 *	This program is free software; you can redistribute it and/or modify
   8 *	it under the terms of the GNU General Public License as published by
   9 *	the Free Software Foundation; either version 2 of the License, or
  10 *	(at your option) any later version.
  11 *
  12 *	This program is distributed in the hope that it will be useful,
  13 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 *	GNU General Public License for more details.
  16 */
  17
  18#include <linux/init.h>
  19#include <linux/kernel.h>
  20#include <linux/platform_device.h>
  21#include <linux/module.h>
  22#include <linux/errno.h>
  23#include <linux/list.h>
  24#include <linux/interrupt.h>
  25#include <linux/io.h>
  26#include <linux/irq.h>
  27#include <linux/device.h>
  28#include <linux/dma-mapping.h>
  29#include <linux/clk.h>
  30#include <linux/delay.h>
  31#include <linux/timer.h>
  32#include <linux/slab.h>
  33#include <linux/prefetch.h>
  34
  35#include <linux/usb/ch9.h>
  36#include <linux/usb/gadget.h>
  37
  38#include <mach/usb.h>
  39#include <mach/hardware.h>
  40
  41#include "imx_udc.h"
  42
  43static const char driver_name[] = "imx_udc";
  44static const char ep0name[] = "ep0";
  45
  46void ep0_chg_stat(const char *label, struct imx_udc_struct *imx_usb,
  47							enum ep0_state stat);
  48
  49/*******************************************************************************
  50 * IMX UDC hardware related functions
  51 *******************************************************************************
  52 */
  53
  54void imx_udc_enable(struct imx_udc_struct *imx_usb)
  55{
  56	int temp = __raw_readl(imx_usb->base + USB_CTRL);
  57	__raw_writel(temp | CTRL_FE_ENA | CTRL_AFE_ENA,
  58						imx_usb->base + USB_CTRL);
  59	imx_usb->gadget.speed = USB_SPEED_FULL;
  60}
  61
  62void imx_udc_disable(struct imx_udc_struct *imx_usb)
  63{
  64	int temp = __raw_readl(imx_usb->base + USB_CTRL);
  65
  66	__raw_writel(temp & ~(CTRL_FE_ENA | CTRL_AFE_ENA),
  67		 imx_usb->base + USB_CTRL);
  68
  69	ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
  70	imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
  71}
  72
  73void imx_udc_reset(struct imx_udc_struct *imx_usb)
  74{
  75	int temp = __raw_readl(imx_usb->base + USB_ENAB);
  76
  77	/* set RST bit */
  78	__raw_writel(temp | ENAB_RST, imx_usb->base + USB_ENAB);
  79
  80	/* wait RST bit to clear */
  81	do {} while (__raw_readl(imx_usb->base + USB_ENAB) & ENAB_RST);
  82
  83	/* wait CFG bit to assert */
  84	do {} while (!(__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG));
  85
  86	/* udc module is now ready */
  87}
  88
  89void imx_udc_config(struct imx_udc_struct *imx_usb)
  90{
  91	u8 ep_conf[5];
  92	u8 i, j, cfg;
  93	struct imx_ep_struct *imx_ep;
  94
  95	/* wait CFG bit to assert */
  96	do {} while (!(__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG));
  97
  98	/* Download the endpoint buffer for endpoint 0. */
  99	for (j = 0; j < 5; j++) {
 100		i = (j == 2 ? imx_usb->imx_ep[0].fifosize : 0x00);
 101		__raw_writeb(i, imx_usb->base + USB_DDAT);
 102		do {} while (__raw_readl(imx_usb->base + USB_DADR) & DADR_BSY);
 103	}
 104
 105	/* Download the endpoint buffers for endpoints 1-5.
 106	 * We specify two configurations, one interface
 107	 */
 108	for (cfg = 1; cfg < 3; cfg++) {
 109		for (i = 1; i < IMX_USB_NB_EP; i++) {
 110			imx_ep = &imx_usb->imx_ep[i];
 111			/* EP no | Config no */
 112			ep_conf[0] = (i << 4) | (cfg << 2);
 113			/* Type | Direction */
 114			ep_conf[1] = (imx_ep->bmAttributes << 3) |
 115					(EP_DIR(imx_ep) << 2);
 116			/* Max packet size */
 117			ep_conf[2] = imx_ep->fifosize;
 118			/* TRXTYP */
 119			ep_conf[3] = 0xC0;
 120			/* FIFO no */
 121			ep_conf[4] = i;
 122
 123			D_INI(imx_usb->dev,
 124				"<%s> ep%d_conf[%d]:"
 125				"[%02x-%02x-%02x-%02x-%02x]\n",
 126				__func__, i, cfg,
 127				ep_conf[0], ep_conf[1], ep_conf[2],
 128				ep_conf[3], ep_conf[4]);
 129
 130			for (j = 0; j < 5; j++) {
 131				__raw_writeb(ep_conf[j],
 132					imx_usb->base + USB_DDAT);
 133				do {} while (__raw_readl(imx_usb->base
 134								+ USB_DADR)
 135					& DADR_BSY);
 136			}
 137		}
 138	}
 139
 140	/* wait CFG bit to clear */
 141	do {} while (__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG);
 142}
 143
 144void imx_udc_init_irq(struct imx_udc_struct *imx_usb)
 145{
 146	int i;
 147
 148	/* Mask and clear all irqs */
 149	__raw_writel(0xFFFFFFFF, imx_usb->base + USB_MASK);
 150	__raw_writel(0xFFFFFFFF, imx_usb->base + USB_INTR);
 151	for (i = 0; i < IMX_USB_NB_EP; i++) {
 152		__raw_writel(0x1FF, imx_usb->base + USB_EP_MASK(i));
 153		__raw_writel(0x1FF, imx_usb->base + USB_EP_INTR(i));
 154	}
 155
 156	/* Enable USB irqs */
 157	__raw_writel(INTR_MSOF | INTR_FRAME_MATCH, imx_usb->base + USB_MASK);
 158
 159	/* Enable EP0 irqs */
 160	__raw_writel(0x1FF & ~(EPINTR_DEVREQ | EPINTR_MDEVREQ | EPINTR_EOT
 161		| EPINTR_EOF | EPINTR_FIFO_EMPTY | EPINTR_FIFO_FULL),
 162		imx_usb->base + USB_EP_MASK(0));
 163}
 164
 165void imx_udc_init_ep(struct imx_udc_struct *imx_usb)
 166{
 167	int i, max, temp;
 168	struct imx_ep_struct *imx_ep;
 169	for (i = 0; i < IMX_USB_NB_EP; i++) {
 170		imx_ep = &imx_usb->imx_ep[i];
 171		switch (imx_ep->fifosize) {
 172		case 8:
 173			max = 0;
 174			break;
 175		case 16:
 176			max = 1;
 177			break;
 178		case 32:
 179			max = 2;
 180			break;
 181		case 64:
 182			max = 3;
 183			break;
 184		default:
 185			max = 1;
 186			break;
 187		}
 188		temp = (EP_DIR(imx_ep) << 7) | (max << 5)
 189			| (imx_ep->bmAttributes << 3);
 190		__raw_writel(temp, imx_usb->base + USB_EP_STAT(i));
 191		__raw_writel(temp | EPSTAT_FLUSH,
 192						imx_usb->base + USB_EP_STAT(i));
 193		D_INI(imx_usb->dev, "<%s> ep%d_stat %08x\n", __func__, i,
 194			__raw_readl(imx_usb->base + USB_EP_STAT(i)));
 195	}
 196}
 197
 198void imx_udc_init_fifo(struct imx_udc_struct *imx_usb)
 199{
 200	int i, temp;
 201	struct imx_ep_struct *imx_ep;
 202	for (i = 0; i < IMX_USB_NB_EP; i++) {
 203		imx_ep = &imx_usb->imx_ep[i];
 204
 205		/* Fifo control */
 206		temp = EP_DIR(imx_ep) ? 0x0B000000 : 0x0F000000;
 207		__raw_writel(temp, imx_usb->base + USB_EP_FCTRL(i));
 208		D_INI(imx_usb->dev, "<%s> ep%d_fctrl %08x\n", __func__, i,
 209			__raw_readl(imx_usb->base + USB_EP_FCTRL(i)));
 210
 211		/* Fifo alarm */
 212		temp = (i ? imx_ep->fifosize / 2 : 0);
 213		__raw_writel(temp, imx_usb->base + USB_EP_FALRM(i));
 214		D_INI(imx_usb->dev, "<%s> ep%d_falrm %08x\n", __func__, i,
 215			__raw_readl(imx_usb->base + USB_EP_FALRM(i)));
 216	}
 217}
 218
 219static void imx_udc_init(struct imx_udc_struct *imx_usb)
 220{
 221	/* Reset UDC */
 222	imx_udc_reset(imx_usb);
 223
 224	/* Download config to enpoint buffer */
 225	imx_udc_config(imx_usb);
 226
 227	/* Setup interrups */
 228	imx_udc_init_irq(imx_usb);
 229
 230	/* Setup endpoints */
 231	imx_udc_init_ep(imx_usb);
 232
 233	/* Setup fifos */
 234	imx_udc_init_fifo(imx_usb);
 235}
 236
 237void imx_ep_irq_enable(struct imx_ep_struct *imx_ep)
 238{
 239
 240	int i = EP_NO(imx_ep);
 241
 242	__raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_MASK(i));
 243	__raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_INTR(i));
 244	__raw_writel(0x1FF & ~(EPINTR_EOT | EPINTR_EOF),
 245		imx_ep->imx_usb->base + USB_EP_MASK(i));
 246}
 247
 248void imx_ep_irq_disable(struct imx_ep_struct *imx_ep)
 249{
 250
 251	int i = EP_NO(imx_ep);
 252
 253	__raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_MASK(i));
 254	__raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_INTR(i));
 255}
 256
 257int imx_ep_empty(struct imx_ep_struct *imx_ep)
 258{
 259	struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
 260
 261	return __raw_readl(imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
 262			& FSTAT_EMPTY;
 263}
 264
 265unsigned imx_fifo_bcount(struct imx_ep_struct *imx_ep)
 266{
 267	struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
 268
 269	return (__raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)))
 270			& EPSTAT_BCOUNT) >> 16;
 271}
 272
 273void imx_flush(struct imx_ep_struct *imx_ep)
 274{
 275	struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
 276
 277	int temp = __raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
 278	__raw_writel(temp | EPSTAT_FLUSH,
 279		imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
 280}
 281
 282void imx_ep_stall(struct imx_ep_struct *imx_ep)
 283{
 284	struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
 285	int temp, i;
 286
 287	D_ERR(imx_usb->dev,
 288		"<%s> Forced stall on %s\n", __func__, imx_ep->ep.name);
 289
 290	imx_flush(imx_ep);
 291
 292	/* Special care for ep0 */
 293	if (!EP_NO(imx_ep)) {
 294		temp = __raw_readl(imx_usb->base + USB_CTRL);
 295		__raw_writel(temp | CTRL_CMDOVER | CTRL_CMDERROR,
 296						imx_usb->base + USB_CTRL);
 297		do { } while (__raw_readl(imx_usb->base + USB_CTRL)
 298						& CTRL_CMDOVER);
 299		temp = __raw_readl(imx_usb->base + USB_CTRL);
 300		__raw_writel(temp & ~CTRL_CMDERROR, imx_usb->base + USB_CTRL);
 301	}
 302	else {
 303		temp = __raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
 304		__raw_writel(temp | EPSTAT_STALL,
 305			imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
 306
 307		for (i = 0; i < 100; i ++) {
 308			temp = __raw_readl(imx_usb->base
 309						+ USB_EP_STAT(EP_NO(imx_ep)));
 310			if (!(temp & EPSTAT_STALL))
 311	 			break;
 312	 		udelay(20);
 313	 	}
 314		if (i == 100)
 315			D_ERR(imx_usb->dev, "<%s> Non finished stall on %s\n",
 316				__func__, imx_ep->ep.name);
 317	}
 318}
 319
 320static int imx_udc_get_frame(struct usb_gadget *_gadget)
 321{
 322	struct imx_udc_struct *imx_usb = container_of(_gadget,
 323			struct imx_udc_struct, gadget);
 324
 325	return __raw_readl(imx_usb->base + USB_FRAME) & 0x7FF;
 326}
 327
 328static int imx_udc_wakeup(struct usb_gadget *_gadget)
 329{
 330	return 0;
 331}
 332
 333/*******************************************************************************
 334 * USB request control functions
 335 *******************************************************************************
 336 */
 337
 338static void ep_add_request(struct imx_ep_struct *imx_ep,
 339							struct imx_request *req)
 340{
 341	if (unlikely(!req))
 342		return;
 343
 344	req->in_use = 1;
 345	list_add_tail(&req->queue, &imx_ep->queue);
 346}
 347
 348static void ep_del_request(struct imx_ep_struct *imx_ep,
 349							struct imx_request *req)
 350{
 351	if (unlikely(!req))
 352		return;
 353
 354	list_del_init(&req->queue);
 355	req->in_use = 0;
 356}
 357
 358static void done(struct imx_ep_struct *imx_ep,
 359					struct imx_request *req, int status)
 360{
 361	ep_del_request(imx_ep, req);
 362
 363	if (likely(req->req.status == -EINPROGRESS))
 364		req->req.status = status;
 365	else
 366		status = req->req.status;
 367
 368	if (status && status != -ESHUTDOWN)
 369		D_ERR(imx_ep->imx_usb->dev,
 370			"<%s> complete %s req %p stat %d len %u/%u\n", __func__,
 371			imx_ep->ep.name, &req->req, status,
 372			req->req.actual, req->req.length);
 373
 374	req->req.complete(&imx_ep->ep, &req->req);
 375}
 376
 377static void nuke(struct imx_ep_struct *imx_ep, int status)
 378{
 379	struct imx_request *req;
 380
 381	while (!list_empty(&imx_ep->queue)) {
 382		req = list_entry(imx_ep->queue.next, struct imx_request, queue);
 383		done(imx_ep, req, status);
 384	}
 385}
 386
 387/*******************************************************************************
 388 * Data tansfer over USB functions
 389 *******************************************************************************
 390 */
 391static int read_packet(struct imx_ep_struct *imx_ep, struct imx_request *req)
 392{
 393	u8	*buf;
 394	int	bytes_ep, bufferspace, count, i;
 395
 396	bytes_ep = imx_fifo_bcount(imx_ep);
 397	bufferspace = req->req.length - req->req.actual;
 398
 399	buf = req->req.buf + req->req.actual;
 400	prefetchw(buf);
 401
 402	if (unlikely(imx_ep_empty(imx_ep)))
 403		count = 0;	/* zlp */
 404	else
 405		count = min(bytes_ep, bufferspace);
 406
 407	for (i = count; i > 0; i--)
 408		*buf++ = __raw_readb(imx_ep->imx_usb->base
 409						+ USB_EP_FDAT0(EP_NO(imx_ep)));
 410	req->req.actual += count;
 411
 412	return count;
 413}
 414
 415static int write_packet(struct imx_ep_struct *imx_ep, struct imx_request *req)
 416{
 417	u8	*buf;
 418	int	length, count, temp;
 419
 420	if (unlikely(__raw_readl(imx_ep->imx_usb->base +
 421				 USB_EP_STAT(EP_NO(imx_ep))) & EPSTAT_ZLPS)) {
 422		D_TRX(imx_ep->imx_usb->dev, "<%s> zlp still queued in EP %s\n",
 423			__func__, imx_ep->ep.name);
 424		return -1;
 425	}
 426
 427	buf = req->req.buf + req->req.actual;
 428	prefetch(buf);
 429
 430	length = min(req->req.length - req->req.actual, (u32)imx_ep->fifosize);
 431
 432	if (imx_fifo_bcount(imx_ep) + length > imx_ep->fifosize) {
 433		D_TRX(imx_ep->imx_usb->dev, "<%s> packet overfill %s fifo\n",
 434			__func__, imx_ep->ep.name);
 435		return -1;
 436	}
 437
 438	req->req.actual += length;
 439	count = length;
 440
 441	if (!count && req->req.zero) {	/* zlp */
 442		temp = __raw_readl(imx_ep->imx_usb->base
 443			+ USB_EP_STAT(EP_NO(imx_ep)));
 444		__raw_writel(temp | EPSTAT_ZLPS, imx_ep->imx_usb->base
 445			+ USB_EP_STAT(EP_NO(imx_ep)));
 446		D_TRX(imx_ep->imx_usb->dev, "<%s> zero packet\n", __func__);
 447		return 0;
 448	}
 449
 450	while (count--) {
 451		if (count == 0) {	/* last byte */
 452			temp = __raw_readl(imx_ep->imx_usb->base
 453				+ USB_EP_FCTRL(EP_NO(imx_ep)));
 454			__raw_writel(temp | FCTRL_WFR, imx_ep->imx_usb->base
 455				+ USB_EP_FCTRL(EP_NO(imx_ep)));
 456		}
 457		__raw_writeb(*buf++,
 458			imx_ep->imx_usb->base + USB_EP_FDAT0(EP_NO(imx_ep)));
 459	}
 460
 461	return length;
 462}
 463
 464static int read_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
 465{
 466	int 	bytes = 0,
 467		count,
 468		completed = 0;
 469
 470	while (__raw_readl(imx_ep->imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
 471		& FSTAT_FR) {
 472			count = read_packet(imx_ep, req);
 473			bytes += count;
 474
 475			completed = (count != imx_ep->fifosize);
 476			if (completed || req->req.actual == req->req.length) {
 477				completed = 1;
 478				break;
 479			}
 480	}
 481
 482	if (completed || !req->req.length) {
 483		done(imx_ep, req, 0);
 484		D_REQ(imx_ep->imx_usb->dev, "<%s> %s req<%p> %s\n",
 485			__func__, imx_ep->ep.name, req,
 486			completed ? "completed" : "not completed");
 487		if (!EP_NO(imx_ep))
 488			ep0_chg_stat(__func__, imx_ep->imx_usb, EP0_IDLE);
 489	}
 490
 491	D_TRX(imx_ep->imx_usb->dev, "<%s> bytes read: %d\n", __func__, bytes);
 492
 493	return completed;
 494}
 495
 496static int write_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
 497{
 498	int	bytes = 0,
 499		count,
 500		completed = 0;
 501
 502	while (!completed) {
 503		count = write_packet(imx_ep, req);
 504		if (count < 0)
 505			break; /* busy */
 506		bytes += count;
 507
 508		/* last packet "must be" short (or a zlp) */
 509		completed = (count != imx_ep->fifosize);
 510
 511		if (unlikely(completed)) {
 512			done(imx_ep, req, 0);
 513			D_REQ(imx_ep->imx_usb->dev, "<%s> %s req<%p> %s\n",
 514				__func__, imx_ep->ep.name, req,
 515				completed ? "completed" : "not completed");
 516			if (!EP_NO(imx_ep))
 517				ep0_chg_stat(__func__,
 518						imx_ep->imx_usb, EP0_IDLE);
 519		}
 520	}
 521
 522	D_TRX(imx_ep->imx_usb->dev, "<%s> bytes sent: %d\n", __func__, bytes);
 523
 524	return completed;
 525}
 526
 527/*******************************************************************************
 528 * Endpoint handlers
 529 *******************************************************************************
 530 */
 531static int handle_ep(struct imx_ep_struct *imx_ep)
 532{
 533	struct imx_request *req;
 534	int completed = 0;
 535
 536	do {
 537		if (!list_empty(&imx_ep->queue))
 538			req = list_entry(imx_ep->queue.next,
 539				struct imx_request, queue);
 540		else {
 541			D_REQ(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
 542				__func__, imx_ep->ep.name);
 543			return 0;
 544		}
 545
 546		if (EP_DIR(imx_ep))	/* to host */
 547			completed = write_fifo(imx_ep, req);
 548		else			/* to device */
 549			completed = read_fifo(imx_ep, req);
 550
 551		dump_ep_stat(__func__, imx_ep);
 552
 553	} while (completed);
 554
 555	return 0;
 556}
 557
 558static int handle_ep0(struct imx_ep_struct *imx_ep)
 559{
 560	struct imx_request *req = NULL;
 561	int ret = 0;
 562
 563	if (!list_empty(&imx_ep->queue)) {
 564		req = list_entry(imx_ep->queue.next, struct imx_request, queue);
 565
 566		switch (imx_ep->imx_usb->ep0state) {
 567
 568		case EP0_IN_DATA_PHASE:			/* GET_DESCRIPTOR */
 569			write_fifo(imx_ep, req);
 570			break;
 571		case EP0_OUT_DATA_PHASE:		/* SET_DESCRIPTOR */
 572			read_fifo(imx_ep, req);
 573			break;
 574		default:
 575			D_EP0(imx_ep->imx_usb->dev,
 576				"<%s> ep0 i/o, odd state %d\n",
 577				__func__, imx_ep->imx_usb->ep0state);
 578			ep_del_request(imx_ep, req);
 579			ret = -EL2HLT;
 580			break;
 581		}
 582	}
 583
 584	else
 585		D_ERR(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
 586						__func__, imx_ep->ep.name);
 587
 588	return ret;
 589}
 590
 591static void handle_ep0_devreq(struct imx_udc_struct *imx_usb)
 592{
 593	struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
 594	union {
 595		struct usb_ctrlrequest	r;
 596		u8			raw[8];
 597		u32			word[2];
 598	} u;
 599	int temp, i;
 600
 601	nuke(imx_ep, -EPROTO);
 602
 603	/* read SETUP packet */
 604	for (i = 0; i < 2; i++) {
 605		if (imx_ep_empty(imx_ep)) {
 606			D_ERR(imx_usb->dev,
 607				"<%s> no setup packet received\n", __func__);
 608			goto stall;
 609		}
 610		u.word[i] = __raw_readl(imx_usb->base
 611						+ USB_EP_FDAT(EP_NO(imx_ep)));
 612	}
 613
 614	temp = imx_ep_empty(imx_ep);
 615	while (!imx_ep_empty(imx_ep)) {
 616		i = __raw_readl(imx_usb->base +	USB_EP_FDAT(EP_NO(imx_ep)));
 617		D_ERR(imx_usb->dev,
 618			"<%s> wrong to have extra bytes for setup : 0x%08x\n",
 619			__func__, i);
 620	}
 621	if (!temp)
 622		goto stall;
 623
 624	le16_to_cpus(&u.r.wValue);
 625	le16_to_cpus(&u.r.wIndex);
 626	le16_to_cpus(&u.r.wLength);
 627
 628	D_REQ(imx_usb->dev, "<%s> SETUP %02x.%02x v%04x i%04x l%04x\n",
 629		__func__, u.r.bRequestType, u.r.bRequest,
 630		u.r.wValue, u.r.wIndex, u.r.wLength);
 631
 632	if (imx_usb->set_config) {
 633		/* NACK the host by using CMDOVER */
 634		temp = __raw_readl(imx_usb->base + USB_CTRL);
 635		__raw_writel(temp | CTRL_CMDOVER, imx_usb->base + USB_CTRL);
 636
 637		D_ERR(imx_usb->dev,
 638			"<%s> set config req is pending, NACK the host\n",
 639			__func__);
 640		return;
 641	}
 642
 643	if (u.r.bRequestType & USB_DIR_IN)
 644		ep0_chg_stat(__func__, imx_usb, EP0_IN_DATA_PHASE);
 645	else
 646		ep0_chg_stat(__func__, imx_usb, EP0_OUT_DATA_PHASE);
 647
 648	i = imx_usb->driver->setup(&imx_usb->gadget, &u.r);
 649	if (i < 0) {
 650		D_ERR(imx_usb->dev, "<%s> device setup error %d\n",
 651			__func__, i);
 652		goto stall;
 653	}
 654
 655	return;
 656stall:
 657	D_ERR(imx_usb->dev, "<%s> protocol STALL\n", __func__);
 658	imx_ep_stall(imx_ep);
 659	ep0_chg_stat(__func__, imx_usb, EP0_STALL);
 660	return;
 661}
 662
 663/*******************************************************************************
 664 * USB gadget callback functions
 665 *******************************************************************************
 666 */
 667
 668static int imx_ep_enable(struct usb_ep *usb_ep,
 669				const struct usb_endpoint_descriptor *desc)
 670{
 671	struct imx_ep_struct *imx_ep = container_of(usb_ep,
 672						struct imx_ep_struct, ep);
 673	struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
 674	unsigned long flags;
 675
 676	if (!usb_ep
 677		|| !desc
 678		|| !EP_NO(imx_ep)
 679		|| desc->bDescriptorType != USB_DT_ENDPOINT
 680		|| imx_ep->bEndpointAddress != desc->bEndpointAddress) {
 681			D_ERR(imx_usb->dev,
 682				"<%s> bad ep or descriptor\n", __func__);
 683			return -EINVAL;
 684	}
 685
 686	if (imx_ep->bmAttributes != desc->bmAttributes) {
 687		D_ERR(imx_usb->dev,
 688			"<%s> %s type mismatch\n", __func__, usb_ep->name);
 689		return -EINVAL;
 690	}
 691
 692	if (imx_ep->fifosize < le16_to_cpu(desc->wMaxPacketSize)) {
 693		D_ERR(imx_usb->dev,
 694			"<%s> bad %s maxpacket\n", __func__, usb_ep->name);
 695		return -ERANGE;
 696	}
 697
 698	if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
 699		D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
 700		return -ESHUTDOWN;
 701	}
 702
 703	local_irq_save(flags);
 704
 705	imx_ep->stopped = 0;
 706	imx_flush(imx_ep);
 707	imx_ep_irq_enable(imx_ep);
 708
 709	local_irq_restore(flags);
 710
 711	D_EPX(imx_usb->dev, "<%s> ENABLED %s\n", __func__, usb_ep->name);
 712	return 0;
 713}
 714
 715static int imx_ep_disable(struct usb_ep *usb_ep)
 716{
 717	struct imx_ep_struct *imx_ep = container_of(usb_ep,
 718						struct imx_ep_struct, ep);
 719	unsigned long flags;
 720
 721	if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
 722		D_ERR(imx_ep->imx_usb->dev, "<%s> %s can not be disabled\n",
 723			__func__, usb_ep ? imx_ep->ep.name : NULL);
 724		return -EINVAL;
 725	}
 726
 727	local_irq_save(flags);
 728
 729	imx_ep->stopped = 1;
 730	nuke(imx_ep, -ESHUTDOWN);
 731	imx_flush(imx_ep);
 732	imx_ep_irq_disable(imx_ep);
 733
 734	local_irq_restore(flags);
 735
 736	D_EPX(imx_ep->imx_usb->dev,
 737		"<%s> DISABLED %s\n", __func__, usb_ep->name);
 738	return 0;
 739}
 740
 741static struct usb_request *imx_ep_alloc_request
 742					(struct usb_ep *usb_ep, gfp_t gfp_flags)
 743{
 744	struct imx_request *req;
 745
 746	if (!usb_ep)
 747		return NULL;
 748
 749	req = kzalloc(sizeof *req, gfp_flags);
 750	if (!req)
 751		return NULL;
 752
 753	INIT_LIST_HEAD(&req->queue);
 754	req->in_use = 0;
 755
 756	return &req->req;
 757}
 758
 759static void imx_ep_free_request
 760			(struct usb_ep *usb_ep, struct usb_request *usb_req)
 761{
 762	struct imx_request *req;
 763
 764	req = container_of(usb_req, struct imx_request, req);
 765	WARN_ON(!list_empty(&req->queue));
 766	kfree(req);
 767}
 768
 769static int imx_ep_queue
 770	(struct usb_ep *usb_ep, struct usb_request *usb_req, gfp_t gfp_flags)
 771{
 772	struct imx_ep_struct	*imx_ep;
 773	struct imx_udc_struct	*imx_usb;
 774	struct imx_request	*req;
 775	unsigned long		flags;
 776	int			ret = 0;
 777
 778	imx_ep = container_of(usb_ep, struct imx_ep_struct, ep);
 779	imx_usb = imx_ep->imx_usb;
 780	req = container_of(usb_req, struct imx_request, req);
 781
 782	/*
 783	  Special care on IMX udc.
 784	  Ignore enqueue when after set configuration from the
 785	  host. This assume all gadget drivers reply set
 786	  configuration with the next ep0 req enqueue.
 787	*/
 788	if (imx_usb->set_config && !EP_NO(imx_ep)) {
 789		imx_usb->set_config = 0;
 790		D_ERR(imx_usb->dev,
 791			"<%s> gadget reply set config\n", __func__);
 792		return 0;
 793	}
 794
 795	if (unlikely(!usb_req || !req || !usb_req->complete || !usb_req->buf)) {
 796		D_ERR(imx_usb->dev, "<%s> bad params\n", __func__);
 797		return -EINVAL;
 798	}
 799
 800	if (unlikely(!usb_ep || !imx_ep)) {
 801		D_ERR(imx_usb->dev, "<%s> bad ep\n", __func__);
 802		return -EINVAL;
 803	}
 804
 805	if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
 806		D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
 807		return -ESHUTDOWN;
 808	}
 809
 810	/* Debug */
 811	D_REQ(imx_usb->dev, "<%s> ep%d %s request for [%d] bytes\n",
 812		__func__, EP_NO(imx_ep),
 813		((!EP_NO(imx_ep) && imx_ep->imx_usb->ep0state
 814							== EP0_IN_DATA_PHASE)
 815		|| (EP_NO(imx_ep) && EP_DIR(imx_ep)))
 816					? "IN" : "OUT", usb_req->length);
 817	dump_req(__func__, imx_ep, usb_req);
 818
 819	if (imx_ep->stopped) {
 820		usb_req->status = -ESHUTDOWN;
 821		return -ESHUTDOWN;
 822	}
 823
 824	if (req->in_use) {
 825		D_ERR(imx_usb->dev,
 826			"<%s> refusing to queue req %p (already queued)\n",
 827			__func__, req);
 828		return 0;
 829	}
 830
 831	local_irq_save(flags);
 832
 833	usb_req->status = -EINPROGRESS;
 834	usb_req->actual = 0;
 835
 836	ep_add_request(imx_ep, req);
 837
 838	if (!EP_NO(imx_ep))
 839		ret = handle_ep0(imx_ep);
 840	else
 841		ret = handle_ep(imx_ep);
 842
 843	local_irq_restore(flags);
 844	return ret;
 845}
 846
 847static int imx_ep_dequeue(struct usb_ep *usb_ep, struct usb_request *usb_req)
 848{
 849
 850	struct imx_ep_struct *imx_ep = container_of
 851					(usb_ep, struct imx_ep_struct, ep);
 852	struct imx_request *req;
 853	unsigned long flags;
 854
 855	if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
 856		D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
 857		return -EINVAL;
 858	}
 859
 860	local_irq_save(flags);
 861
 862	/* make sure it's actually queued on this endpoint */
 863	list_for_each_entry(req, &imx_ep->queue, queue) {
 864		if (&req->req == usb_req)
 865			break;
 866	}
 867	if (&req->req != usb_req) {
 868		local_irq_restore(flags);
 869		return -EINVAL;
 870	}
 871
 872	done(imx_ep, req, -ECONNRESET);
 873
 874	local_irq_restore(flags);
 875	return 0;
 876}
 877
 878static int imx_ep_set_halt(struct usb_ep *usb_ep, int value)
 879{
 880	struct imx_ep_struct *imx_ep = container_of
 881					(usb_ep, struct imx_ep_struct, ep);
 882	unsigned long flags;
 883
 884	if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
 885		D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
 886		return -EINVAL;
 887	}
 888
 889	local_irq_save(flags);
 890
 891	if ((imx_ep->bEndpointAddress & USB_DIR_IN)
 892		&& !list_empty(&imx_ep->queue)) {
 893			local_irq_restore(flags);
 894			return -EAGAIN;
 895	}
 896
 897	imx_ep_stall(imx_ep);
 898
 899	local_irq_restore(flags);
 900
 901	D_EPX(imx_ep->imx_usb->dev, "<%s> %s halt\n", __func__, usb_ep->name);
 902	return 0;
 903}
 904
 905static int imx_ep_fifo_status(struct usb_ep *usb_ep)
 906{
 907	struct imx_ep_struct *imx_ep = container_of
 908					(usb_ep, struct imx_ep_struct, ep);
 909
 910	if (!usb_ep) {
 911		D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
 912		return -ENODEV;
 913	}
 914
 915	if (imx_ep->imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
 916		return 0;
 917	else
 918		return imx_fifo_bcount(imx_ep);
 919}
 920
 921static void imx_ep_fifo_flush(struct usb_ep *usb_ep)
 922{
 923	struct imx_ep_struct *imx_ep = container_of
 924					(usb_ep, struct imx_ep_struct, ep);
 925	unsigned long flags;
 926
 927	local_irq_save(flags);
 928
 929	if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
 930		D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
 931		local_irq_restore(flags);
 932		return;
 933	}
 934
 935	/* toggle and halt bits stay unchanged */
 936	imx_flush(imx_ep);
 937
 938	local_irq_restore(flags);
 939}
 940
 941static struct usb_ep_ops imx_ep_ops = {
 942	.enable		= imx_ep_enable,
 943	.disable	= imx_ep_disable,
 944
 945	.alloc_request	= imx_ep_alloc_request,
 946	.free_request	= imx_ep_free_request,
 947
 948	.queue		= imx_ep_queue,
 949	.dequeue	= imx_ep_dequeue,
 950
 951	.set_halt	= imx_ep_set_halt,
 952	.fifo_status	= imx_ep_fifo_status,
 953	.fifo_flush	= imx_ep_fifo_flush,
 954};
 955
 956/*******************************************************************************
 957 * USB endpoint control functions
 958 *******************************************************************************
 959 */
 960
 961void ep0_chg_stat(const char *label,
 962			struct imx_udc_struct *imx_usb, enum ep0_state stat)
 963{
 964	D_EP0(imx_usb->dev, "<%s> from %15s to %15s\n",
 965		label, state_name[imx_usb->ep0state], state_name[stat]);
 966
 967	if (imx_usb->ep0state == stat)
 968		return;
 969
 970	imx_usb->ep0state = stat;
 971}
 972
 973static void usb_init_data(struct imx_udc_struct *imx_usb)
 974{
 975	struct imx_ep_struct *imx_ep;
 976	u8 i;
 977
 978	/* device/ep0 records init */
 979	INIT_LIST_HEAD(&imx_usb->gadget.ep_list);
 980	INIT_LIST_HEAD(&imx_usb->gadget.ep0->ep_list);
 981	ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
 982
 983	/* basic endpoint records init */
 984	for (i = 0; i < IMX_USB_NB_EP; i++) {
 985		imx_ep = &imx_usb->imx_ep[i];
 986
 987		if (i) {
 988			list_add_tail(&imx_ep->ep.ep_list,
 989				&imx_usb->gadget.ep_list);
 990			imx_ep->stopped = 1;
 991		} else
 992			imx_ep->stopped = 0;
 993
 994		INIT_LIST_HEAD(&imx_ep->queue);
 995	}
 996}
 997
 998static void udc_stop_activity(struct imx_udc_struct *imx_usb,
 999					struct usb_gadget_driver *driver)
1000{
1001	struct imx_ep_struct *imx_ep;
1002	int i;
1003
1004	if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
1005		driver = NULL;
1006
1007	/* prevent new request submissions, kill any outstanding requests  */
1008	for (i = 1; i < IMX_USB_NB_EP; i++) {
1009		imx_ep = &imx_usb->imx_ep[i];
1010		imx_flush(imx_ep);
1011		imx_ep->stopped = 1;
1012		imx_ep_irq_disable(imx_ep);
1013		nuke(imx_ep, -ESHUTDOWN);
1014	}
1015
1016	imx_usb->cfg = 0;
1017	imx_usb->intf = 0;
1018	imx_usb->alt = 0;
1019
1020	if (driver)
1021		driver->disconnect(&imx_usb->gadget);
1022}
1023
1024/*******************************************************************************
1025 * Interrupt handlers
1026 *******************************************************************************
1027 */
1028
1029/*
1030 * Called when timer expires.
1031 * Timer is started when CFG_CHG is received.
1032 */
1033static void handle_config(unsigned long data)
1034{
1035	struct imx_udc_struct *imx_usb = (void *)data;
1036	struct usb_ctrlrequest u;
1037	int temp, cfg, intf, alt;
1038
1039	local_irq_disable();
1040
1041	temp = __raw_readl(imx_usb->base + USB_STAT);
1042	cfg  = (temp & STAT_CFG) >> 5;
1043	intf = (temp & STAT_INTF) >> 3;
1044	alt  =  temp & STAT_ALTSET;
1045
1046	D_REQ(imx_usb->dev,
1047		"<%s> orig config C=%d, I=%d, A=%d / "
1048		"req config C=%d, I=%d, A=%d\n",
1049		__func__, imx_usb->cfg, imx_usb->intf, imx_usb->alt,
1050		cfg, intf, alt);
1051
1052	if (cfg == 1 || cfg == 2) {
1053
1054		if (imx_usb->cfg != cfg) {
1055			u.bRequest = USB_REQ_SET_CONFIGURATION;
1056			u.bRequestType = USB_DIR_OUT |
1057					USB_TYPE_STANDARD |
1058					USB_RECIP_DEVICE;
1059			u.wValue = cfg;
1060			u.wIndex = 0;
1061			u.wLength = 0;
1062			imx_usb->cfg = cfg;
1063			imx_usb->driver->setup(&imx_usb->gadget, &u);
1064
1065		}
1066		if (imx_usb->intf != intf || imx_usb->alt != alt) {
1067			u.bRequest = USB_REQ_SET_INTERFACE;
1068			u.bRequestType = USB_DIR_OUT |
1069					  USB_TYPE_STANDARD |
1070					  USB_RECIP_INTERFACE;
1071			u.wValue = alt;
1072			u.wIndex = intf;
1073			u.wLength = 0;
1074			imx_usb->intf = intf;
1075			imx_usb->alt = alt;
1076			imx_usb->driver->setup(&imx_usb->gadget, &u);
1077		}
1078	}
1079
1080	imx_usb->set_config = 0;
1081
1082	local_irq_enable();
1083}
1084
1085static irqreturn_t imx_udc_irq(int irq, void *dev)
1086{
1087	struct imx_udc_struct *imx_usb = dev;
1088	int intr = __raw_readl(imx_usb->base + USB_INTR);
1089	int temp;
1090
1091	if (intr & (INTR_WAKEUP | INTR_SUSPEND | INTR_RESUME | INTR_RESET_START
1092			| INTR_RESET_STOP | INTR_CFG_CHG)) {
1093				dump_intr(__func__, intr, imx_usb->dev);
1094				dump_usb_stat(__func__, imx_usb);
1095	}
1096
1097	if (!imx_usb->driver)
1098		goto end_irq;
1099
1100	if (intr & INTR_SOF) {
1101		/* Copy from Freescale BSP.
1102		   We must enable SOF intr and set CMDOVER.
1103		   Datasheet don't specifiy this action, but it
1104		   is done in Freescale BSP, so just copy it.
1105		*/
1106		if (imx_usb->ep0state == EP0_IDLE) {
1107			temp = __raw_readl(imx_usb->base + USB_CTRL);
1108			__raw_writel(temp | CTRL_CMDOVER,
1109						imx_usb->base + USB_CTRL);
1110		}
1111	}
1112
1113	if (intr & INTR_CFG_CHG) {
1114		/* A workaround of serious IMX UDC bug.
1115		   Handling of CFG_CHG should be delayed for some time, because
1116		   IMX does not NACK the host when CFG_CHG interrupt is pending.
1117		   There is no time to handle current CFG_CHG
1118		   if next CFG_CHG or SETUP packed is send immediately.
1119		   We have to clear CFG_CHG, start the timer and
1120		   NACK the host by setting CTRL_CMDOVER
1121		   if it sends any SETUP packet.
1122		   When timer expires, handler is called to handle configuration
1123		   changes. While CFG_CHG is not handled (set_config=1),
1124		   we must NACK the host to every SETUP packed.
1125		   This delay prevents from going out of sync with host.
1126		 */
1127		__raw_writel(INTR_CFG_CHG, imx_usb->base + USB_INTR);
1128		imx_usb->set_config = 1;
1129		mod_timer(&imx_usb->timer, jiffies + 5);
1130		goto end_irq;
1131	}
1132
1133	if (intr & INTR_WAKEUP) {
1134		if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN
1135			&& imx_usb->driver && imx_usb->driver->resume)
1136				imx_usb->driver->resume(&imx_usb->gadget);
1137		imx_usb->set_config = 0;
1138		del_timer(&imx_usb->timer);
1139		imx_usb->gadget.speed = USB_SPEED_FULL;
1140	}
1141
1142	if (intr & INTR_SUSPEND) {
1143		if (imx_usb->gadget.speed != USB_SPEED_UNKNOWN
1144			&& imx_usb->driver && imx_usb->driver->suspend)
1145				imx_usb->driver->suspend(&imx_usb->gadget);
1146		imx_usb->set_config = 0;
1147		del_timer(&imx_usb->timer);
1148		imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1149	}
1150
1151	if (intr & INTR_RESET_START) {
1152		__raw_writel(intr, imx_usb->base + USB_INTR);
1153		udc_stop_activity(imx_usb, imx_usb->driver);
1154		imx_usb->set_config = 0;
1155		del_timer(&imx_usb->timer);
1156		imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1157	}
1158
1159	if (intr & INTR_RESET_STOP)
1160		imx_usb->gadget.speed = USB_SPEED_FULL;
1161
1162end_irq:
1163	__raw_writel(intr, imx_usb->base + USB_INTR);
1164	return IRQ_HANDLED;
1165}
1166
1167static irqreturn_t imx_udc_ctrl_irq(int irq, void *dev)
1168{
1169	struct imx_udc_struct *imx_usb = dev;
1170	struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
1171	int intr = __raw_readl(imx_usb->base + USB_EP_INTR(0));
1172
1173	dump_ep_intr(__func__, 0, intr, imx_usb->dev);
1174
1175	if (!imx_usb->driver) {
1176		__raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1177		return IRQ_HANDLED;
1178	}
1179
1180	/* DEVREQ has highest priority */
1181	if (intr & (EPINTR_DEVREQ | EPINTR_MDEVREQ))
1182		handle_ep0_devreq(imx_usb);
1183	/* Seem i.MX is missing EOF interrupt sometimes.
1184	 * Therefore we don't monitor EOF.
1185	 * We call handle_ep0() only if a request is queued for ep0.
1186	 */
1187	else if (!list_empty(&imx_ep->queue))
1188		handle_ep0(imx_ep);
1189
1190	__raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1191
1192	return IRQ_HANDLED;
1193}
1194
1195#ifndef MX1_INT_USBD0
1196#define MX1_INT_USBD0 MX1_USBD_INT0
1197#endif
1198
1199static irqreturn_t imx_udc_bulk_irq(int irq, void *dev)
1200{
1201	struct imx_udc_struct *imx_usb = dev;
1202	struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[irq - MX1_INT_USBD0];
1203	int intr = __raw_readl(imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1204
1205	dump_ep_intr(__func__, irq - MX1_INT_USBD0, intr, imx_usb->dev);
1206
1207	if (!imx_usb->driver) {
1208		__raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1209		return IRQ_HANDLED;
1210	}
1211
1212	handle_ep(imx_ep);
1213
1214	__raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1215
1216	return IRQ_HANDLED;
1217}
1218
1219irq_handler_t intr_handler(int i)
1220{
1221	switch (i) {
1222	case 0:
1223		return imx_udc_ctrl_irq;
1224	case 1:
1225	case 2:
1226	case 3:
1227	case 4:
1228	case 5:
1229		return imx_udc_bulk_irq;
1230	default:
1231		return imx_udc_irq;
1232	}
1233}
1234
1235/*******************************************************************************
1236 * Static defined IMX UDC structure
1237 *******************************************************************************
1238 */
1239
1240static int imx_udc_start(struct usb_gadget_driver *driver,
1241		int (*bind)(struct usb_gadget *));
1242static int imx_udc_stop(struct usb_gadget_driver *driver);
1243static const struct usb_gadget_ops imx_udc_ops = {
1244	.get_frame	 = imx_udc_get_frame,
1245	.wakeup		 = imx_udc_wakeup,
1246	.start		= imx_udc_start,
1247	.stop		= imx_udc_stop,
1248};
1249
1250static struct imx_udc_struct controller = {
1251	.gadget = {
1252		.ops		= &imx_udc_ops,
1253		.ep0		= &controller.imx_ep[0].ep,
1254		.name		= driver_name,
1255		.dev = {
1256			.init_name	= "gadget",
1257		},
1258	},
1259
1260	.imx_ep[0] = {
1261		.ep = {
1262			.name		= ep0name,
1263			.ops		= &imx_ep_ops,
1264			.maxpacket	= 32,
1265		},
1266		.imx_usb		= &controller,
1267		.fifosize		= 32,
1268		.bEndpointAddress	= 0,
1269		.bmAttributes		= USB_ENDPOINT_XFER_CONTROL,
1270	 },
1271	.imx_ep[1] = {
1272		.ep = {
1273			.name		= "ep1in-bulk",
1274			.ops		= &imx_ep_ops,
1275			.maxpacket	= 64,
1276		},
1277		.imx_usb		= &controller,
1278		.fifosize		= 64,
1279		.bEndpointAddress	= USB_DIR_IN | 1,
1280		.bmAttributes		= USB_ENDPOINT_XFER_BULK,
1281	 },
1282	.imx_ep[2] = {
1283		.ep = {
1284			.name		= "ep2out-bulk",
1285			.ops		= &imx_ep_ops,
1286			.maxpacket	= 64,
1287		},
1288		.imx_usb		= &controller,
1289		.fifosize		= 64,
1290		.bEndpointAddress	= USB_DIR_OUT | 2,
1291		.bmAttributes		= USB_ENDPOINT_XFER_BULK,
1292	 },
1293	.imx_ep[3] = {
1294		.ep = {
1295			.name		= "ep3out-bulk",
1296			.ops		= &imx_ep_ops,
1297			.maxpacket	= 32,
1298		},
1299		.imx_usb		= &controller,
1300		.fifosize		= 32,
1301		.bEndpointAddress 	= USB_DIR_OUT | 3,
1302		.bmAttributes		= USB_ENDPOINT_XFER_BULK,
1303	 },
1304	.imx_ep[4] = {
1305		.ep = {
1306			.name		= "ep4in-int",
1307			.ops		= &imx_ep_ops,
1308			.maxpacket	= 32,
1309		 },
1310		.imx_usb		= &controller,
1311		.fifosize		= 32,
1312		.bEndpointAddress 	= USB_DIR_IN | 4,
1313		.bmAttributes		= USB_ENDPOINT_XFER_INT,
1314	 },
1315	.imx_ep[5] = {
1316		.ep = {
1317			.name		= "ep5out-int",
1318			.ops		= &imx_ep_ops,
1319			.maxpacket	= 32,
1320		},
1321		.imx_usb		= &controller,
1322		.fifosize		= 32,
1323		.bEndpointAddress 	= USB_DIR_OUT | 5,
1324		.bmAttributes		= USB_ENDPOINT_XFER_INT,
1325	 },
1326};
1327
1328/*******************************************************************************
1329 * USB gadget driver functions
1330 *******************************************************************************
1331 */
1332static int imx_udc_start(struct usb_gadget_driver *driver,
1333		int (*bind)(struct usb_gadget *))
1334{
1335	struct imx_udc_struct *imx_usb = &controller;
1336	int retval;
1337
1338	if (!driver
1339		|| driver->speed < USB_SPEED_FULL
1340		|| !bind
1341		|| !driver->disconnect
1342		|| !driver->setup)
1343			return -EINVAL;
1344	if (!imx_usb)
1345		return -ENODEV;
1346	if (imx_usb->driver)
1347		return -EBUSY;
1348
1349	/* first hook up the driver ... */
1350	imx_usb->driver = driver;
1351	imx_usb->gadget.dev.driver = &driver->driver;
1352
1353	retval = device_add(&imx_usb->gadget.dev);
1354	if (retval)
1355		goto fail;
1356	retval = bind(&imx_usb->gadget);
1357	if (retval) {
1358		D_ERR(imx_usb->dev, "<%s> bind to driver %s --> error %d\n",
1359			__func__, driver->driver.name, retval);
1360		device_del(&imx_usb->gadget.dev);
1361
1362		goto fail;
1363	}
1364
1365	D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n",
1366		__func__, driver->driver.name);
1367
1368	imx_udc_enable(imx_usb);
1369
1370	return 0;
1371fail:
1372	imx_usb->driver = NULL;
1373	imx_usb->gadget.dev.driver = NULL;
1374	return retval;
1375}
1376
1377static int imx_udc_stop(struct usb_gadget_driver *driver)
1378{
1379	struct imx_udc_struct *imx_usb = &controller;
1380
1381	if (!imx_usb)
1382		return -ENODEV;
1383	if (!driver || driver != imx_usb->driver || !driver->unbind)
1384		return -EINVAL;
1385
1386	udc_stop_activity(imx_usb, driver);
1387	imx_udc_disable(imx_usb);
1388	del_timer(&imx_usb->timer);
1389
1390	driver->unbind(&imx_usb->gadget);
1391	imx_usb->gadget.dev.driver = NULL;
1392	imx_usb->driver = NULL;
1393
1394	device_del(&imx_usb->gadget.dev);
1395
1396	D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n",
1397		__func__, driver->driver.name);
1398
1399	return 0;
1400}
1401
1402/*******************************************************************************
1403 * Module functions
1404 *******************************************************************************
1405 */
1406
1407static int __init imx_udc_probe(struct platform_device *pdev)
1408{
1409	struct imx_udc_struct *imx_usb = &controller;
1410	struct resource *res;
1411	struct imxusb_platform_data *pdata;
1412	struct clk *clk;
1413	void __iomem *base;
1414	int ret = 0;
1415	int i;
1416	resource_size_t res_size;
1417
1418	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1419	if (!res) {
1420		dev_err(&pdev->dev, "can't get device resources\n");
1421		return -ENODEV;
1422	}
1423
1424	pdata = pdev->dev.platform_data;
1425	if (!pdata) {
1426		dev_err(&pdev->dev, "driver needs platform data\n");
1427		return -ENODEV;
1428	}
1429
1430	res_size = resource_size(res);
1431	if (!request_mem_region(res->start, res_size, res->name)) {
1432		dev_err(&pdev->dev, "can't allocate %d bytes at %d address\n",
1433			res_size, res->start);
1434		return -ENOMEM;
1435	}
1436
1437	if (pdata->init) {
1438		ret = pdata->init(&pdev->dev);
1439		if (ret)
1440			goto fail0;
1441	}
1442
1443	base = ioremap(res->start, res_size);
1444	if (!base) {
1445		dev_err(&pdev->dev, "ioremap failed\n");
1446		ret = -EIO;
1447		goto fail1;
1448	}
1449
1450	clk = clk_get(NULL, "usbd_clk");
1451	if (IS_ERR(clk)) {
1452		ret = PTR_ERR(clk);
1453		dev_err(&pdev->dev, "can't get USB clock\n");
1454		goto fail2;
1455	}
1456	clk_enable(clk);
1457
1458	if (clk_get_rate(clk) != 48000000) {
1459		D_INI(&pdev->dev,
1460			"Bad USB clock (%d Hz), changing to 48000000 Hz\n",
1461			(int)clk_get_rate(clk));
1462		if (clk_set_rate(clk, 48000000)) {
1463			dev_err(&pdev->dev,
1464				"Unable to set correct USB clock (48MHz)\n");
1465			ret = -EIO;
1466			goto fail3;
1467		}
1468	}
1469
1470	for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1471		imx_usb->usbd_int[i] = platform_get_irq(pdev, i);
1472		if (imx_usb->usbd_int[i] < 0) {
1473			dev_err(&pdev->dev, "can't get irq number\n");
1474			ret = -ENODEV;
1475			goto fail3;
1476		}
1477	}
1478
1479	for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1480		ret = request_irq(imx_usb->usbd_int[i], intr_handler(i),
1481				     IRQF_DISABLED, driver_name, imx_usb);
1482		if (ret) {
1483			dev_err(&pdev->dev, "can't get irq %i, err %d\n",
1484				imx_usb->usbd_int[i], ret);
1485			for (--i; i >= 0; i--)
1486				free_irq(imx_usb->usbd_int[i], imx_usb);
1487			goto fail3;
1488		}
1489	}
1490
1491	imx_usb->res = res;
1492	imx_usb->base = base;
1493	imx_usb->clk = clk;
1494	imx_usb->dev = &pdev->dev;
1495
1496	device_initialize(&imx_usb->gadget.dev);
1497
1498	imx_usb->gadget.dev.parent = &pdev->dev;
1499	imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask;
1500
1501	platform_set_drvdata(pdev, imx_usb);
1502
1503	usb_init_data(imx_usb);
1504	imx_udc_init(imx_usb);
1505
1506	init_timer(&imx_usb->timer);
1507	imx_usb->timer.function = handle_config;
1508	imx_usb->timer.data = (unsigned long)imx_usb;
1509
1510	ret = usb_add_gadget_udc(&pdev->dev, &imx_usb->gadget);
1511	if (ret)
1512		goto fail4;
1513
1514	return 0;
1515fail4:
1516	for (i = 0; i < IMX_USB_NB_EP + 1; i++)
1517		free_irq(imx_usb->usbd_int[i], imx_usb);
1518fail3:
1519	clk_put(clk);
1520	clk_disable(clk);
1521fail2:
1522	iounmap(base);
1523fail1:
1524	if (pdata->exit)
1525		pdata->exit(&pdev->dev);
1526fail0:
1527	release_mem_region(res->start, res_size);
1528	return ret;
1529}
1530
1531static int __exit imx_udc_remove(struct platform_device *pdev)
1532{
1533	struct imx_udc_struct *imx_usb = platform_get_drvdata(pdev);
1534	struct imxusb_platform_data *pdata = pdev->dev.platform_data;
1535	int i;
1536
1537	usb_del_gadget_udc(&imx_usb->gadget);
1538	imx_udc_disable(imx_usb);
1539	del_timer(&imx_usb->timer);
1540
1541	for (i = 0; i < IMX_USB_NB_EP + 1; i++)
1542		free_irq(imx_usb->usbd_int[i], imx_usb);
1543
1544	clk_put(imx_usb->clk);
1545	clk_disable(imx_usb->clk);
1546	iounmap(imx_usb->base);
1547
1548	release_mem_region(imx_usb->res->start, resource_size(imx_usb->res));
1549
1550	if (pdata->exit)
1551		pdata->exit(&pdev->dev);
1552
1553	platform_set_drvdata(pdev, NULL);
1554
1555	return 0;
1556}
1557
1558/*----------------------------------------------------------------------------*/
1559
1560#ifdef	CONFIG_PM
1561#define	imx_udc_suspend	NULL
1562#define	imx_udc_resume	NULL
1563#else
1564#define	imx_udc_suspend	NULL
1565#define	imx_udc_resume	NULL
1566#endif
1567
1568/*----------------------------------------------------------------------------*/
1569
1570static struct platform_driver udc_driver = {
1571	.driver		= {
1572		.name	= driver_name,
1573		.owner	= THIS_MODULE,
1574	},
1575	.remove		= __exit_p(imx_udc_remove),
1576	.suspend	= imx_udc_suspend,
1577	.resume		= imx_udc_resume,
1578};
1579
1580static int __init udc_init(void)
1581{
1582	return platform_driver_probe(&udc_driver, imx_udc_probe);
1583}
1584module_init(udc_init);
1585
1586static void __exit udc_exit(void)
1587{
1588	platform_driver_unregister(&udc_driver);
1589}
1590module_exit(udc_exit);
1591
1592MODULE_DESCRIPTION("IMX USB Device Controller driver");
1593MODULE_AUTHOR("Darius Augulis <augulis.darius@gmail.com>");
1594MODULE_LICENSE("GPL");
1595MODULE_ALIAS("platform:imx_udc");