m66592 34 drivers/usb/gadget/udc/m66592-udc.c static void disable_controller(struct m66592 *m66592); m66592 44 drivers/usb/gadget/udc/m66592-udc.c static inline u16 get_usb_speed(struct m66592 *m66592) m66592 46 drivers/usb/gadget/udc/m66592-udc.c return (m66592_read(m66592, M66592_DVSTCTR) & M66592_RHST); m66592 49 drivers/usb/gadget/udc/m66592-udc.c static void enable_pipe_irq(struct m66592 *m66592, u16 pipenum, m66592 54 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_INTENB0); m66592 55 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_BEMPE | M66592_NRDYE | M66592_BRDYE, m66592 57 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, (1 << pipenum), reg); m66592 58 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, tmp, M66592_INTENB0); m66592 61 drivers/usb/gadget/udc/m66592-udc.c static void disable_pipe_irq(struct m66592 *m66592, u16 pipenum, m66592 66 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_INTENB0); m66592 67 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_BEMPE | M66592_NRDYE | M66592_BRDYE, m66592 69 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, (1 << pipenum), reg); m66592 70 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, tmp, M66592_INTENB0); m66592 73 drivers/usb/gadget/udc/m66592-udc.c static void m66592_usb_connect(struct m66592 *m66592) m66592 75 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_CTRE, M66592_INTENB0); m66592 76 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_WDST | M66592_RDST | M66592_CMPL, m66592 78 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_BEMPE | M66592_BRDYE, M66592_INTENB0); m66592 80 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_DPRPU, M66592_SYSCFG); m66592 83 drivers/usb/gadget/udc/m66592-udc.c static void m66592_usb_disconnect(struct m66592 *m66592) m66592 84 drivers/usb/gadget/udc/m66592-udc.c __releases(m66592->lock) m66592 85 drivers/usb/gadget/udc/m66592-udc.c __acquires(m66592->lock) m66592 87 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_CTRE, M66592_INTENB0); m66592 88 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_WDST | M66592_RDST | M66592_CMPL, m66592 90 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_BEMPE | M66592_BRDYE, M66592_INTENB0); m66592 91 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_DPRPU, M66592_SYSCFG); m66592 93 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.speed = USB_SPEED_UNKNOWN; m66592 94 drivers/usb/gadget/udc/m66592-udc.c spin_unlock(&m66592->lock); m66592 95 drivers/usb/gadget/udc/m66592-udc.c m66592->driver->disconnect(&m66592->gadget); m66592 96 drivers/usb/gadget/udc/m66592-udc.c spin_lock(&m66592->lock); m66592 98 drivers/usb/gadget/udc/m66592-udc.c disable_controller(m66592); m66592 99 drivers/usb/gadget/udc/m66592-udc.c INIT_LIST_HEAD(&m66592->ep[0].queue); m66592 102 drivers/usb/gadget/udc/m66592-udc.c static inline u16 control_reg_get_pid(struct m66592 *m66592, u16 pipenum) m66592 108 drivers/usb/gadget/udc/m66592-udc.c pid = m66592_read(m66592, M66592_DCPCTR) & M66592_PID; m66592 111 drivers/usb/gadget/udc/m66592-udc.c pid = m66592_read(m66592, offset) & M66592_PID; m66592 118 drivers/usb/gadget/udc/m66592-udc.c static inline void control_reg_set_pid(struct m66592 *m66592, u16 pipenum, m66592 124 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, pid, M66592_PID, M66592_DCPCTR); m66592 127 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, pid, M66592_PID, offset); m66592 132 drivers/usb/gadget/udc/m66592-udc.c static inline void pipe_start(struct m66592 *m66592, u16 pipenum) m66592 134 drivers/usb/gadget/udc/m66592-udc.c control_reg_set_pid(m66592, pipenum, M66592_PID_BUF); m66592 137 drivers/usb/gadget/udc/m66592-udc.c static inline void pipe_stop(struct m66592 *m66592, u16 pipenum) m66592 139 drivers/usb/gadget/udc/m66592-udc.c control_reg_set_pid(m66592, pipenum, M66592_PID_NAK); m66592 142 drivers/usb/gadget/udc/m66592-udc.c static inline void pipe_stall(struct m66592 *m66592, u16 pipenum) m66592 144 drivers/usb/gadget/udc/m66592-udc.c control_reg_set_pid(m66592, pipenum, M66592_PID_STALL); m66592 147 drivers/usb/gadget/udc/m66592-udc.c static inline u16 control_reg_get(struct m66592 *m66592, u16 pipenum) m66592 153 drivers/usb/gadget/udc/m66592-udc.c ret = m66592_read(m66592, M66592_DCPCTR); m66592 156 drivers/usb/gadget/udc/m66592-udc.c ret = m66592_read(m66592, offset); m66592 163 drivers/usb/gadget/udc/m66592-udc.c static inline void control_reg_sqclr(struct m66592 *m66592, u16 pipenum) m66592 167 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(m66592, pipenum); m66592 170 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_SQCLR, M66592_DCPCTR); m66592 173 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_SQCLR, offset); m66592 178 drivers/usb/gadget/udc/m66592-udc.c static inline int get_buffer_size(struct m66592 *m66592, u16 pipenum) m66592 184 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_DCPCFG); m66592 188 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_DCPMAXP); m66592 192 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, pipenum, M66592_PIPESEL); m66592 193 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_PIPECFG); m66592 195 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_PIPEBUF); m66592 198 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_PIPEMAXP); m66592 206 drivers/usb/gadget/udc/m66592-udc.c static inline void pipe_change(struct m66592 *m66592, u16 pipenum) m66592 208 drivers/usb/gadget/udc/m66592-udc.c struct m66592_ep *ep = m66592->pipenum2ep[pipenum]; m66592 214 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, pipenum, M66592_CURPIPE, ep->fifosel); m66592 218 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip) m66592 223 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, mbw, ep->fifosel); m66592 226 drivers/usb/gadget/udc/m66592-udc.c static int pipe_buffer_setting(struct m66592 *m66592, m66592 235 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, info->pipe, M66592_PIPESEL); m66592 271 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, pipecfg, M66592_PIPECFG); m66592 272 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, (buf_bsize << 10) | (bufnum), M66592_PIPEBUF); m66592 273 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, info->maxpacket, M66592_PIPEMAXP); m66592 276 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, info->interval, M66592_PIPEPERI); m66592 281 drivers/usb/gadget/udc/m66592-udc.c static void pipe_buffer_release(struct m66592 *m66592, m66592 288 drivers/usb/gadget/udc/m66592-udc.c m66592->bulk--; m66592 290 drivers/usb/gadget/udc/m66592-udc.c m66592->interrupt--; m66592 292 drivers/usb/gadget/udc/m66592-udc.c m66592->isochronous--; m66592 294 drivers/usb/gadget/udc/m66592-udc.c m66592->bulk--; m66592 302 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 305 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, 0, M66592_CURPIPE, ep->fifosel); m66592 307 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, M66592_ACLRM, ep->pipectr); m66592 308 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, 0, ep->pipectr); m66592 309 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, M66592_SQCLR, ep->pipectr); m66592 311 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, ep->pipenum, M66592_CURPIPE, ep->fifosel); m66592 315 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip) m66592 320 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, mbw, ep->fifosel); m66592 324 drivers/usb/gadget/udc/m66592-udc.c static void m66592_ep_setting(struct m66592 *m66592, struct m66592_ep *ep, m66592 329 drivers/usb/gadget/udc/m66592-udc.c if (m66592->num_dma == 0) { m66592 330 drivers/usb/gadget/udc/m66592-udc.c m66592->num_dma++; m66592 336 drivers/usb/gadget/udc/m66592-udc.c } else if (!m66592->pdata->on_chip && m66592->num_dma == 1) { m66592 337 drivers/usb/gadget/udc/m66592-udc.c m66592->num_dma++; m66592 361 drivers/usb/gadget/udc/m66592-udc.c m66592->pipenum2ep[pipenum] = ep; m66592 362 drivers/usb/gadget/udc/m66592-udc.c m66592->epaddr2ep[desc->bEndpointAddress&USB_ENDPOINT_NUMBER_MASK] = ep; m66592 368 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 375 drivers/usb/gadget/udc/m66592-udc.c m66592->num_dma--; m66592 384 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 396 drivers/usb/gadget/udc/m66592-udc.c if (m66592->bulk >= M66592_MAX_NUM_BULK) { m66592 397 drivers/usb/gadget/udc/m66592-udc.c if (m66592->isochronous >= M66592_MAX_NUM_ISOC) { m66592 402 drivers/usb/gadget/udc/m66592-udc.c + m66592->isochronous; m66592 403 drivers/usb/gadget/udc/m66592-udc.c counter = &m66592->isochronous; m66592 406 drivers/usb/gadget/udc/m66592-udc.c info.pipe = M66592_BASE_PIPENUM_BULK + m66592->bulk; m66592 407 drivers/usb/gadget/udc/m66592-udc.c counter = &m66592->bulk; m66592 413 drivers/usb/gadget/udc/m66592-udc.c if (m66592->interrupt >= M66592_MAX_NUM_INT) { m66592 417 drivers/usb/gadget/udc/m66592-udc.c info.pipe = M66592_BASE_PIPENUM_INT + m66592->interrupt; m66592 419 drivers/usb/gadget/udc/m66592-udc.c counter = &m66592->interrupt; m66592 422 drivers/usb/gadget/udc/m66592-udc.c if (m66592->isochronous >= M66592_MAX_NUM_ISOC) { m66592 426 drivers/usb/gadget/udc/m66592-udc.c info.pipe = M66592_BASE_PIPENUM_ISOC + m66592->isochronous; m66592 428 drivers/usb/gadget/udc/m66592-udc.c counter = &m66592->isochronous; m66592 444 drivers/usb/gadget/udc/m66592-udc.c ret = pipe_buffer_setting(m66592, &info); m66592 451 drivers/usb/gadget/udc/m66592-udc.c if ((counter == &m66592->isochronous) && info.type == M66592_BULK) m66592 452 drivers/usb/gadget/udc/m66592-udc.c m66592->bulk++; m66592 454 drivers/usb/gadget/udc/m66592-udc.c m66592_ep_setting(m66592, ep, desc, info.pipe, dma); m66592 462 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 467 drivers/usb/gadget/udc/m66592-udc.c pipe_buffer_release(m66592, &info); m66592 474 drivers/usb/gadget/udc/m66592-udc.c static void pipe_irq_enable(struct m66592 *m66592, u16 pipenum) m66592 476 drivers/usb/gadget/udc/m66592-udc.c enable_irq_ready(m66592, pipenum); m66592 477 drivers/usb/gadget/udc/m66592-udc.c enable_irq_nrdy(m66592, pipenum); m66592 480 drivers/usb/gadget/udc/m66592-udc.c static void pipe_irq_disable(struct m66592 *m66592, u16 pipenum) m66592 482 drivers/usb/gadget/udc/m66592-udc.c disable_irq_ready(m66592, pipenum); m66592 483 drivers/usb/gadget/udc/m66592-udc.c disable_irq_nrdy(m66592, pipenum); m66592 487 drivers/usb/gadget/udc/m66592-udc.c static void control_end(struct m66592 *m66592, unsigned ccpl) m66592 489 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].internal_ccpl = ccpl; m66592 490 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, 0); m66592 491 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_CCPL, M66592_DCPCTR); m66592 496 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 498 drivers/usb/gadget/udc/m66592-udc.c pipe_change(m66592, ep->pipenum); m66592 499 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, M66592_ISEL | M66592_PIPE0, m66592 502 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, M66592_BCLR, ep->fifoctr); m66592 504 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_BVAL, ep->fifoctr); m66592 505 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, 0); m66592 508 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~M66592_BEMP0, M66592_BEMPSTS); m66592 515 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 518 drivers/usb/gadget/udc/m66592-udc.c pipe_change(m66592, ep->pipenum); m66592 519 drivers/usb/gadget/udc/m66592-udc.c disable_irq_empty(m66592, ep->pipenum); m66592 520 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, ep->pipenum); m66592 522 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, ep->fifoctr); m66592 524 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_enable(m66592, ep->pipenum); m66592 531 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 535 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, M66592_PIPE0, m66592 538 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, M66592_BCLR, ep->fifoctr); m66592 539 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, pipenum); m66592 540 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_enable(m66592, pipenum); m66592 543 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_TRCLR, ep->fifosel); m66592 544 drivers/usb/gadget/udc/m66592-udc.c pipe_change(m66592, pipenum); m66592 545 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_TRENB, ep->fifosel); m66592 546 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, m66592 551 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, pipenum); /* trigger once */ m66592 552 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_enable(m66592, pipenum); m66592 568 drivers/usb/gadget/udc/m66592-udc.c ctsq = m66592_read(ep->m66592, M66592_INTSTS0) & M66592_CTSQ; m66592 579 drivers/usb/gadget/udc/m66592-udc.c control_end(ep->m66592, 0); m66592 587 drivers/usb/gadget/udc/m66592-udc.c static void init_controller(struct m66592 *m66592) m66592 591 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip) { m66592 592 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->endian) m66592 597 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_HSE, M66592_SYSCFG); /* High spd */ m66592 598 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_USBE, M66592_SYSCFG); m66592 599 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_DPRPU, M66592_SYSCFG); m66592 600 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_USBE, M66592_SYSCFG); m66592 603 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, 0x8000, M66592_DVSTCTR); m66592 604 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, 0x1000, M66592_TESTMODE); m66592 605 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, 0x8000, M66592_DVSTCTR); m66592 607 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_INTL, M66592_INTENB1); m66592 609 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, 0, M66592_CFBCFG); m66592 610 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, 0, M66592_D0FBCFG); m66592 611 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, endian, M66592_CFBCFG); m66592 612 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, endian, M66592_D0FBCFG); m66592 616 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->endian) m66592 621 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->vif) m66592 626 drivers/usb/gadget/udc/m66592-udc.c switch (m66592->pdata->xtal) { m66592 641 drivers/usb/gadget/udc/m66592-udc.c switch (m66592->irq_trigger) { m66592 653 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, m66592 656 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_HSE, M66592_SYSCFG); /* High spd */ m66592 657 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, clock & M66592_XTAL, M66592_XTAL, m66592 659 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_USBE, M66592_SYSCFG); m66592 660 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_DPRPU, M66592_SYSCFG); m66592 661 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_USBE, M66592_SYSCFG); m66592 663 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_XCKE, M66592_SYSCFG); m66592 667 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_RCKE | M66592_PLLC, M66592_SYSCFG); m66592 671 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_SCKE, M66592_SYSCFG); m66592 673 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, irq_sense & M66592_INTL, M66592_INTENB1); m66592 674 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, M66592_BURST | M66592_CPU_ADR_RD_WR, m66592 679 drivers/usb/gadget/udc/m66592-udc.c static void disable_controller(struct m66592 *m66592) m66592 681 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_UTST, M66592_TESTMODE); m66592 682 drivers/usb/gadget/udc/m66592-udc.c if (!m66592->pdata->on_chip) { m66592 683 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_SCKE, M66592_SYSCFG); m66592 685 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_PLLC, M66592_SYSCFG); m66592 687 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_RCKE, M66592_SYSCFG); m66592 689 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_XCKE, M66592_SYSCFG); m66592 693 drivers/usb/gadget/udc/m66592-udc.c static void m66592_start_xclock(struct m66592 *m66592) m66592 697 drivers/usb/gadget/udc/m66592-udc.c if (!m66592->pdata->on_chip) { m66592 698 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_SYSCFG); m66592 700 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_XCKE, M66592_SYSCFG); m66592 707 drivers/usb/gadget/udc/m66592-udc.c __releases(m66592->lock) m66592 708 drivers/usb/gadget/udc/m66592-udc.c __acquires(m66592->lock) m66592 720 drivers/usb/gadget/udc/m66592-udc.c if (ep->m66592->gadget.speed == USB_SPEED_UNKNOWN) m66592 728 drivers/usb/gadget/udc/m66592-udc.c spin_unlock(&ep->m66592->lock); m66592 730 drivers/usb/gadget/udc/m66592-udc.c spin_lock(&ep->m66592->lock); m66592 747 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 749 drivers/usb/gadget/udc/m66592-udc.c pipe_change(m66592, pipenum); m66592 750 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_ISEL, ep->fifosel); m66592 754 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, ep->fifoctr); m66592 764 drivers/usb/gadget/udc/m66592-udc.c bufsize = get_buffer_size(m66592, pipenum); m66592 771 drivers/usb/gadget/udc/m66592-udc.c m66592_write_fifo(m66592, ep, buf, size); m66592 773 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_BVAL, ep->fifoctr); m66592 783 drivers/usb/gadget/udc/m66592-udc.c disable_irq_ready(m66592, pipenum); m66592 784 drivers/usb/gadget/udc/m66592-udc.c disable_irq_empty(m66592, pipenum); m66592 786 drivers/usb/gadget/udc/m66592-udc.c disable_irq_ready(m66592, pipenum); m66592 787 drivers/usb/gadget/udc/m66592-udc.c enable_irq_empty(m66592, pipenum); m66592 789 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, pipenum); m66592 799 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 801 drivers/usb/gadget/udc/m66592-udc.c pipe_change(m66592, pipenum); m66592 802 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, ep->fifoctr); m66592 804 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(m66592, pipenum); m66592 805 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_disable(m66592, pipenum); m66592 811 drivers/usb/gadget/udc/m66592-udc.c bufsize = get_buffer_size(m66592, pipenum); m66592 817 drivers/usb/gadget/udc/m66592-udc.c m66592_write_fifo(m66592, ep, buf, size); m66592 822 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_BVAL, ep->fifoctr); m66592 831 drivers/usb/gadget/udc/m66592-udc.c disable_irq_ready(m66592, pipenum); m66592 832 drivers/usb/gadget/udc/m66592-udc.c enable_irq_empty(m66592, pipenum); m66592 834 drivers/usb/gadget/udc/m66592-udc.c disable_irq_empty(m66592, pipenum); m66592 835 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_enable(m66592, pipenum); m66592 846 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = ep->m66592; m66592 849 drivers/usb/gadget/udc/m66592-udc.c pipe_change(m66592, pipenum); m66592 850 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, ep->fifoctr); m66592 853 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(m66592, pipenum); m66592 854 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_disable(m66592, pipenum); m66592 861 drivers/usb/gadget/udc/m66592-udc.c bufsize = get_buffer_size(m66592, pipenum); m66592 877 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(m66592, pipenum); m66592 878 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_disable(m66592, pipenum); m66592 885 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, M66592_BCLR, ep->fifoctr); m66592 887 drivers/usb/gadget/udc/m66592-udc.c m66592_read_fifo(m66592, ep->fifoaddr, buf, size); m66592 894 drivers/usb/gadget/udc/m66592-udc.c static void irq_pipe_ready(struct m66592 *m66592, u16 status, u16 enb) m66592 902 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~M66592_BRDY0, M66592_BRDYSTS); m66592 903 drivers/usb/gadget/udc/m66592-udc.c m66592_mdfy(m66592, M66592_PIPE0, M66592_CURPIPE, m66592 906 drivers/usb/gadget/udc/m66592-udc.c ep = &m66592->ep[0]; m66592 913 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~check, M66592_BRDYSTS); m66592 914 drivers/usb/gadget/udc/m66592-udc.c ep = m66592->pipenum2ep[pipenum]; m66592 926 drivers/usb/gadget/udc/m66592-udc.c static void irq_pipe_empty(struct m66592 *m66592, u16 status, u16 enb) m66592 935 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~M66592_BEMP0, M66592_BEMPSTS); m66592 937 drivers/usb/gadget/udc/m66592-udc.c ep = &m66592->ep[0]; m66592 944 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~check, M66592_BEMPSTS); m66592 945 drivers/usb/gadget/udc/m66592-udc.c tmp = control_reg_get(m66592, pipenum); m66592 947 drivers/usb/gadget/udc/m66592-udc.c disable_irq_empty(m66592, pipenum); m66592 948 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_disable(m66592, pipenum); m66592 949 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(m66592, pipenum); m66592 950 drivers/usb/gadget/udc/m66592-udc.c ep = m66592->pipenum2ep[pipenum]; m66592 962 drivers/usb/gadget/udc/m66592-udc.c static void get_status(struct m66592 *m66592, struct usb_ctrlrequest *ctrl) m66592 963 drivers/usb/gadget/udc/m66592-udc.c __releases(m66592->lock) m66592 964 drivers/usb/gadget/udc/m66592-udc.c __acquires(m66592->lock) m66592 979 drivers/usb/gadget/udc/m66592-udc.c ep = m66592->epaddr2ep[w_index & USB_ENDPOINT_NUMBER_MASK]; m66592 980 drivers/usb/gadget/udc/m66592-udc.c pid = control_reg_get_pid(m66592, ep->pipenum); m66592 987 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(m66592, 0); m66592 991 drivers/usb/gadget/udc/m66592-udc.c m66592->ep0_data = cpu_to_le16(status); m66592 992 drivers/usb/gadget/udc/m66592-udc.c m66592->ep0_req->buf = &m66592->ep0_data; m66592 993 drivers/usb/gadget/udc/m66592-udc.c m66592->ep0_req->length = 2; m66592 995 drivers/usb/gadget/udc/m66592-udc.c spin_unlock(&m66592->lock); m66592 996 drivers/usb/gadget/udc/m66592-udc.c m66592_queue(m66592->gadget.ep0, m66592->ep0_req, GFP_KERNEL); m66592 997 drivers/usb/gadget/udc/m66592-udc.c spin_lock(&m66592->lock); m66592 1000 drivers/usb/gadget/udc/m66592-udc.c static void clear_feature(struct m66592 *m66592, struct usb_ctrlrequest *ctrl) m66592 1004 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 1); m66592 1007 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 1); m66592 1014 drivers/usb/gadget/udc/m66592-udc.c ep = m66592->epaddr2ep[w_index & USB_ENDPOINT_NUMBER_MASK]; m66592 1015 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(m66592, ep->pipenum); m66592 1016 drivers/usb/gadget/udc/m66592-udc.c control_reg_sqclr(m66592, ep->pipenum); m66592 1018 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 1); m66592 1028 drivers/usb/gadget/udc/m66592-udc.c pipe_start(m66592, ep->pipenum); m66592 1032 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(m66592, 0); m66592 1037 drivers/usb/gadget/udc/m66592-udc.c static void set_feature(struct m66592 *m66592, struct usb_ctrlrequest *ctrl) m66592 1046 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 1); m66592 1049 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_INTSTS0) & m66592 1055 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, m66592 1060 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(m66592, 0); m66592 1065 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 1); m66592 1071 drivers/usb/gadget/udc/m66592-udc.c ep = m66592->epaddr2ep[w_index & USB_ENDPOINT_NUMBER_MASK]; m66592 1072 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(m66592, ep->pipenum); m66592 1074 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 1); m66592 1078 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(m66592, 0); m66592 1084 drivers/usb/gadget/udc/m66592-udc.c static int setup_packet(struct m66592 *m66592, struct usb_ctrlrequest *ctrl) m66592 1091 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~M66592_VALID, M66592_INTSTS0); m66592 1094 drivers/usb/gadget/udc/m66592-udc.c p[i] = m66592_read(m66592, offset + i*2); m66592 1100 drivers/usb/gadget/udc/m66592-udc.c get_status(m66592, ctrl); m66592 1103 drivers/usb/gadget/udc/m66592-udc.c clear_feature(m66592, ctrl); m66592 1106 drivers/usb/gadget/udc/m66592-udc.c set_feature(m66592, ctrl); m66592 1117 drivers/usb/gadget/udc/m66592-udc.c static void m66592_update_usb_speed(struct m66592 *m66592) m66592 1119 drivers/usb/gadget/udc/m66592-udc.c u16 speed = get_usb_speed(m66592); m66592 1123 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.speed = USB_SPEED_HIGH; m66592 1126 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.speed = USB_SPEED_FULL; m66592 1129 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.speed = USB_SPEED_UNKNOWN; m66592 1134 drivers/usb/gadget/udc/m66592-udc.c static void irq_device_state(struct m66592 *m66592) m66592 1138 drivers/usb/gadget/udc/m66592-udc.c dvsq = m66592_read(m66592, M66592_INTSTS0) & M66592_DVSQ; m66592 1139 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~M66592_DVST, M66592_INTSTS0); m66592 1142 drivers/usb/gadget/udc/m66592-udc.c usb_gadget_udc_reset(&m66592->gadget, m66592->driver); m66592 1143 drivers/usb/gadget/udc/m66592-udc.c m66592_update_usb_speed(m66592); m66592 1145 drivers/usb/gadget/udc/m66592-udc.c if (m66592->old_dvsq == M66592_DS_CNFG && dvsq != M66592_DS_CNFG) m66592 1146 drivers/usb/gadget/udc/m66592-udc.c m66592_update_usb_speed(m66592); m66592 1148 drivers/usb/gadget/udc/m66592-udc.c && m66592->gadget.speed == USB_SPEED_UNKNOWN) m66592 1149 drivers/usb/gadget/udc/m66592-udc.c m66592_update_usb_speed(m66592); m66592 1151 drivers/usb/gadget/udc/m66592-udc.c m66592->old_dvsq = dvsq; m66592 1154 drivers/usb/gadget/udc/m66592-udc.c static void irq_control_stage(struct m66592 *m66592) m66592 1155 drivers/usb/gadget/udc/m66592-udc.c __releases(m66592->lock) m66592 1156 drivers/usb/gadget/udc/m66592-udc.c __acquires(m66592->lock) m66592 1161 drivers/usb/gadget/udc/m66592-udc.c ctsq = m66592_read(m66592, M66592_INTSTS0) & M66592_CTSQ; m66592 1162 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, ~M66592_CTRT, M66592_INTSTS0); m66592 1168 drivers/usb/gadget/udc/m66592-udc.c ep = &m66592->ep[0]; m66592 1177 drivers/usb/gadget/udc/m66592-udc.c if (setup_packet(m66592, &ctrl)) { m66592 1178 drivers/usb/gadget/udc/m66592-udc.c spin_unlock(&m66592->lock); m66592 1179 drivers/usb/gadget/udc/m66592-udc.c if (m66592->driver->setup(&m66592->gadget, &ctrl) < 0) m66592 1180 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(m66592, 0); m66592 1181 drivers/usb/gadget/udc/m66592-udc.c spin_lock(&m66592->lock); m66592 1186 drivers/usb/gadget/udc/m66592-udc.c control_end(m66592, 0); m66592 1196 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = _m66592; m66592 1202 drivers/usb/gadget/udc/m66592-udc.c spin_lock(&m66592->lock); m66592 1204 drivers/usb/gadget/udc/m66592-udc.c intsts0 = m66592_read(m66592, M66592_INTSTS0); m66592 1205 drivers/usb/gadget/udc/m66592-udc.c intenb0 = m66592_read(m66592, M66592_INTENB0); m66592 1207 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip && !intsts0 && !intenb0) { m66592 1213 drivers/usb/gadget/udc/m66592-udc.c m66592_start_xclock(m66592); m66592 1214 drivers/usb/gadget/udc/m66592-udc.c intsts0 = m66592_read(m66592, M66592_INTSTS0); m66592 1215 drivers/usb/gadget/udc/m66592-udc.c intenb0 = m66592_read(m66592, M66592_INTENB0); m66592 1218 drivers/usb/gadget/udc/m66592-udc.c savepipe = m66592_read(m66592, M66592_CFIFOSEL); m66592 1222 drivers/usb/gadget/udc/m66592-udc.c u16 brdysts = m66592_read(m66592, M66592_BRDYSTS); m66592 1223 drivers/usb/gadget/udc/m66592-udc.c u16 bempsts = m66592_read(m66592, M66592_BEMPSTS); m66592 1224 drivers/usb/gadget/udc/m66592-udc.c u16 brdyenb = m66592_read(m66592, M66592_BRDYENB); m66592 1225 drivers/usb/gadget/udc/m66592-udc.c u16 bempenb = m66592_read(m66592, M66592_BEMPENB); m66592 1228 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, 0xffff & ~M66592_VBINT, m66592 1230 drivers/usb/gadget/udc/m66592-udc.c m66592_start_xclock(m66592); m66592 1233 drivers/usb/gadget/udc/m66592-udc.c m66592->old_vbus = m66592_read(m66592, M66592_INTSTS0) m66592 1235 drivers/usb/gadget/udc/m66592-udc.c m66592->scount = M66592_MAX_SAMPLING; m66592 1237 drivers/usb/gadget/udc/m66592-udc.c mod_timer(&m66592->timer, m66592 1241 drivers/usb/gadget/udc/m66592-udc.c irq_device_state(m66592); m66592 1245 drivers/usb/gadget/udc/m66592-udc.c irq_pipe_ready(m66592, brdysts, brdyenb); m66592 1249 drivers/usb/gadget/udc/m66592-udc.c irq_pipe_empty(m66592, bempsts, bempenb); m66592 1253 drivers/usb/gadget/udc/m66592-udc.c irq_control_stage(m66592); m66592 1256 drivers/usb/gadget/udc/m66592-udc.c m66592_write(m66592, savepipe, M66592_CFIFOSEL); m66592 1258 drivers/usb/gadget/udc/m66592-udc.c spin_unlock(&m66592->lock); m66592 1264 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = from_timer(m66592, t, timer); m66592 1268 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&m66592->lock, flags); m66592 1269 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_SYSCFG); m66592 1271 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_RCKE | M66592_PLLC, M66592_SYSCFG); m66592 1273 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_SCKE, M66592_SYSCFG); m66592 1275 drivers/usb/gadget/udc/m66592-udc.c if (m66592->scount > 0) { m66592 1276 drivers/usb/gadget/udc/m66592-udc.c tmp = m66592_read(m66592, M66592_INTSTS0) & M66592_VBSTS; m66592 1277 drivers/usb/gadget/udc/m66592-udc.c if (tmp == m66592->old_vbus) { m66592 1278 drivers/usb/gadget/udc/m66592-udc.c m66592->scount--; m66592 1279 drivers/usb/gadget/udc/m66592-udc.c if (m66592->scount == 0) { m66592 1281 drivers/usb/gadget/udc/m66592-udc.c m66592_usb_connect(m66592); m66592 1283 drivers/usb/gadget/udc/m66592-udc.c m66592_usb_disconnect(m66592); m66592 1285 drivers/usb/gadget/udc/m66592-udc.c mod_timer(&m66592->timer, m66592 1289 drivers/usb/gadget/udc/m66592-udc.c m66592->scount = M66592_MAX_SAMPLING; m66592 1290 drivers/usb/gadget/udc/m66592-udc.c m66592->old_vbus = tmp; m66592 1291 drivers/usb/gadget/udc/m66592-udc.c mod_timer(&m66592->timer, m66592 1295 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&m66592->lock, flags); m66592 1319 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&ep->m66592->lock, flags); m66592 1321 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&ep->m66592->lock, flags); m66592 1324 drivers/usb/gadget/udc/m66592-udc.c pipe_irq_disable(ep->m66592, ep->pipenum); m66592 1361 drivers/usb/gadget/udc/m66592-udc.c if (ep->m66592->gadget.speed == USB_SPEED_UNKNOWN) m66592 1364 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&ep->m66592->lock, flags); m66592 1380 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&ep->m66592->lock, flags); m66592 1394 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&ep->m66592->lock, flags); m66592 1397 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&ep->m66592->lock, flags); m66592 1408 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&ep->m66592->lock, flags); m66592 1413 drivers/usb/gadget/udc/m66592-udc.c pipe_stall(ep->m66592, ep->pipenum); m66592 1416 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(ep->m66592, ep->pipenum); m66592 1418 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&ep->m66592->lock, flags); m66592 1428 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&ep->m66592->lock, flags); m66592 1430 drivers/usb/gadget/udc/m66592-udc.c pipe_stop(ep->m66592, ep->pipenum); m66592 1431 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(ep->m66592, M66592_BCLR, ep->fifoctr); m66592 1433 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&ep->m66592->lock, flags); m66592 1454 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = to_m66592(g); m66592 1458 drivers/usb/gadget/udc/m66592-udc.c m66592->driver = driver; m66592 1460 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0); m66592 1461 drivers/usb/gadget/udc/m66592-udc.c if (m66592_read(m66592, M66592_INTSTS0) & M66592_VBSTS) { m66592 1462 drivers/usb/gadget/udc/m66592-udc.c m66592_start_xclock(m66592); m66592 1464 drivers/usb/gadget/udc/m66592-udc.c m66592->old_vbus = m66592_read(m66592, m66592 1466 drivers/usb/gadget/udc/m66592-udc.c m66592->scount = M66592_MAX_SAMPLING; m66592 1467 drivers/usb/gadget/udc/m66592-udc.c mod_timer(&m66592->timer, jiffies + msecs_to_jiffies(50)); m66592 1475 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = to_m66592(g); m66592 1477 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0); m66592 1479 drivers/usb/gadget/udc/m66592-udc.c init_controller(m66592); m66592 1480 drivers/usb/gadget/udc/m66592-udc.c disable_controller(m66592); m66592 1482 drivers/usb/gadget/udc/m66592-udc.c m66592->driver = NULL; m66592 1490 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = gadget_to_m66592(_gadget); m66592 1491 drivers/usb/gadget/udc/m66592-udc.c return m66592_read(m66592, M66592_FRMNUM) & 0x03FF; m66592 1496 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = gadget_to_m66592(gadget); m66592 1499 drivers/usb/gadget/udc/m66592-udc.c spin_lock_irqsave(&m66592->lock, flags); m66592 1501 drivers/usb/gadget/udc/m66592-udc.c m66592_bset(m66592, M66592_DPRPU, M66592_SYSCFG); m66592 1503 drivers/usb/gadget/udc/m66592-udc.c m66592_bclr(m66592, M66592_DPRPU, M66592_SYSCFG); m66592 1504 drivers/usb/gadget/udc/m66592-udc.c spin_unlock_irqrestore(&m66592->lock, flags); m66592 1518 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = platform_get_drvdata(pdev); m66592 1520 drivers/usb/gadget/udc/m66592-udc.c usb_del_gadget_udc(&m66592->gadget); m66592 1522 drivers/usb/gadget/udc/m66592-udc.c del_timer_sync(&m66592->timer); m66592 1523 drivers/usb/gadget/udc/m66592-udc.c iounmap(m66592->reg); m66592 1524 drivers/usb/gadget/udc/m66592-udc.c free_irq(platform_get_irq(pdev, 0), m66592); m66592 1525 drivers/usb/gadget/udc/m66592-udc.c m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req); m66592 1526 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip) { m66592 1527 drivers/usb/gadget/udc/m66592-udc.c clk_disable(m66592->clk); m66592 1528 drivers/usb/gadget/udc/m66592-udc.c clk_put(m66592->clk); m66592 1530 drivers/usb/gadget/udc/m66592-udc.c kfree(m66592); m66592 1542 drivers/usb/gadget/udc/m66592-udc.c struct m66592 *m66592 = NULL; m66592 1576 drivers/usb/gadget/udc/m66592-udc.c m66592 = kzalloc(sizeof(struct m66592), GFP_KERNEL); m66592 1577 drivers/usb/gadget/udc/m66592-udc.c if (m66592 == NULL) { m66592 1582 drivers/usb/gadget/udc/m66592-udc.c m66592->pdata = dev_get_platdata(&pdev->dev); m66592 1583 drivers/usb/gadget/udc/m66592-udc.c m66592->irq_trigger = ires->flags & IRQF_TRIGGER_MASK; m66592 1585 drivers/usb/gadget/udc/m66592-udc.c spin_lock_init(&m66592->lock); m66592 1586 drivers/usb/gadget/udc/m66592-udc.c platform_set_drvdata(pdev, m66592); m66592 1588 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.ops = &m66592_gadget_ops; m66592 1589 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.max_speed = USB_SPEED_HIGH; m66592 1590 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.name = udc_name; m66592 1592 drivers/usb/gadget/udc/m66592-udc.c timer_setup(&m66592->timer, m66592_timer, 0); m66592 1593 drivers/usb/gadget/udc/m66592-udc.c m66592->reg = reg; m66592 1596 drivers/usb/gadget/udc/m66592-udc.c udc_name, m66592); m66592 1602 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip) { m66592 1604 drivers/usb/gadget/udc/m66592-udc.c m66592->clk = clk_get(&pdev->dev, clk_name); m66592 1605 drivers/usb/gadget/udc/m66592-udc.c if (IS_ERR(m66592->clk)) { m66592 1608 drivers/usb/gadget/udc/m66592-udc.c ret = PTR_ERR(m66592->clk); m66592 1611 drivers/usb/gadget/udc/m66592-udc.c clk_enable(m66592->clk); m66592 1614 drivers/usb/gadget/udc/m66592-udc.c INIT_LIST_HEAD(&m66592->gadget.ep_list); m66592 1615 drivers/usb/gadget/udc/m66592-udc.c m66592->gadget.ep0 = &m66592->ep[0].ep; m66592 1616 drivers/usb/gadget/udc/m66592-udc.c INIT_LIST_HEAD(&m66592->gadget.ep0->ep_list); m66592 1618 drivers/usb/gadget/udc/m66592-udc.c struct m66592_ep *ep = &m66592->ep[i]; m66592 1621 drivers/usb/gadget/udc/m66592-udc.c INIT_LIST_HEAD(&m66592->ep[i].ep.ep_list); m66592 1622 drivers/usb/gadget/udc/m66592-udc.c list_add_tail(&m66592->ep[i].ep.ep_list, m66592 1623 drivers/usb/gadget/udc/m66592-udc.c &m66592->gadget.ep_list); m66592 1625 drivers/usb/gadget/udc/m66592-udc.c ep->m66592 = m66592; m66592 1642 drivers/usb/gadget/udc/m66592-udc.c usb_ep_set_maxpacket_limit(&m66592->ep[0].ep, 64); m66592 1643 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].pipenum = 0; m66592 1644 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].fifoaddr = M66592_CFIFO; m66592 1645 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].fifosel = M66592_CFIFOSEL; m66592 1646 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].fifoctr = M66592_CFIFOCTR; m66592 1647 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].fifotrn = 0; m66592 1648 drivers/usb/gadget/udc/m66592-udc.c m66592->ep[0].pipectr = get_pipectr_addr(0); m66592 1649 drivers/usb/gadget/udc/m66592-udc.c m66592->pipenum2ep[0] = &m66592->ep[0]; m66592 1650 drivers/usb/gadget/udc/m66592-udc.c m66592->epaddr2ep[0] = &m66592->ep[0]; m66592 1652 drivers/usb/gadget/udc/m66592-udc.c m66592->ep0_req = m66592_alloc_request(&m66592->ep[0].ep, GFP_KERNEL); m66592 1653 drivers/usb/gadget/udc/m66592-udc.c if (m66592->ep0_req == NULL) { m66592 1657 drivers/usb/gadget/udc/m66592-udc.c m66592->ep0_req->complete = nop_completion; m66592 1659 drivers/usb/gadget/udc/m66592-udc.c init_controller(m66592); m66592 1661 drivers/usb/gadget/udc/m66592-udc.c ret = usb_add_gadget_udc(&pdev->dev, &m66592->gadget); m66592 1669 drivers/usb/gadget/udc/m66592-udc.c m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req); m66592 1672 drivers/usb/gadget/udc/m66592-udc.c if (m66592->pdata->on_chip) { m66592 1673 drivers/usb/gadget/udc/m66592-udc.c clk_disable(m66592->clk); m66592 1674 drivers/usb/gadget/udc/m66592-udc.c clk_put(m66592->clk); m66592 1677 drivers/usb/gadget/udc/m66592-udc.c free_irq(ires->start, m66592); m66592 1679 drivers/usb/gadget/udc/m66592-udc.c if (m66592) { m66592 1680 drivers/usb/gadget/udc/m66592-udc.c if (m66592->ep0_req) m66592 1681 drivers/usb/gadget/udc/m66592-udc.c m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req); m66592 1682 drivers/usb/gadget/udc/m66592-udc.c kfree(m66592); m66592 443 drivers/usb/gadget/udc/m66592-udc.h struct m66592 *m66592; m66592 492 drivers/usb/gadget/udc/m66592-udc.h #define to_m66592(g) (container_of((g), struct m66592, gadget)) m66592 494 drivers/usb/gadget/udc/m66592-udc.h #define gadget_to_m66592(_gadget) container_of(_gadget, struct m66592, gadget) m66592 495 drivers/usb/gadget/udc/m66592-udc.h #define m66592_to_gadget(m66592) (&m66592->gadget) m66592 507 drivers/usb/gadget/udc/m66592-udc.h #define enable_irq_ready(m66592, pipenum) \ m66592 508 drivers/usb/gadget/udc/m66592-udc.h enable_pipe_irq(m66592, pipenum, M66592_BRDYENB) m66592 509 drivers/usb/gadget/udc/m66592-udc.h #define disable_irq_ready(m66592, pipenum) \ m66592 510 drivers/usb/gadget/udc/m66592-udc.h disable_pipe_irq(m66592, pipenum, M66592_BRDYENB) m66592 511 drivers/usb/gadget/udc/m66592-udc.h #define enable_irq_empty(m66592, pipenum) \ m66592 512 drivers/usb/gadget/udc/m66592-udc.h enable_pipe_irq(m66592, pipenum, M66592_BEMPENB) m66592 513 drivers/usb/gadget/udc/m66592-udc.h #define disable_irq_empty(m66592, pipenum) \ m66592 514 drivers/usb/gadget/udc/m66592-udc.h disable_pipe_irq(m66592, pipenum, M66592_BEMPENB) m66592 515 drivers/usb/gadget/udc/m66592-udc.h #define enable_irq_nrdy(m66592, pipenum) \ m66592 516 drivers/usb/gadget/udc/m66592-udc.h enable_pipe_irq(m66592, pipenum, M66592_NRDYENB) m66592 517 drivers/usb/gadget/udc/m66592-udc.h #define disable_irq_nrdy(m66592, pipenum) \ m66592 518 drivers/usb/gadget/udc/m66592-udc.h disable_pipe_irq(m66592, pipenum, M66592_NRDYENB) m66592 521 drivers/usb/gadget/udc/m66592-udc.h static inline u16 m66592_read(struct m66592 *m66592, unsigned long offset) m66592 523 drivers/usb/gadget/udc/m66592-udc.h return ioread16(m66592->reg + offset); m66592 526 drivers/usb/gadget/udc/m66592-udc.h static inline void m66592_read_fifo(struct m66592 *m66592, m66592 530 drivers/usb/gadget/udc/m66592-udc.h void __iomem *fifoaddr = m66592->reg + offset; m66592 532 drivers/usb/gadget/udc/m66592-udc.h if (m66592->pdata->on_chip) { m66592 541 drivers/usb/gadget/udc/m66592-udc.h static inline void m66592_write(struct m66592 *m66592, u16 val, m66592 544 drivers/usb/gadget/udc/m66592-udc.h iowrite16(val, m66592->reg + offset); m66592 547 drivers/usb/gadget/udc/m66592-udc.h static inline void m66592_mdfy(struct m66592 *m66592, u16 val, u16 pat, m66592 551 drivers/usb/gadget/udc/m66592-udc.h tmp = m66592_read(m66592, offset); m66592 554 drivers/usb/gadget/udc/m66592-udc.h m66592_write(m66592, tmp, offset); m66592 557 drivers/usb/gadget/udc/m66592-udc.h #define m66592_bclr(m66592, val, offset) \ m66592 558 drivers/usb/gadget/udc/m66592-udc.h m66592_mdfy(m66592, 0, val, offset) m66592 559 drivers/usb/gadget/udc/m66592-udc.h #define m66592_bset(m66592, val, offset) \ m66592 560 drivers/usb/gadget/udc/m66592-udc.h m66592_mdfy(m66592, val, 0, offset) m66592 562 drivers/usb/gadget/udc/m66592-udc.h static inline void m66592_write_fifo(struct m66592 *m66592, m66592 566 drivers/usb/gadget/udc/m66592-udc.h void __iomem *fifoaddr = m66592->reg + ep->fifoaddr; m66592 568 drivers/usb/gadget/udc/m66592-udc.h if (m66592->pdata->on_chip) { m66592 579 drivers/usb/gadget/udc/m66592-udc.h if (m66592_read(m66592, M66592_CFBCFG)) /* le */ m66592 592 drivers/usb/gadget/udc/m66592-udc.h if (m66592->pdata->wr0_shorted_to_wr1) m66592 593 drivers/usb/gadget/udc/m66592-udc.h m66592_bclr(m66592, M66592_MBW_16, ep->fifosel); m66592 595 drivers/usb/gadget/udc/m66592-udc.h if (m66592->pdata->wr0_shorted_to_wr1) m66592 596 drivers/usb/gadget/udc/m66592-udc.h m66592_bset(m66592, M66592_MBW_16, ep->fifosel);