max3421-hcd.c (51570B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * MAX3421 Host Controller driver for USB. 4 * 5 * Author: David Mosberger-Tang <davidm@egauge.net> 6 * 7 * (C) Copyright 2014 David Mosberger-Tang <davidm@egauge.net> 8 * 9 * MAX3421 is a chip implementing a USB 2.0 Full-/Low-Speed host 10 * controller on a SPI bus. 11 * 12 * Based on: 13 * o MAX3421E datasheet 14 * https://datasheets.maximintegrated.com/en/ds/MAX3421E.pdf 15 * o MAX3421E Programming Guide 16 * https://www.hdl.co.jp/ftpdata/utl-001/AN3785.pdf 17 * o gadget/dummy_hcd.c 18 * For USB HCD implementation. 19 * o Arduino MAX3421 driver 20 * https://github.com/felis/USB_Host_Shield_2.0/blob/master/Usb.cpp 21 * 22 * This file is licenced under the GPL v2. 23 * 24 * Important note on worst-case (full-speed) packet size constraints 25 * (See USB 2.0 Section 5.6.3 and following): 26 * 27 * - control: 64 bytes 28 * - isochronous: 1023 bytes 29 * - interrupt: 64 bytes 30 * - bulk: 64 bytes 31 * 32 * Since the MAX3421 FIFO size is 64 bytes, we do not have to work about 33 * multi-FIFO writes/reads for a single USB packet *except* for isochronous 34 * transfers. We don't support isochronous transfers at this time, so we 35 * just assume that a USB packet always fits into a single FIFO buffer. 36 * 37 * NOTE: The June 2006 version of "MAX3421E Programming Guide" 38 * (AN3785) has conflicting info for the RCVDAVIRQ bit: 39 * 40 * The description of RCVDAVIRQ says "The CPU *must* clear 41 * this IRQ bit (by writing a 1 to it) before reading the 42 * RCVFIFO data. 43 * 44 * However, the earlier section on "Programming BULK-IN 45 * Transfers" says * that: 46 * 47 * After the CPU retrieves the data, it clears the 48 * RCVDAVIRQ bit. 49 * 50 * The December 2006 version has been corrected and it consistently 51 * states the second behavior is the correct one. 52 * 53 * Synchronous SPI transactions sleep so we can't perform any such 54 * transactions while holding a spin-lock (and/or while interrupts are 55 * masked). To achieve this, all SPI transactions are issued from a 56 * single thread (max3421_spi_thread). 57 */ 58 59#include <linux/jiffies.h> 60#include <linux/module.h> 61#include <linux/spi/spi.h> 62#include <linux/usb.h> 63#include <linux/usb/hcd.h> 64#include <linux/of.h> 65 66#include <linux/platform_data/max3421-hcd.h> 67 68#define DRIVER_DESC "MAX3421 USB Host-Controller Driver" 69#define DRIVER_VERSION "1.0" 70 71/* 11-bit counter that wraps around (USB 2.0 Section 8.3.3): */ 72#define USB_MAX_FRAME_NUMBER 0x7ff 73#define USB_MAX_RETRIES 3 /* # of retries before error is reported */ 74 75/* 76 * Max. # of times we're willing to retransmit a request immediately in 77 * resposne to a NAK. Afterwards, we fall back on trying once a frame. 78 */ 79#define NAK_MAX_FAST_RETRANSMITS 2 80 81#define POWER_BUDGET 500 /* in mA; use 8 for low-power port testing */ 82 83/* Port-change mask: */ 84#define PORT_C_MASK ((USB_PORT_STAT_C_CONNECTION | \ 85 USB_PORT_STAT_C_ENABLE | \ 86 USB_PORT_STAT_C_SUSPEND | \ 87 USB_PORT_STAT_C_OVERCURRENT | \ 88 USB_PORT_STAT_C_RESET) << 16) 89 90#define MAX3421_GPOUT_COUNT 8 91 92enum max3421_rh_state { 93 MAX3421_RH_RESET, 94 MAX3421_RH_SUSPENDED, 95 MAX3421_RH_RUNNING 96}; 97 98enum pkt_state { 99 PKT_STATE_SETUP, /* waiting to send setup packet to ctrl pipe */ 100 PKT_STATE_TRANSFER, /* waiting to xfer transfer_buffer */ 101 PKT_STATE_TERMINATE /* waiting to terminate control transfer */ 102}; 103 104enum scheduling_pass { 105 SCHED_PASS_PERIODIC, 106 SCHED_PASS_NON_PERIODIC, 107 SCHED_PASS_DONE 108}; 109 110/* Bit numbers for max3421_hcd->todo: */ 111enum { 112 ENABLE_IRQ = 0, 113 RESET_HCD, 114 RESET_PORT, 115 CHECK_UNLINK, 116 IOPIN_UPDATE 117}; 118 119struct max3421_dma_buf { 120 u8 data[2]; 121}; 122 123struct max3421_hcd { 124 spinlock_t lock; 125 126 struct task_struct *spi_thread; 127 128 enum max3421_rh_state rh_state; 129 /* lower 16 bits contain port status, upper 16 bits the change mask: */ 130 u32 port_status; 131 132 unsigned active:1; 133 134 struct list_head ep_list; /* list of EP's with work */ 135 136 /* 137 * The following are owned by spi_thread (may be accessed by 138 * SPI-thread without acquiring the HCD lock: 139 */ 140 u8 rev; /* chip revision */ 141 u16 frame_number; 142 /* 143 * kmalloc'd buffers guaranteed to be in separate (DMA) 144 * cache-lines: 145 */ 146 struct max3421_dma_buf *tx; 147 struct max3421_dma_buf *rx; 148 /* 149 * URB we're currently processing. Must not be reset to NULL 150 * unless MAX3421E chip is idle: 151 */ 152 struct urb *curr_urb; 153 enum scheduling_pass sched_pass; 154 int urb_done; /* > 0 -> no errors, < 0: errno */ 155 size_t curr_len; 156 u8 hien; 157 u8 mode; 158 u8 iopins[2]; 159 unsigned long todo; 160#ifdef DEBUG 161 unsigned long err_stat[16]; 162#endif 163}; 164 165struct max3421_ep { 166 struct usb_host_endpoint *ep; 167 struct list_head ep_list; 168 u32 naks; 169 u16 last_active; /* frame # this ep was last active */ 170 enum pkt_state pkt_state; 171 u8 retries; 172 u8 retransmit; /* packet needs retransmission */ 173}; 174 175#define MAX3421_FIFO_SIZE 64 176 177#define MAX3421_SPI_DIR_RD 0 /* read register from MAX3421 */ 178#define MAX3421_SPI_DIR_WR 1 /* write register to MAX3421 */ 179 180/* SPI commands: */ 181#define MAX3421_SPI_DIR_SHIFT 1 182#define MAX3421_SPI_REG_SHIFT 3 183 184#define MAX3421_REG_RCVFIFO 1 185#define MAX3421_REG_SNDFIFO 2 186#define MAX3421_REG_SUDFIFO 4 187#define MAX3421_REG_RCVBC 6 188#define MAX3421_REG_SNDBC 7 189#define MAX3421_REG_USBIRQ 13 190#define MAX3421_REG_USBIEN 14 191#define MAX3421_REG_USBCTL 15 192#define MAX3421_REG_CPUCTL 16 193#define MAX3421_REG_PINCTL 17 194#define MAX3421_REG_REVISION 18 195#define MAX3421_REG_IOPINS1 20 196#define MAX3421_REG_IOPINS2 21 197#define MAX3421_REG_GPINIRQ 22 198#define MAX3421_REG_GPINIEN 23 199#define MAX3421_REG_GPINPOL 24 200#define MAX3421_REG_HIRQ 25 201#define MAX3421_REG_HIEN 26 202#define MAX3421_REG_MODE 27 203#define MAX3421_REG_PERADDR 28 204#define MAX3421_REG_HCTL 29 205#define MAX3421_REG_HXFR 30 206#define MAX3421_REG_HRSL 31 207 208enum { 209 MAX3421_USBIRQ_OSCOKIRQ_BIT = 0, 210 MAX3421_USBIRQ_NOVBUSIRQ_BIT = 5, 211 MAX3421_USBIRQ_VBUSIRQ_BIT 212}; 213 214enum { 215 MAX3421_CPUCTL_IE_BIT = 0, 216 MAX3421_CPUCTL_PULSEWID0_BIT = 6, 217 MAX3421_CPUCTL_PULSEWID1_BIT 218}; 219 220enum { 221 MAX3421_USBCTL_PWRDOWN_BIT = 4, 222 MAX3421_USBCTL_CHIPRES_BIT 223}; 224 225enum { 226 MAX3421_PINCTL_GPXA_BIT = 0, 227 MAX3421_PINCTL_GPXB_BIT, 228 MAX3421_PINCTL_POSINT_BIT, 229 MAX3421_PINCTL_INTLEVEL_BIT, 230 MAX3421_PINCTL_FDUPSPI_BIT, 231 MAX3421_PINCTL_EP0INAK_BIT, 232 MAX3421_PINCTL_EP2INAK_BIT, 233 MAX3421_PINCTL_EP3INAK_BIT, 234}; 235 236enum { 237 MAX3421_HI_BUSEVENT_BIT = 0, /* bus-reset/-resume */ 238 MAX3421_HI_RWU_BIT, /* remote wakeup */ 239 MAX3421_HI_RCVDAV_BIT, /* receive FIFO data available */ 240 MAX3421_HI_SNDBAV_BIT, /* send buffer available */ 241 MAX3421_HI_SUSDN_BIT, /* suspend operation done */ 242 MAX3421_HI_CONDET_BIT, /* peripheral connect/disconnect */ 243 MAX3421_HI_FRAME_BIT, /* frame generator */ 244 MAX3421_HI_HXFRDN_BIT, /* host transfer done */ 245}; 246 247enum { 248 MAX3421_HCTL_BUSRST_BIT = 0, 249 MAX3421_HCTL_FRMRST_BIT, 250 MAX3421_HCTL_SAMPLEBUS_BIT, 251 MAX3421_HCTL_SIGRSM_BIT, 252 MAX3421_HCTL_RCVTOG0_BIT, 253 MAX3421_HCTL_RCVTOG1_BIT, 254 MAX3421_HCTL_SNDTOG0_BIT, 255 MAX3421_HCTL_SNDTOG1_BIT 256}; 257 258enum { 259 MAX3421_MODE_HOST_BIT = 0, 260 MAX3421_MODE_LOWSPEED_BIT, 261 MAX3421_MODE_HUBPRE_BIT, 262 MAX3421_MODE_SOFKAENAB_BIT, 263 MAX3421_MODE_SEPIRQ_BIT, 264 MAX3421_MODE_DELAYISO_BIT, 265 MAX3421_MODE_DMPULLDN_BIT, 266 MAX3421_MODE_DPPULLDN_BIT 267}; 268 269enum { 270 MAX3421_HRSL_OK = 0, 271 MAX3421_HRSL_BUSY, 272 MAX3421_HRSL_BADREQ, 273 MAX3421_HRSL_UNDEF, 274 MAX3421_HRSL_NAK, 275 MAX3421_HRSL_STALL, 276 MAX3421_HRSL_TOGERR, 277 MAX3421_HRSL_WRONGPID, 278 MAX3421_HRSL_BADBC, 279 MAX3421_HRSL_PIDERR, 280 MAX3421_HRSL_PKTERR, 281 MAX3421_HRSL_CRCERR, 282 MAX3421_HRSL_KERR, 283 MAX3421_HRSL_JERR, 284 MAX3421_HRSL_TIMEOUT, 285 MAX3421_HRSL_BABBLE, 286 MAX3421_HRSL_RESULT_MASK = 0xf, 287 MAX3421_HRSL_RCVTOGRD_BIT = 4, 288 MAX3421_HRSL_SNDTOGRD_BIT, 289 MAX3421_HRSL_KSTATUS_BIT, 290 MAX3421_HRSL_JSTATUS_BIT 291}; 292 293/* Return same error-codes as ohci.h:cc_to_error: */ 294static const int hrsl_to_error[] = { 295 [MAX3421_HRSL_OK] = 0, 296 [MAX3421_HRSL_BUSY] = -EINVAL, 297 [MAX3421_HRSL_BADREQ] = -EINVAL, 298 [MAX3421_HRSL_UNDEF] = -EINVAL, 299 [MAX3421_HRSL_NAK] = -EAGAIN, 300 [MAX3421_HRSL_STALL] = -EPIPE, 301 [MAX3421_HRSL_TOGERR] = -EILSEQ, 302 [MAX3421_HRSL_WRONGPID] = -EPROTO, 303 [MAX3421_HRSL_BADBC] = -EREMOTEIO, 304 [MAX3421_HRSL_PIDERR] = -EPROTO, 305 [MAX3421_HRSL_PKTERR] = -EPROTO, 306 [MAX3421_HRSL_CRCERR] = -EILSEQ, 307 [MAX3421_HRSL_KERR] = -EIO, 308 [MAX3421_HRSL_JERR] = -EIO, 309 [MAX3421_HRSL_TIMEOUT] = -ETIME, 310 [MAX3421_HRSL_BABBLE] = -EOVERFLOW 311}; 312 313/* 314 * See https://www.beyondlogic.org/usbnutshell/usb4.shtml#Control for a 315 * reasonable overview of how control transfers use the the IN/OUT 316 * tokens. 317 */ 318#define MAX3421_HXFR_BULK_IN(ep) (0x00 | (ep)) /* bulk or interrupt */ 319#define MAX3421_HXFR_SETUP 0x10 320#define MAX3421_HXFR_BULK_OUT(ep) (0x20 | (ep)) /* bulk or interrupt */ 321#define MAX3421_HXFR_ISO_IN(ep) (0x40 | (ep)) 322#define MAX3421_HXFR_ISO_OUT(ep) (0x60 | (ep)) 323#define MAX3421_HXFR_HS_IN 0x80 /* handshake in */ 324#define MAX3421_HXFR_HS_OUT 0xa0 /* handshake out */ 325 326#define field(val, bit) ((val) << (bit)) 327 328static inline s16 329frame_diff(u16 left, u16 right) 330{ 331 return ((unsigned) (left - right)) % (USB_MAX_FRAME_NUMBER + 1); 332} 333 334static inline struct max3421_hcd * 335hcd_to_max3421(struct usb_hcd *hcd) 336{ 337 return (struct max3421_hcd *) hcd->hcd_priv; 338} 339 340static inline struct usb_hcd * 341max3421_to_hcd(struct max3421_hcd *max3421_hcd) 342{ 343 return container_of((void *) max3421_hcd, struct usb_hcd, hcd_priv); 344} 345 346static u8 347spi_rd8(struct usb_hcd *hcd, unsigned int reg) 348{ 349 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 350 struct spi_device *spi = to_spi_device(hcd->self.controller); 351 struct spi_transfer transfer; 352 struct spi_message msg; 353 354 memset(&transfer, 0, sizeof(transfer)); 355 356 spi_message_init(&msg); 357 358 max3421_hcd->tx->data[0] = 359 (field(reg, MAX3421_SPI_REG_SHIFT) | 360 field(MAX3421_SPI_DIR_RD, MAX3421_SPI_DIR_SHIFT)); 361 362 transfer.tx_buf = max3421_hcd->tx->data; 363 transfer.rx_buf = max3421_hcd->rx->data; 364 transfer.len = 2; 365 366 spi_message_add_tail(&transfer, &msg); 367 spi_sync(spi, &msg); 368 369 return max3421_hcd->rx->data[1]; 370} 371 372static void 373spi_wr8(struct usb_hcd *hcd, unsigned int reg, u8 val) 374{ 375 struct spi_device *spi = to_spi_device(hcd->self.controller); 376 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 377 struct spi_transfer transfer; 378 struct spi_message msg; 379 380 memset(&transfer, 0, sizeof(transfer)); 381 382 spi_message_init(&msg); 383 384 max3421_hcd->tx->data[0] = 385 (field(reg, MAX3421_SPI_REG_SHIFT) | 386 field(MAX3421_SPI_DIR_WR, MAX3421_SPI_DIR_SHIFT)); 387 max3421_hcd->tx->data[1] = val; 388 389 transfer.tx_buf = max3421_hcd->tx->data; 390 transfer.len = 2; 391 392 spi_message_add_tail(&transfer, &msg); 393 spi_sync(spi, &msg); 394} 395 396static void 397spi_rd_buf(struct usb_hcd *hcd, unsigned int reg, void *buf, size_t len) 398{ 399 struct spi_device *spi = to_spi_device(hcd->self.controller); 400 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 401 struct spi_transfer transfer[2]; 402 struct spi_message msg; 403 404 memset(transfer, 0, sizeof(transfer)); 405 406 spi_message_init(&msg); 407 408 max3421_hcd->tx->data[0] = 409 (field(reg, MAX3421_SPI_REG_SHIFT) | 410 field(MAX3421_SPI_DIR_RD, MAX3421_SPI_DIR_SHIFT)); 411 transfer[0].tx_buf = max3421_hcd->tx->data; 412 transfer[0].len = 1; 413 414 transfer[1].rx_buf = buf; 415 transfer[1].len = len; 416 417 spi_message_add_tail(&transfer[0], &msg); 418 spi_message_add_tail(&transfer[1], &msg); 419 spi_sync(spi, &msg); 420} 421 422static void 423spi_wr_buf(struct usb_hcd *hcd, unsigned int reg, void *buf, size_t len) 424{ 425 struct spi_device *spi = to_spi_device(hcd->self.controller); 426 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 427 struct spi_transfer transfer[2]; 428 struct spi_message msg; 429 430 memset(transfer, 0, sizeof(transfer)); 431 432 spi_message_init(&msg); 433 434 max3421_hcd->tx->data[0] = 435 (field(reg, MAX3421_SPI_REG_SHIFT) | 436 field(MAX3421_SPI_DIR_WR, MAX3421_SPI_DIR_SHIFT)); 437 438 transfer[0].tx_buf = max3421_hcd->tx->data; 439 transfer[0].len = 1; 440 441 transfer[1].tx_buf = buf; 442 transfer[1].len = len; 443 444 spi_message_add_tail(&transfer[0], &msg); 445 spi_message_add_tail(&transfer[1], &msg); 446 spi_sync(spi, &msg); 447} 448 449/* 450 * Figure out the correct setting for the LOWSPEED and HUBPRE mode 451 * bits. The HUBPRE bit needs to be set when MAX3421E operates at 452 * full speed, but it's talking to a low-speed device (i.e., through a 453 * hub). Setting that bit ensures that every low-speed packet is 454 * preceded by a full-speed PRE PID. Possible configurations: 455 * 456 * Hub speed: Device speed: => LOWSPEED bit: HUBPRE bit: 457 * FULL FULL => 0 0 458 * FULL LOW => 1 1 459 * LOW LOW => 1 0 460 * LOW FULL => 1 0 461 */ 462static void 463max3421_set_speed(struct usb_hcd *hcd, struct usb_device *dev) 464{ 465 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 466 u8 mode_lowspeed, mode_hubpre, mode = max3421_hcd->mode; 467 468 mode_lowspeed = BIT(MAX3421_MODE_LOWSPEED_BIT); 469 mode_hubpre = BIT(MAX3421_MODE_HUBPRE_BIT); 470 if (max3421_hcd->port_status & USB_PORT_STAT_LOW_SPEED) { 471 mode |= mode_lowspeed; 472 mode &= ~mode_hubpre; 473 } else if (dev->speed == USB_SPEED_LOW) { 474 mode |= mode_lowspeed | mode_hubpre; 475 } else { 476 mode &= ~(mode_lowspeed | mode_hubpre); 477 } 478 if (mode != max3421_hcd->mode) { 479 max3421_hcd->mode = mode; 480 spi_wr8(hcd, MAX3421_REG_MODE, max3421_hcd->mode); 481 } 482 483} 484 485/* 486 * Caller must NOT hold HCD spinlock. 487 */ 488static void 489max3421_set_address(struct usb_hcd *hcd, struct usb_device *dev, int epnum) 490{ 491 int rcvtog, sndtog; 492 u8 hctl; 493 494 /* setup new endpoint's toggle bits: */ 495 rcvtog = usb_gettoggle(dev, epnum, 0); 496 sndtog = usb_gettoggle(dev, epnum, 1); 497 hctl = (BIT(rcvtog + MAX3421_HCTL_RCVTOG0_BIT) | 498 BIT(sndtog + MAX3421_HCTL_SNDTOG0_BIT)); 499 500 spi_wr8(hcd, MAX3421_REG_HCTL, hctl); 501 502 /* 503 * Note: devnum for one and the same device can change during 504 * address-assignment so it's best to just always load the 505 * address whenever the end-point changed/was forced. 506 */ 507 spi_wr8(hcd, MAX3421_REG_PERADDR, dev->devnum); 508} 509 510static int 511max3421_ctrl_setup(struct usb_hcd *hcd, struct urb *urb) 512{ 513 spi_wr_buf(hcd, MAX3421_REG_SUDFIFO, urb->setup_packet, 8); 514 return MAX3421_HXFR_SETUP; 515} 516 517static int 518max3421_transfer_in(struct usb_hcd *hcd, struct urb *urb) 519{ 520 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 521 int epnum = usb_pipeendpoint(urb->pipe); 522 523 max3421_hcd->curr_len = 0; 524 max3421_hcd->hien |= BIT(MAX3421_HI_RCVDAV_BIT); 525 return MAX3421_HXFR_BULK_IN(epnum); 526} 527 528static int 529max3421_transfer_out(struct usb_hcd *hcd, struct urb *urb, int fast_retransmit) 530{ 531 struct spi_device *spi = to_spi_device(hcd->self.controller); 532 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 533 int epnum = usb_pipeendpoint(urb->pipe); 534 u32 max_packet; 535 void *src; 536 537 src = urb->transfer_buffer + urb->actual_length; 538 539 if (fast_retransmit) { 540 if (max3421_hcd->rev == 0x12) { 541 /* work around rev 0x12 bug: */ 542 spi_wr8(hcd, MAX3421_REG_SNDBC, 0); 543 spi_wr8(hcd, MAX3421_REG_SNDFIFO, ((u8 *) src)[0]); 544 spi_wr8(hcd, MAX3421_REG_SNDBC, max3421_hcd->curr_len); 545 } 546 return MAX3421_HXFR_BULK_OUT(epnum); 547 } 548 549 max_packet = usb_maxpacket(urb->dev, urb->pipe); 550 551 if (max_packet > MAX3421_FIFO_SIZE) { 552 /* 553 * We do not support isochronous transfers at this 554 * time. 555 */ 556 dev_err(&spi->dev, 557 "%s: packet-size of %u too big (limit is %u bytes)", 558 __func__, max_packet, MAX3421_FIFO_SIZE); 559 max3421_hcd->urb_done = -EMSGSIZE; 560 return -EMSGSIZE; 561 } 562 max3421_hcd->curr_len = min((urb->transfer_buffer_length - 563 urb->actual_length), max_packet); 564 565 spi_wr_buf(hcd, MAX3421_REG_SNDFIFO, src, max3421_hcd->curr_len); 566 spi_wr8(hcd, MAX3421_REG_SNDBC, max3421_hcd->curr_len); 567 return MAX3421_HXFR_BULK_OUT(epnum); 568} 569 570/* 571 * Issue the next host-transfer command. 572 * Caller must NOT hold HCD spinlock. 573 */ 574static void 575max3421_next_transfer(struct usb_hcd *hcd, int fast_retransmit) 576{ 577 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 578 struct urb *urb = max3421_hcd->curr_urb; 579 struct max3421_ep *max3421_ep; 580 int cmd = -EINVAL; 581 582 if (!urb) 583 return; /* nothing to do */ 584 585 max3421_ep = urb->ep->hcpriv; 586 587 switch (max3421_ep->pkt_state) { 588 case PKT_STATE_SETUP: 589 cmd = max3421_ctrl_setup(hcd, urb); 590 break; 591 592 case PKT_STATE_TRANSFER: 593 if (usb_urb_dir_in(urb)) 594 cmd = max3421_transfer_in(hcd, urb); 595 else 596 cmd = max3421_transfer_out(hcd, urb, fast_retransmit); 597 break; 598 599 case PKT_STATE_TERMINATE: 600 /* 601 * IN transfers are terminated with HS_OUT token, 602 * OUT transfers with HS_IN: 603 */ 604 if (usb_urb_dir_in(urb)) 605 cmd = MAX3421_HXFR_HS_OUT; 606 else 607 cmd = MAX3421_HXFR_HS_IN; 608 break; 609 } 610 611 if (cmd < 0) 612 return; 613 614 /* issue the command and wait for host-xfer-done interrupt: */ 615 616 spi_wr8(hcd, MAX3421_REG_HXFR, cmd); 617 max3421_hcd->hien |= BIT(MAX3421_HI_HXFRDN_BIT); 618} 619 620/* 621 * Find the next URB to process and start its execution. 622 * 623 * At this time, we do not anticipate ever connecting a USB hub to the 624 * MAX3421 chip, so at most USB device can be connected and we can use 625 * a simplistic scheduler: at the start of a frame, schedule all 626 * periodic transfers. Once that is done, use the remainder of the 627 * frame to process non-periodic (bulk & control) transfers. 628 * 629 * Preconditions: 630 * o Caller must NOT hold HCD spinlock. 631 * o max3421_hcd->curr_urb MUST BE NULL. 632 * o MAX3421E chip must be idle. 633 */ 634static int 635max3421_select_and_start_urb(struct usb_hcd *hcd) 636{ 637 struct spi_device *spi = to_spi_device(hcd->self.controller); 638 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 639 struct urb *urb, *curr_urb = NULL; 640 struct max3421_ep *max3421_ep; 641 int epnum; 642 struct usb_host_endpoint *ep; 643 struct list_head *pos; 644 unsigned long flags; 645 646 spin_lock_irqsave(&max3421_hcd->lock, flags); 647 648 for (; 649 max3421_hcd->sched_pass < SCHED_PASS_DONE; 650 ++max3421_hcd->sched_pass) 651 list_for_each(pos, &max3421_hcd->ep_list) { 652 urb = NULL; 653 max3421_ep = container_of(pos, struct max3421_ep, 654 ep_list); 655 ep = max3421_ep->ep; 656 657 switch (usb_endpoint_type(&ep->desc)) { 658 case USB_ENDPOINT_XFER_ISOC: 659 case USB_ENDPOINT_XFER_INT: 660 if (max3421_hcd->sched_pass != 661 SCHED_PASS_PERIODIC) 662 continue; 663 break; 664 665 case USB_ENDPOINT_XFER_CONTROL: 666 case USB_ENDPOINT_XFER_BULK: 667 if (max3421_hcd->sched_pass != 668 SCHED_PASS_NON_PERIODIC) 669 continue; 670 break; 671 } 672 673 if (list_empty(&ep->urb_list)) 674 continue; /* nothing to do */ 675 urb = list_first_entry(&ep->urb_list, struct urb, 676 urb_list); 677 if (urb->unlinked) { 678 dev_dbg(&spi->dev, "%s: URB %p unlinked=%d", 679 __func__, urb, urb->unlinked); 680 max3421_hcd->curr_urb = urb; 681 max3421_hcd->urb_done = 1; 682 spin_unlock_irqrestore(&max3421_hcd->lock, 683 flags); 684 return 1; 685 } 686 687 switch (usb_endpoint_type(&ep->desc)) { 688 case USB_ENDPOINT_XFER_CONTROL: 689 /* 690 * Allow one control transaction per 691 * frame per endpoint: 692 */ 693 if (frame_diff(max3421_ep->last_active, 694 max3421_hcd->frame_number) == 0) 695 continue; 696 break; 697 698 case USB_ENDPOINT_XFER_BULK: 699 if (max3421_ep->retransmit 700 && (frame_diff(max3421_ep->last_active, 701 max3421_hcd->frame_number) 702 == 0)) 703 /* 704 * We already tried this EP 705 * during this frame and got a 706 * NAK or error; wait for next frame 707 */ 708 continue; 709 break; 710 711 case USB_ENDPOINT_XFER_ISOC: 712 case USB_ENDPOINT_XFER_INT: 713 if (frame_diff(max3421_hcd->frame_number, 714 max3421_ep->last_active) 715 < urb->interval) 716 /* 717 * We already processed this 718 * end-point in the current 719 * frame 720 */ 721 continue; 722 break; 723 } 724 725 /* move current ep to tail: */ 726 list_move_tail(pos, &max3421_hcd->ep_list); 727 curr_urb = urb; 728 goto done; 729 } 730done: 731 if (!curr_urb) { 732 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 733 return 0; 734 } 735 736 urb = max3421_hcd->curr_urb = curr_urb; 737 epnum = usb_endpoint_num(&urb->ep->desc); 738 if (max3421_ep->retransmit) 739 /* restart (part of) a USB transaction: */ 740 max3421_ep->retransmit = 0; 741 else { 742 /* start USB transaction: */ 743 if (usb_endpoint_xfer_control(&ep->desc)) { 744 /* 745 * See USB 2.0 spec section 8.6.1 746 * Initialization via SETUP Token: 747 */ 748 usb_settoggle(urb->dev, epnum, 0, 1); 749 usb_settoggle(urb->dev, epnum, 1, 1); 750 max3421_ep->pkt_state = PKT_STATE_SETUP; 751 } else 752 max3421_ep->pkt_state = PKT_STATE_TRANSFER; 753 } 754 755 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 756 757 max3421_ep->last_active = max3421_hcd->frame_number; 758 max3421_set_address(hcd, urb->dev, epnum); 759 max3421_set_speed(hcd, urb->dev); 760 max3421_next_transfer(hcd, 0); 761 return 1; 762} 763 764/* 765 * Check all endpoints for URBs that got unlinked. 766 * 767 * Caller must NOT hold HCD spinlock. 768 */ 769static int 770max3421_check_unlink(struct usb_hcd *hcd) 771{ 772 struct spi_device *spi = to_spi_device(hcd->self.controller); 773 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 774 struct max3421_ep *max3421_ep; 775 struct usb_host_endpoint *ep; 776 struct urb *urb, *next; 777 unsigned long flags; 778 int retval = 0; 779 780 spin_lock_irqsave(&max3421_hcd->lock, flags); 781 list_for_each_entry(max3421_ep, &max3421_hcd->ep_list, ep_list) { 782 ep = max3421_ep->ep; 783 list_for_each_entry_safe(urb, next, &ep->urb_list, urb_list) { 784 if (urb->unlinked) { 785 retval = 1; 786 dev_dbg(&spi->dev, "%s: URB %p unlinked=%d", 787 __func__, urb, urb->unlinked); 788 usb_hcd_unlink_urb_from_ep(hcd, urb); 789 spin_unlock_irqrestore(&max3421_hcd->lock, 790 flags); 791 usb_hcd_giveback_urb(hcd, urb, 0); 792 spin_lock_irqsave(&max3421_hcd->lock, flags); 793 } 794 } 795 } 796 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 797 return retval; 798} 799 800/* 801 * Caller must NOT hold HCD spinlock. 802 */ 803static void 804max3421_slow_retransmit(struct usb_hcd *hcd) 805{ 806 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 807 struct urb *urb = max3421_hcd->curr_urb; 808 struct max3421_ep *max3421_ep; 809 810 max3421_ep = urb->ep->hcpriv; 811 max3421_ep->retransmit = 1; 812 max3421_hcd->curr_urb = NULL; 813} 814 815/* 816 * Caller must NOT hold HCD spinlock. 817 */ 818static void 819max3421_recv_data_available(struct usb_hcd *hcd) 820{ 821 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 822 struct urb *urb = max3421_hcd->curr_urb; 823 size_t remaining, transfer_size; 824 u8 rcvbc; 825 826 rcvbc = spi_rd8(hcd, MAX3421_REG_RCVBC); 827 828 if (rcvbc > MAX3421_FIFO_SIZE) 829 rcvbc = MAX3421_FIFO_SIZE; 830 if (urb->actual_length >= urb->transfer_buffer_length) 831 remaining = 0; 832 else 833 remaining = urb->transfer_buffer_length - urb->actual_length; 834 transfer_size = rcvbc; 835 if (transfer_size > remaining) 836 transfer_size = remaining; 837 if (transfer_size > 0) { 838 void *dst = urb->transfer_buffer + urb->actual_length; 839 840 spi_rd_buf(hcd, MAX3421_REG_RCVFIFO, dst, transfer_size); 841 urb->actual_length += transfer_size; 842 max3421_hcd->curr_len = transfer_size; 843 } 844 845 /* ack the RCVDAV irq now that the FIFO has been read: */ 846 spi_wr8(hcd, MAX3421_REG_HIRQ, BIT(MAX3421_HI_RCVDAV_BIT)); 847} 848 849static void 850max3421_handle_error(struct usb_hcd *hcd, u8 hrsl) 851{ 852 struct spi_device *spi = to_spi_device(hcd->self.controller); 853 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 854 u8 result_code = hrsl & MAX3421_HRSL_RESULT_MASK; 855 struct urb *urb = max3421_hcd->curr_urb; 856 struct max3421_ep *max3421_ep = urb->ep->hcpriv; 857 int switch_sndfifo; 858 859 /* 860 * If an OUT command results in any response other than OK 861 * (i.e., error or NAK), we have to perform a dummy-write to 862 * SNDBC so the FIFO gets switched back to us. Otherwise, we 863 * get out of sync with the SNDFIFO double buffer. 864 */ 865 switch_sndfifo = (max3421_ep->pkt_state == PKT_STATE_TRANSFER && 866 usb_urb_dir_out(urb)); 867 868 switch (result_code) { 869 case MAX3421_HRSL_OK: 870 return; /* this shouldn't happen */ 871 872 case MAX3421_HRSL_WRONGPID: /* received wrong PID */ 873 case MAX3421_HRSL_BUSY: /* SIE busy */ 874 case MAX3421_HRSL_BADREQ: /* bad val in HXFR */ 875 case MAX3421_HRSL_UNDEF: /* reserved */ 876 case MAX3421_HRSL_KERR: /* K-state instead of response */ 877 case MAX3421_HRSL_JERR: /* J-state instead of response */ 878 /* 879 * packet experienced an error that we cannot recover 880 * from; report error 881 */ 882 max3421_hcd->urb_done = hrsl_to_error[result_code]; 883 dev_dbg(&spi->dev, "%s: unexpected error HRSL=0x%02x", 884 __func__, hrsl); 885 break; 886 887 case MAX3421_HRSL_TOGERR: 888 if (usb_urb_dir_in(urb)) 889 ; /* don't do anything (device will switch toggle) */ 890 else { 891 /* flip the send toggle bit: */ 892 int sndtog = (hrsl >> MAX3421_HRSL_SNDTOGRD_BIT) & 1; 893 894 sndtog ^= 1; 895 spi_wr8(hcd, MAX3421_REG_HCTL, 896 BIT(sndtog + MAX3421_HCTL_SNDTOG0_BIT)); 897 } 898 fallthrough; 899 case MAX3421_HRSL_BADBC: /* bad byte count */ 900 case MAX3421_HRSL_PIDERR: /* received PID is corrupted */ 901 case MAX3421_HRSL_PKTERR: /* packet error (stuff, EOP) */ 902 case MAX3421_HRSL_CRCERR: /* CRC error */ 903 case MAX3421_HRSL_BABBLE: /* device talked too long */ 904 case MAX3421_HRSL_TIMEOUT: 905 if (max3421_ep->retries++ < USB_MAX_RETRIES) 906 /* retry the packet again in the next frame */ 907 max3421_slow_retransmit(hcd); 908 else { 909 /* Based on ohci.h cc_to_err[]: */ 910 max3421_hcd->urb_done = hrsl_to_error[result_code]; 911 dev_dbg(&spi->dev, "%s: unexpected error HRSL=0x%02x", 912 __func__, hrsl); 913 } 914 break; 915 916 case MAX3421_HRSL_STALL: 917 dev_dbg(&spi->dev, "%s: unexpected error HRSL=0x%02x", 918 __func__, hrsl); 919 max3421_hcd->urb_done = hrsl_to_error[result_code]; 920 break; 921 922 case MAX3421_HRSL_NAK: 923 /* 924 * Device wasn't ready for data or has no data 925 * available: retry the packet again. 926 */ 927 if (max3421_ep->naks++ < NAK_MAX_FAST_RETRANSMITS) { 928 max3421_next_transfer(hcd, 1); 929 switch_sndfifo = 0; 930 } else 931 max3421_slow_retransmit(hcd); 932 break; 933 } 934 if (switch_sndfifo) 935 spi_wr8(hcd, MAX3421_REG_SNDBC, 0); 936} 937 938/* 939 * Caller must NOT hold HCD spinlock. 940 */ 941static int 942max3421_transfer_in_done(struct usb_hcd *hcd, struct urb *urb) 943{ 944 struct spi_device *spi = to_spi_device(hcd->self.controller); 945 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 946 u32 max_packet; 947 948 if (urb->actual_length >= urb->transfer_buffer_length) 949 return 1; /* read is complete, so we're done */ 950 951 /* 952 * USB 2.0 Section 5.3.2 Pipes: packets must be full size 953 * except for last one. 954 */ 955 max_packet = usb_maxpacket(urb->dev, urb->pipe); 956 if (max_packet > MAX3421_FIFO_SIZE) { 957 /* 958 * We do not support isochronous transfers at this 959 * time... 960 */ 961 dev_err(&spi->dev, 962 "%s: packet-size of %u too big (limit is %u bytes)", 963 __func__, max_packet, MAX3421_FIFO_SIZE); 964 return -EINVAL; 965 } 966 967 if (max3421_hcd->curr_len < max_packet) { 968 if (urb->transfer_flags & URB_SHORT_NOT_OK) { 969 /* 970 * remaining > 0 and received an 971 * unexpected partial packet -> 972 * error 973 */ 974 return -EREMOTEIO; 975 } else 976 /* short read, but it's OK */ 977 return 1; 978 } 979 return 0; /* not done */ 980} 981 982/* 983 * Caller must NOT hold HCD spinlock. 984 */ 985static int 986max3421_transfer_out_done(struct usb_hcd *hcd, struct urb *urb) 987{ 988 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 989 990 urb->actual_length += max3421_hcd->curr_len; 991 if (urb->actual_length < urb->transfer_buffer_length) 992 return 0; 993 if (urb->transfer_flags & URB_ZERO_PACKET) { 994 /* 995 * Some hardware needs a zero-size packet at the end 996 * of a bulk-out transfer if the last transfer was a 997 * full-sized packet (i.e., such hardware use < 998 * max_packet as an indicator that the end of the 999 * packet has been reached). 1000 */ 1001 u32 max_packet = usb_maxpacket(urb->dev, urb->pipe); 1002 1003 if (max3421_hcd->curr_len == max_packet) 1004 return 0; 1005 } 1006 return 1; 1007} 1008 1009/* 1010 * Caller must NOT hold HCD spinlock. 1011 */ 1012static void 1013max3421_host_transfer_done(struct usb_hcd *hcd) 1014{ 1015 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1016 struct urb *urb = max3421_hcd->curr_urb; 1017 struct max3421_ep *max3421_ep; 1018 u8 result_code, hrsl; 1019 int urb_done = 0; 1020 1021 max3421_hcd->hien &= ~(BIT(MAX3421_HI_HXFRDN_BIT) | 1022 BIT(MAX3421_HI_RCVDAV_BIT)); 1023 1024 hrsl = spi_rd8(hcd, MAX3421_REG_HRSL); 1025 result_code = hrsl & MAX3421_HRSL_RESULT_MASK; 1026 1027#ifdef DEBUG 1028 ++max3421_hcd->err_stat[result_code]; 1029#endif 1030 1031 max3421_ep = urb->ep->hcpriv; 1032 1033 if (unlikely(result_code != MAX3421_HRSL_OK)) { 1034 max3421_handle_error(hcd, hrsl); 1035 return; 1036 } 1037 1038 max3421_ep->naks = 0; 1039 max3421_ep->retries = 0; 1040 switch (max3421_ep->pkt_state) { 1041 1042 case PKT_STATE_SETUP: 1043 if (urb->transfer_buffer_length > 0) 1044 max3421_ep->pkt_state = PKT_STATE_TRANSFER; 1045 else 1046 max3421_ep->pkt_state = PKT_STATE_TERMINATE; 1047 break; 1048 1049 case PKT_STATE_TRANSFER: 1050 if (usb_urb_dir_in(urb)) 1051 urb_done = max3421_transfer_in_done(hcd, urb); 1052 else 1053 urb_done = max3421_transfer_out_done(hcd, urb); 1054 if (urb_done > 0 && usb_pipetype(urb->pipe) == PIPE_CONTROL) { 1055 /* 1056 * We aren't really done - we still need to 1057 * terminate the control transfer: 1058 */ 1059 max3421_hcd->urb_done = urb_done = 0; 1060 max3421_ep->pkt_state = PKT_STATE_TERMINATE; 1061 } 1062 break; 1063 1064 case PKT_STATE_TERMINATE: 1065 urb_done = 1; 1066 break; 1067 } 1068 1069 if (urb_done) 1070 max3421_hcd->urb_done = urb_done; 1071 else 1072 max3421_next_transfer(hcd, 0); 1073} 1074 1075/* 1076 * Caller must NOT hold HCD spinlock. 1077 */ 1078static void 1079max3421_detect_conn(struct usb_hcd *hcd) 1080{ 1081 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1082 unsigned int jk, have_conn = 0; 1083 u32 old_port_status, chg; 1084 unsigned long flags; 1085 u8 hrsl, mode; 1086 1087 hrsl = spi_rd8(hcd, MAX3421_REG_HRSL); 1088 1089 jk = ((((hrsl >> MAX3421_HRSL_JSTATUS_BIT) & 1) << 0) | 1090 (((hrsl >> MAX3421_HRSL_KSTATUS_BIT) & 1) << 1)); 1091 1092 mode = max3421_hcd->mode; 1093 1094 switch (jk) { 1095 case 0x0: /* SE0: disconnect */ 1096 /* 1097 * Turn off SOFKAENAB bit to avoid getting interrupt 1098 * every milli-second: 1099 */ 1100 mode &= ~BIT(MAX3421_MODE_SOFKAENAB_BIT); 1101 break; 1102 1103 case 0x1: /* J=0,K=1: low-speed (in full-speed or vice versa) */ 1104 case 0x2: /* J=1,K=0: full-speed (in full-speed or vice versa) */ 1105 if (jk == 0x2) 1106 /* need to switch to the other speed: */ 1107 mode ^= BIT(MAX3421_MODE_LOWSPEED_BIT); 1108 /* turn on SOFKAENAB bit: */ 1109 mode |= BIT(MAX3421_MODE_SOFKAENAB_BIT); 1110 have_conn = 1; 1111 break; 1112 1113 case 0x3: /* illegal */ 1114 break; 1115 } 1116 1117 max3421_hcd->mode = mode; 1118 spi_wr8(hcd, MAX3421_REG_MODE, max3421_hcd->mode); 1119 1120 spin_lock_irqsave(&max3421_hcd->lock, flags); 1121 old_port_status = max3421_hcd->port_status; 1122 if (have_conn) 1123 max3421_hcd->port_status |= USB_PORT_STAT_CONNECTION; 1124 else 1125 max3421_hcd->port_status &= ~USB_PORT_STAT_CONNECTION; 1126 if (mode & BIT(MAX3421_MODE_LOWSPEED_BIT)) 1127 max3421_hcd->port_status |= USB_PORT_STAT_LOW_SPEED; 1128 else 1129 max3421_hcd->port_status &= ~USB_PORT_STAT_LOW_SPEED; 1130 chg = (old_port_status ^ max3421_hcd->port_status); 1131 max3421_hcd->port_status |= chg << 16; 1132 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1133} 1134 1135static irqreturn_t 1136max3421_irq_handler(int irq, void *dev_id) 1137{ 1138 struct usb_hcd *hcd = dev_id; 1139 struct spi_device *spi = to_spi_device(hcd->self.controller); 1140 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1141 1142 if (max3421_hcd->spi_thread) 1143 wake_up_process(max3421_hcd->spi_thread); 1144 if (!test_and_set_bit(ENABLE_IRQ, &max3421_hcd->todo)) 1145 disable_irq_nosync(spi->irq); 1146 return IRQ_HANDLED; 1147} 1148 1149#ifdef DEBUG 1150 1151static void 1152dump_eps(struct usb_hcd *hcd) 1153{ 1154 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1155 struct max3421_ep *max3421_ep; 1156 struct usb_host_endpoint *ep; 1157 char ubuf[512], *dp, *end; 1158 unsigned long flags; 1159 struct urb *urb; 1160 int epnum, ret; 1161 1162 spin_lock_irqsave(&max3421_hcd->lock, flags); 1163 list_for_each_entry(max3421_ep, &max3421_hcd->ep_list, ep_list) { 1164 ep = max3421_ep->ep; 1165 1166 dp = ubuf; 1167 end = dp + sizeof(ubuf); 1168 *dp = '\0'; 1169 list_for_each_entry(urb, &ep->urb_list, urb_list) { 1170 ret = snprintf(dp, end - dp, " %p(%d.%s %d/%d)", urb, 1171 usb_pipetype(urb->pipe), 1172 usb_urb_dir_in(urb) ? "IN" : "OUT", 1173 urb->actual_length, 1174 urb->transfer_buffer_length); 1175 if (ret < 0 || ret >= end - dp) 1176 break; /* error or buffer full */ 1177 dp += ret; 1178 } 1179 1180 epnum = usb_endpoint_num(&ep->desc); 1181 pr_info("EP%0u %u lst %04u rtr %u nak %6u rxmt %u: %s\n", 1182 epnum, max3421_ep->pkt_state, max3421_ep->last_active, 1183 max3421_ep->retries, max3421_ep->naks, 1184 max3421_ep->retransmit, ubuf); 1185 } 1186 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1187} 1188 1189#endif /* DEBUG */ 1190 1191/* Return zero if no work was performed, 1 otherwise. */ 1192static int 1193max3421_handle_irqs(struct usb_hcd *hcd) 1194{ 1195 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1196 u32 chg, old_port_status; 1197 unsigned long flags; 1198 u8 hirq; 1199 1200 /* 1201 * Read and ack pending interrupts (CPU must never 1202 * clear SNDBAV directly and RCVDAV must be cleared by 1203 * max3421_recv_data_available()!): 1204 */ 1205 hirq = spi_rd8(hcd, MAX3421_REG_HIRQ); 1206 hirq &= max3421_hcd->hien; 1207 if (!hirq) 1208 return 0; 1209 1210 spi_wr8(hcd, MAX3421_REG_HIRQ, 1211 hirq & ~(BIT(MAX3421_HI_SNDBAV_BIT) | 1212 BIT(MAX3421_HI_RCVDAV_BIT))); 1213 1214 if (hirq & BIT(MAX3421_HI_FRAME_BIT)) { 1215 max3421_hcd->frame_number = ((max3421_hcd->frame_number + 1) 1216 & USB_MAX_FRAME_NUMBER); 1217 max3421_hcd->sched_pass = SCHED_PASS_PERIODIC; 1218 } 1219 1220 if (hirq & BIT(MAX3421_HI_RCVDAV_BIT)) 1221 max3421_recv_data_available(hcd); 1222 1223 if (hirq & BIT(MAX3421_HI_HXFRDN_BIT)) 1224 max3421_host_transfer_done(hcd); 1225 1226 if (hirq & BIT(MAX3421_HI_CONDET_BIT)) 1227 max3421_detect_conn(hcd); 1228 1229 /* 1230 * Now process interrupts that may affect HCD state 1231 * other than the end-points: 1232 */ 1233 spin_lock_irqsave(&max3421_hcd->lock, flags); 1234 1235 old_port_status = max3421_hcd->port_status; 1236 if (hirq & BIT(MAX3421_HI_BUSEVENT_BIT)) { 1237 if (max3421_hcd->port_status & USB_PORT_STAT_RESET) { 1238 /* BUSEVENT due to completion of Bus Reset */ 1239 max3421_hcd->port_status &= ~USB_PORT_STAT_RESET; 1240 max3421_hcd->port_status |= USB_PORT_STAT_ENABLE; 1241 } else { 1242 /* BUSEVENT due to completion of Bus Resume */ 1243 pr_info("%s: BUSEVENT Bus Resume Done\n", __func__); 1244 } 1245 } 1246 if (hirq & BIT(MAX3421_HI_RWU_BIT)) 1247 pr_info("%s: RWU\n", __func__); 1248 if (hirq & BIT(MAX3421_HI_SUSDN_BIT)) 1249 pr_info("%s: SUSDN\n", __func__); 1250 1251 chg = (old_port_status ^ max3421_hcd->port_status); 1252 max3421_hcd->port_status |= chg << 16; 1253 1254 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1255 1256#ifdef DEBUG 1257 { 1258 static unsigned long last_time; 1259 char sbuf[16 * 16], *dp, *end; 1260 int i; 1261 1262 if (time_after(jiffies, last_time + 5*HZ)) { 1263 dp = sbuf; 1264 end = sbuf + sizeof(sbuf); 1265 *dp = '\0'; 1266 for (i = 0; i < 16; ++i) { 1267 int ret = snprintf(dp, end - dp, " %lu", 1268 max3421_hcd->err_stat[i]); 1269 if (ret < 0 || ret >= end - dp) 1270 break; /* error or buffer full */ 1271 dp += ret; 1272 } 1273 pr_info("%s: hrsl_stats %s\n", __func__, sbuf); 1274 memset(max3421_hcd->err_stat, 0, 1275 sizeof(max3421_hcd->err_stat)); 1276 last_time = jiffies; 1277 1278 dump_eps(hcd); 1279 } 1280 } 1281#endif 1282 return 1; 1283} 1284 1285static int 1286max3421_reset_hcd(struct usb_hcd *hcd) 1287{ 1288 struct spi_device *spi = to_spi_device(hcd->self.controller); 1289 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1290 int timeout; 1291 1292 /* perform a chip reset and wait for OSCIRQ signal to appear: */ 1293 spi_wr8(hcd, MAX3421_REG_USBCTL, BIT(MAX3421_USBCTL_CHIPRES_BIT)); 1294 /* clear reset: */ 1295 spi_wr8(hcd, MAX3421_REG_USBCTL, 0); 1296 timeout = 1000; 1297 while (1) { 1298 if (spi_rd8(hcd, MAX3421_REG_USBIRQ) 1299 & BIT(MAX3421_USBIRQ_OSCOKIRQ_BIT)) 1300 break; 1301 if (--timeout < 0) { 1302 dev_err(&spi->dev, 1303 "timed out waiting for oscillator OK signal"); 1304 return 1; 1305 } 1306 cond_resched(); 1307 } 1308 1309 /* 1310 * Turn on host mode, automatic generation of SOF packets, and 1311 * enable pull-down registers on DM/DP: 1312 */ 1313 max3421_hcd->mode = (BIT(MAX3421_MODE_HOST_BIT) | 1314 BIT(MAX3421_MODE_SOFKAENAB_BIT) | 1315 BIT(MAX3421_MODE_DMPULLDN_BIT) | 1316 BIT(MAX3421_MODE_DPPULLDN_BIT)); 1317 spi_wr8(hcd, MAX3421_REG_MODE, max3421_hcd->mode); 1318 1319 /* reset frame-number: */ 1320 max3421_hcd->frame_number = USB_MAX_FRAME_NUMBER; 1321 spi_wr8(hcd, MAX3421_REG_HCTL, BIT(MAX3421_HCTL_FRMRST_BIT)); 1322 1323 /* sample the state of the D+ and D- lines */ 1324 spi_wr8(hcd, MAX3421_REG_HCTL, BIT(MAX3421_HCTL_SAMPLEBUS_BIT)); 1325 max3421_detect_conn(hcd); 1326 1327 /* enable frame, connection-detected, and bus-event interrupts: */ 1328 max3421_hcd->hien = (BIT(MAX3421_HI_FRAME_BIT) | 1329 BIT(MAX3421_HI_CONDET_BIT) | 1330 BIT(MAX3421_HI_BUSEVENT_BIT)); 1331 spi_wr8(hcd, MAX3421_REG_HIEN, max3421_hcd->hien); 1332 1333 /* enable interrupts: */ 1334 spi_wr8(hcd, MAX3421_REG_CPUCTL, BIT(MAX3421_CPUCTL_IE_BIT)); 1335 return 1; 1336} 1337 1338static int 1339max3421_urb_done(struct usb_hcd *hcd) 1340{ 1341 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1342 unsigned long flags; 1343 struct urb *urb; 1344 int status; 1345 1346 status = max3421_hcd->urb_done; 1347 max3421_hcd->urb_done = 0; 1348 if (status > 0) 1349 status = 0; 1350 urb = max3421_hcd->curr_urb; 1351 if (urb) { 1352 /* save the old end-points toggles: */ 1353 u8 hrsl = spi_rd8(hcd, MAX3421_REG_HRSL); 1354 int rcvtog = (hrsl >> MAX3421_HRSL_RCVTOGRD_BIT) & 1; 1355 int sndtog = (hrsl >> MAX3421_HRSL_SNDTOGRD_BIT) & 1; 1356 int epnum = usb_endpoint_num(&urb->ep->desc); 1357 1358 /* no locking: HCD (i.e., we) own toggles, don't we? */ 1359 usb_settoggle(urb->dev, epnum, 0, rcvtog); 1360 usb_settoggle(urb->dev, epnum, 1, sndtog); 1361 1362 max3421_hcd->curr_urb = NULL; 1363 spin_lock_irqsave(&max3421_hcd->lock, flags); 1364 usb_hcd_unlink_urb_from_ep(hcd, urb); 1365 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1366 1367 /* must be called without the HCD spinlock: */ 1368 usb_hcd_giveback_urb(hcd, urb, status); 1369 } 1370 return 1; 1371} 1372 1373static int 1374max3421_spi_thread(void *dev_id) 1375{ 1376 struct usb_hcd *hcd = dev_id; 1377 struct spi_device *spi = to_spi_device(hcd->self.controller); 1378 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1379 int i, i_worked = 1; 1380 1381 /* set full-duplex SPI mode, low-active interrupt pin: */ 1382 spi_wr8(hcd, MAX3421_REG_PINCTL, 1383 (BIT(MAX3421_PINCTL_FDUPSPI_BIT) | /* full-duplex */ 1384 BIT(MAX3421_PINCTL_INTLEVEL_BIT))); /* low-active irq */ 1385 1386 while (!kthread_should_stop()) { 1387 max3421_hcd->rev = spi_rd8(hcd, MAX3421_REG_REVISION); 1388 if (max3421_hcd->rev == 0x12 || max3421_hcd->rev == 0x13) 1389 break; 1390 dev_err(&spi->dev, "bad rev 0x%02x", max3421_hcd->rev); 1391 msleep(10000); 1392 } 1393 dev_info(&spi->dev, "rev 0x%x, SPI clk %dHz, bpw %u, irq %d\n", 1394 max3421_hcd->rev, spi->max_speed_hz, spi->bits_per_word, 1395 spi->irq); 1396 1397 while (!kthread_should_stop()) { 1398 if (!i_worked) { 1399 /* 1400 * We'll be waiting for wakeups from the hard 1401 * interrupt handler, so now is a good time to 1402 * sync our hien with the chip: 1403 */ 1404 spi_wr8(hcd, MAX3421_REG_HIEN, max3421_hcd->hien); 1405 1406 set_current_state(TASK_INTERRUPTIBLE); 1407 if (test_and_clear_bit(ENABLE_IRQ, &max3421_hcd->todo)) 1408 enable_irq(spi->irq); 1409 schedule(); 1410 __set_current_state(TASK_RUNNING); 1411 } 1412 1413 i_worked = 0; 1414 1415 if (max3421_hcd->urb_done) 1416 i_worked |= max3421_urb_done(hcd); 1417 else if (max3421_handle_irqs(hcd)) 1418 i_worked = 1; 1419 else if (!max3421_hcd->curr_urb) 1420 i_worked |= max3421_select_and_start_urb(hcd); 1421 1422 if (test_and_clear_bit(RESET_HCD, &max3421_hcd->todo)) 1423 /* reset the HCD: */ 1424 i_worked |= max3421_reset_hcd(hcd); 1425 if (test_and_clear_bit(RESET_PORT, &max3421_hcd->todo)) { 1426 /* perform a USB bus reset: */ 1427 spi_wr8(hcd, MAX3421_REG_HCTL, 1428 BIT(MAX3421_HCTL_BUSRST_BIT)); 1429 i_worked = 1; 1430 } 1431 if (test_and_clear_bit(CHECK_UNLINK, &max3421_hcd->todo)) 1432 i_worked |= max3421_check_unlink(hcd); 1433 if (test_and_clear_bit(IOPIN_UPDATE, &max3421_hcd->todo)) { 1434 /* 1435 * IOPINS1/IOPINS2 do not auto-increment, so we can't 1436 * use spi_wr_buf(). 1437 */ 1438 for (i = 0; i < ARRAY_SIZE(max3421_hcd->iopins); ++i) { 1439 u8 val = spi_rd8(hcd, MAX3421_REG_IOPINS1); 1440 1441 val = ((val & 0xf0) | 1442 (max3421_hcd->iopins[i] & 0x0f)); 1443 spi_wr8(hcd, MAX3421_REG_IOPINS1 + i, val); 1444 max3421_hcd->iopins[i] = val; 1445 } 1446 i_worked = 1; 1447 } 1448 } 1449 set_current_state(TASK_RUNNING); 1450 dev_info(&spi->dev, "SPI thread exiting"); 1451 return 0; 1452} 1453 1454static int 1455max3421_reset_port(struct usb_hcd *hcd) 1456{ 1457 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1458 1459 max3421_hcd->port_status &= ~(USB_PORT_STAT_ENABLE | 1460 USB_PORT_STAT_LOW_SPEED); 1461 max3421_hcd->port_status |= USB_PORT_STAT_RESET; 1462 set_bit(RESET_PORT, &max3421_hcd->todo); 1463 wake_up_process(max3421_hcd->spi_thread); 1464 return 0; 1465} 1466 1467static int 1468max3421_reset(struct usb_hcd *hcd) 1469{ 1470 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1471 1472 hcd->self.sg_tablesize = 0; 1473 hcd->speed = HCD_USB2; 1474 hcd->self.root_hub->speed = USB_SPEED_FULL; 1475 set_bit(RESET_HCD, &max3421_hcd->todo); 1476 wake_up_process(max3421_hcd->spi_thread); 1477 return 0; 1478} 1479 1480static int 1481max3421_start(struct usb_hcd *hcd) 1482{ 1483 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1484 1485 spin_lock_init(&max3421_hcd->lock); 1486 max3421_hcd->rh_state = MAX3421_RH_RUNNING; 1487 1488 INIT_LIST_HEAD(&max3421_hcd->ep_list); 1489 1490 hcd->power_budget = POWER_BUDGET; 1491 hcd->state = HC_STATE_RUNNING; 1492 hcd->uses_new_polling = 1; 1493 return 0; 1494} 1495 1496static void 1497max3421_stop(struct usb_hcd *hcd) 1498{ 1499} 1500 1501static int 1502max3421_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) 1503{ 1504 struct spi_device *spi = to_spi_device(hcd->self.controller); 1505 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1506 struct max3421_ep *max3421_ep; 1507 unsigned long flags; 1508 int retval; 1509 1510 switch (usb_pipetype(urb->pipe)) { 1511 case PIPE_INTERRUPT: 1512 case PIPE_ISOCHRONOUS: 1513 if (urb->interval < 0) { 1514 dev_err(&spi->dev, 1515 "%s: interval=%d for intr-/iso-pipe; expected > 0\n", 1516 __func__, urb->interval); 1517 return -EINVAL; 1518 } 1519 break; 1520 default: 1521 break; 1522 } 1523 1524 spin_lock_irqsave(&max3421_hcd->lock, flags); 1525 1526 max3421_ep = urb->ep->hcpriv; 1527 if (!max3421_ep) { 1528 /* gets freed in max3421_endpoint_disable: */ 1529 max3421_ep = kzalloc(sizeof(struct max3421_ep), GFP_ATOMIC); 1530 if (!max3421_ep) { 1531 retval = -ENOMEM; 1532 goto out; 1533 } 1534 max3421_ep->ep = urb->ep; 1535 max3421_ep->last_active = max3421_hcd->frame_number; 1536 urb->ep->hcpriv = max3421_ep; 1537 1538 list_add_tail(&max3421_ep->ep_list, &max3421_hcd->ep_list); 1539 } 1540 1541 retval = usb_hcd_link_urb_to_ep(hcd, urb); 1542 if (retval == 0) { 1543 /* Since we added to the queue, restart scheduling: */ 1544 max3421_hcd->sched_pass = SCHED_PASS_PERIODIC; 1545 wake_up_process(max3421_hcd->spi_thread); 1546 } 1547 1548out: 1549 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1550 return retval; 1551} 1552 1553static int 1554max3421_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) 1555{ 1556 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1557 unsigned long flags; 1558 int retval; 1559 1560 spin_lock_irqsave(&max3421_hcd->lock, flags); 1561 1562 /* 1563 * This will set urb->unlinked which in turn causes the entry 1564 * to be dropped at the next opportunity. 1565 */ 1566 retval = usb_hcd_check_unlink_urb(hcd, urb, status); 1567 if (retval == 0) { 1568 set_bit(CHECK_UNLINK, &max3421_hcd->todo); 1569 wake_up_process(max3421_hcd->spi_thread); 1570 } 1571 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1572 return retval; 1573} 1574 1575static void 1576max3421_endpoint_disable(struct usb_hcd *hcd, struct usb_host_endpoint *ep) 1577{ 1578 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1579 unsigned long flags; 1580 1581 spin_lock_irqsave(&max3421_hcd->lock, flags); 1582 1583 if (ep->hcpriv) { 1584 struct max3421_ep *max3421_ep = ep->hcpriv; 1585 1586 /* remove myself from the ep_list: */ 1587 if (!list_empty(&max3421_ep->ep_list)) 1588 list_del(&max3421_ep->ep_list); 1589 kfree(max3421_ep); 1590 ep->hcpriv = NULL; 1591 } 1592 1593 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1594} 1595 1596static int 1597max3421_get_frame_number(struct usb_hcd *hcd) 1598{ 1599 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1600 return max3421_hcd->frame_number; 1601} 1602 1603/* 1604 * Should return a non-zero value when any port is undergoing a resume 1605 * transition while the root hub is suspended. 1606 */ 1607static int 1608max3421_hub_status_data(struct usb_hcd *hcd, char *buf) 1609{ 1610 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1611 unsigned long flags; 1612 int retval = 0; 1613 1614 spin_lock_irqsave(&max3421_hcd->lock, flags); 1615 if (!HCD_HW_ACCESSIBLE(hcd)) 1616 goto done; 1617 1618 *buf = 0; 1619 if ((max3421_hcd->port_status & PORT_C_MASK) != 0) { 1620 *buf = (1 << 1); /* a hub over-current condition exists */ 1621 dev_dbg(hcd->self.controller, 1622 "port status 0x%08x has changes\n", 1623 max3421_hcd->port_status); 1624 retval = 1; 1625 if (max3421_hcd->rh_state == MAX3421_RH_SUSPENDED) 1626 usb_hcd_resume_root_hub(hcd); 1627 } 1628done: 1629 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1630 return retval; 1631} 1632 1633static inline void 1634hub_descriptor(struct usb_hub_descriptor *desc) 1635{ 1636 memset(desc, 0, sizeof(*desc)); 1637 /* 1638 * See Table 11-13: Hub Descriptor in USB 2.0 spec. 1639 */ 1640 desc->bDescriptorType = USB_DT_HUB; /* hub descriptor */ 1641 desc->bDescLength = 9; 1642 desc->wHubCharacteristics = cpu_to_le16(HUB_CHAR_INDV_PORT_LPSM | 1643 HUB_CHAR_COMMON_OCPM); 1644 desc->bNbrPorts = 1; 1645} 1646 1647/* 1648 * Set the MAX3421E general-purpose output with number PIN_NUMBER to 1649 * VALUE (0 or 1). PIN_NUMBER may be in the range from 1-8. For 1650 * any other value, this function acts as a no-op. 1651 */ 1652static void 1653max3421_gpout_set_value(struct usb_hcd *hcd, u8 pin_number, u8 value) 1654{ 1655 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1656 u8 mask, idx; 1657 1658 --pin_number; 1659 if (pin_number >= MAX3421_GPOUT_COUNT) 1660 return; 1661 1662 mask = 1u << (pin_number % 4); 1663 idx = pin_number / 4; 1664 1665 if (value) 1666 max3421_hcd->iopins[idx] |= mask; 1667 else 1668 max3421_hcd->iopins[idx] &= ~mask; 1669 set_bit(IOPIN_UPDATE, &max3421_hcd->todo); 1670 wake_up_process(max3421_hcd->spi_thread); 1671} 1672 1673static int 1674max3421_hub_control(struct usb_hcd *hcd, u16 type_req, u16 value, u16 index, 1675 char *buf, u16 length) 1676{ 1677 struct spi_device *spi = to_spi_device(hcd->self.controller); 1678 struct max3421_hcd *max3421_hcd = hcd_to_max3421(hcd); 1679 struct max3421_hcd_platform_data *pdata; 1680 unsigned long flags; 1681 int retval = 0; 1682 1683 pdata = spi->dev.platform_data; 1684 1685 spin_lock_irqsave(&max3421_hcd->lock, flags); 1686 1687 switch (type_req) { 1688 case ClearHubFeature: 1689 break; 1690 case ClearPortFeature: 1691 switch (value) { 1692 case USB_PORT_FEAT_SUSPEND: 1693 break; 1694 case USB_PORT_FEAT_POWER: 1695 dev_dbg(hcd->self.controller, "power-off\n"); 1696 max3421_gpout_set_value(hcd, pdata->vbus_gpout, 1697 !pdata->vbus_active_level); 1698 fallthrough; 1699 default: 1700 max3421_hcd->port_status &= ~(1 << value); 1701 } 1702 break; 1703 case GetHubDescriptor: 1704 hub_descriptor((struct usb_hub_descriptor *) buf); 1705 break; 1706 1707 case DeviceRequest | USB_REQ_GET_DESCRIPTOR: 1708 case GetPortErrorCount: 1709 case SetHubDepth: 1710 /* USB3 only */ 1711 goto error; 1712 1713 case GetHubStatus: 1714 *(__le32 *) buf = cpu_to_le32(0); 1715 break; 1716 1717 case GetPortStatus: 1718 if (index != 1) { 1719 retval = -EPIPE; 1720 goto error; 1721 } 1722 ((__le16 *) buf)[0] = cpu_to_le16(max3421_hcd->port_status); 1723 ((__le16 *) buf)[1] = 1724 cpu_to_le16(max3421_hcd->port_status >> 16); 1725 break; 1726 1727 case SetHubFeature: 1728 retval = -EPIPE; 1729 break; 1730 1731 case SetPortFeature: 1732 switch (value) { 1733 case USB_PORT_FEAT_LINK_STATE: 1734 case USB_PORT_FEAT_U1_TIMEOUT: 1735 case USB_PORT_FEAT_U2_TIMEOUT: 1736 case USB_PORT_FEAT_BH_PORT_RESET: 1737 goto error; 1738 case USB_PORT_FEAT_SUSPEND: 1739 if (max3421_hcd->active) 1740 max3421_hcd->port_status |= 1741 USB_PORT_STAT_SUSPEND; 1742 break; 1743 case USB_PORT_FEAT_POWER: 1744 dev_dbg(hcd->self.controller, "power-on\n"); 1745 max3421_hcd->port_status |= USB_PORT_STAT_POWER; 1746 max3421_gpout_set_value(hcd, pdata->vbus_gpout, 1747 pdata->vbus_active_level); 1748 break; 1749 case USB_PORT_FEAT_RESET: 1750 max3421_reset_port(hcd); 1751 fallthrough; 1752 default: 1753 if ((max3421_hcd->port_status & USB_PORT_STAT_POWER) 1754 != 0) 1755 max3421_hcd->port_status |= (1 << value); 1756 } 1757 break; 1758 1759 default: 1760 dev_dbg(hcd->self.controller, 1761 "hub control req%04x v%04x i%04x l%d\n", 1762 type_req, value, index, length); 1763error: /* "protocol stall" on error */ 1764 retval = -EPIPE; 1765 } 1766 1767 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1768 return retval; 1769} 1770 1771static int 1772max3421_bus_suspend(struct usb_hcd *hcd) 1773{ 1774 return -1; 1775} 1776 1777static int 1778max3421_bus_resume(struct usb_hcd *hcd) 1779{ 1780 return -1; 1781} 1782 1783static const struct hc_driver max3421_hcd_desc = { 1784 .description = "max3421", 1785 .product_desc = DRIVER_DESC, 1786 .hcd_priv_size = sizeof(struct max3421_hcd), 1787 .flags = HCD_USB11, 1788 .reset = max3421_reset, 1789 .start = max3421_start, 1790 .stop = max3421_stop, 1791 .get_frame_number = max3421_get_frame_number, 1792 .urb_enqueue = max3421_urb_enqueue, 1793 .urb_dequeue = max3421_urb_dequeue, 1794 .endpoint_disable = max3421_endpoint_disable, 1795 .hub_status_data = max3421_hub_status_data, 1796 .hub_control = max3421_hub_control, 1797 .bus_suspend = max3421_bus_suspend, 1798 .bus_resume = max3421_bus_resume, 1799}; 1800 1801static int 1802max3421_of_vbus_en_pin(struct device *dev, struct max3421_hcd_platform_data *pdata) 1803{ 1804 int retval; 1805 uint32_t value[2]; 1806 1807 if (!pdata) 1808 return -EINVAL; 1809 1810 retval = of_property_read_u32_array(dev->of_node, "maxim,vbus-en-pin", value, 2); 1811 if (retval) { 1812 dev_err(dev, "device tree node property 'maxim,vbus-en-pin' is missing\n"); 1813 return retval; 1814 } 1815 dev_info(dev, "property 'maxim,vbus-en-pin' value is <%d %d>\n", value[0], value[1]); 1816 1817 pdata->vbus_gpout = value[0]; 1818 pdata->vbus_active_level = value[1]; 1819 1820 return 0; 1821} 1822 1823static int 1824max3421_probe(struct spi_device *spi) 1825{ 1826 struct device *dev = &spi->dev; 1827 struct max3421_hcd *max3421_hcd; 1828 struct usb_hcd *hcd = NULL; 1829 struct max3421_hcd_platform_data *pdata = NULL; 1830 int retval; 1831 1832 if (spi_setup(spi) < 0) { 1833 dev_err(&spi->dev, "Unable to setup SPI bus"); 1834 return -EFAULT; 1835 } 1836 1837 if (!spi->irq) { 1838 dev_err(dev, "Failed to get SPI IRQ"); 1839 return -EFAULT; 1840 } 1841 1842 if (IS_ENABLED(CONFIG_OF) && dev->of_node) { 1843 pdata = devm_kzalloc(&spi->dev, sizeof(*pdata), GFP_KERNEL); 1844 if (!pdata) { 1845 retval = -ENOMEM; 1846 goto error; 1847 } 1848 retval = max3421_of_vbus_en_pin(dev, pdata); 1849 if (retval) 1850 goto error; 1851 1852 spi->dev.platform_data = pdata; 1853 } 1854 1855 pdata = spi->dev.platform_data; 1856 if (!pdata) { 1857 dev_err(&spi->dev, "driver configuration data is not provided\n"); 1858 retval = -EFAULT; 1859 goto error; 1860 } 1861 if (pdata->vbus_active_level > 1) { 1862 dev_err(&spi->dev, "vbus active level value %d is out of range (0/1)\n", pdata->vbus_active_level); 1863 retval = -EINVAL; 1864 goto error; 1865 } 1866 if (pdata->vbus_gpout < 1 || pdata->vbus_gpout > MAX3421_GPOUT_COUNT) { 1867 dev_err(&spi->dev, "vbus gpout value %d is out of range (1..8)\n", pdata->vbus_gpout); 1868 retval = -EINVAL; 1869 goto error; 1870 } 1871 1872 retval = -ENOMEM; 1873 hcd = usb_create_hcd(&max3421_hcd_desc, &spi->dev, 1874 dev_name(&spi->dev)); 1875 if (!hcd) { 1876 dev_err(&spi->dev, "failed to create HCD structure\n"); 1877 goto error; 1878 } 1879 set_bit(HCD_FLAG_POLL_RH, &hcd->flags); 1880 max3421_hcd = hcd_to_max3421(hcd); 1881 INIT_LIST_HEAD(&max3421_hcd->ep_list); 1882 spi_set_drvdata(spi, max3421_hcd); 1883 1884 max3421_hcd->tx = kmalloc(sizeof(*max3421_hcd->tx), GFP_KERNEL); 1885 if (!max3421_hcd->tx) 1886 goto error; 1887 max3421_hcd->rx = kmalloc(sizeof(*max3421_hcd->rx), GFP_KERNEL); 1888 if (!max3421_hcd->rx) 1889 goto error; 1890 1891 max3421_hcd->spi_thread = kthread_run(max3421_spi_thread, hcd, 1892 "max3421_spi_thread"); 1893 if (max3421_hcd->spi_thread == ERR_PTR(-ENOMEM)) { 1894 dev_err(&spi->dev, 1895 "failed to create SPI thread (out of memory)\n"); 1896 goto error; 1897 } 1898 1899 retval = usb_add_hcd(hcd, 0, 0); 1900 if (retval) { 1901 dev_err(&spi->dev, "failed to add HCD\n"); 1902 goto error; 1903 } 1904 1905 retval = request_irq(spi->irq, max3421_irq_handler, 1906 IRQF_TRIGGER_LOW, "max3421", hcd); 1907 if (retval < 0) { 1908 dev_err(&spi->dev, "failed to request irq %d\n", spi->irq); 1909 goto error; 1910 } 1911 return 0; 1912 1913error: 1914 if (IS_ENABLED(CONFIG_OF) && dev->of_node && pdata) { 1915 devm_kfree(&spi->dev, pdata); 1916 spi->dev.platform_data = NULL; 1917 } 1918 1919 if (hcd) { 1920 kfree(max3421_hcd->tx); 1921 kfree(max3421_hcd->rx); 1922 if (max3421_hcd->spi_thread) 1923 kthread_stop(max3421_hcd->spi_thread); 1924 usb_put_hcd(hcd); 1925 } 1926 return retval; 1927} 1928 1929static void 1930max3421_remove(struct spi_device *spi) 1931{ 1932 struct max3421_hcd *max3421_hcd; 1933 struct usb_hcd *hcd; 1934 unsigned long flags; 1935 1936 max3421_hcd = spi_get_drvdata(spi); 1937 hcd = max3421_to_hcd(max3421_hcd); 1938 1939 usb_remove_hcd(hcd); 1940 1941 spin_lock_irqsave(&max3421_hcd->lock, flags); 1942 1943 kthread_stop(max3421_hcd->spi_thread); 1944 1945 spin_unlock_irqrestore(&max3421_hcd->lock, flags); 1946 1947 free_irq(spi->irq, hcd); 1948 1949 usb_put_hcd(hcd); 1950} 1951 1952static const struct of_device_id max3421_of_match_table[] = { 1953 { .compatible = "maxim,max3421", }, 1954 {}, 1955}; 1956MODULE_DEVICE_TABLE(of, max3421_of_match_table); 1957 1958static struct spi_driver max3421_driver = { 1959 .probe = max3421_probe, 1960 .remove = max3421_remove, 1961 .driver = { 1962 .name = "max3421-hcd", 1963 .of_match_table = of_match_ptr(max3421_of_match_table), 1964 }, 1965}; 1966 1967module_spi_driver(max3421_driver); 1968 1969MODULE_DESCRIPTION(DRIVER_DESC); 1970MODULE_AUTHOR("David Mosberger <davidm@egauge.net>"); 1971MODULE_LICENSE("GPL");