1 /* 2 * OHCI HCD (Host Controller Driver) for USB. 3 * 4 * Copyright (C) 2004 SAN People (Pty) Ltd. 5 * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org> 6 * 7 * AT91 Bus Glue 8 * 9 * Based on fragments of 2.4 driver by Rick Bronson. 10 * Based on ohci-omap.c 11 * 12 * This file is licenced under the GPL. 13 */ 14 15 #include <linux/clk.h> 16 #include <linux/platform_device.h> 17 #include <linux/of_platform.h> 18 #include <linux/of_gpio.h> 19 20 #include <mach/hardware.h> 21 #include <asm/gpio.h> 22 23 #include <mach/board.h> 24 #include <mach/cpu.h> 25 26 #ifndef CONFIG_ARCH_AT91 27 #error "CONFIG_ARCH_AT91 must be defined." 28 #endif 29 30 #define valid_port(index) ((index) >= 0 && (index) < AT91_MAX_USBH_PORTS) 31 #define at91_for_each_port(index) \ 32 for ((index) = 0; (index) < AT91_MAX_USBH_PORTS; (index)++) 33 34 /* interface and function clocks; sometimes also an AHB clock */ 35 static struct clk *iclk, *fclk, *hclk; 36 static int clocked; 37 38 extern int usb_disabled(void); 39 40 /*-------------------------------------------------------------------------*/ 41 42 static void at91_start_clock(void) 43 { 44 clk_enable(hclk); 45 clk_enable(iclk); 46 clk_enable(fclk); 47 clocked = 1; 48 } 49 50 static void at91_stop_clock(void) 51 { 52 clk_disable(fclk); 53 clk_disable(iclk); 54 clk_disable(hclk); 55 clocked = 0; 56 } 57 58 static void at91_start_hc(struct platform_device *pdev) 59 { 60 struct usb_hcd *hcd = platform_get_drvdata(pdev); 61 struct ohci_regs __iomem *regs = hcd->regs; 62 63 dev_dbg(&pdev->dev, "start\n"); 64 65 /* 66 * Start the USB clocks. 67 */ 68 at91_start_clock(); 69 70 /* 71 * The USB host controller must remain in reset. 72 */ 73 writel(0, ®s->control); 74 } 75 76 static void at91_stop_hc(struct platform_device *pdev) 77 { 78 struct usb_hcd *hcd = platform_get_drvdata(pdev); 79 struct ohci_regs __iomem *regs = hcd->regs; 80 81 dev_dbg(&pdev->dev, "stop\n"); 82 83 /* 84 * Put the USB host controller into reset. 85 */ 86 writel(0, ®s->control); 87 88 /* 89 * Stop the USB clocks. 90 */ 91 at91_stop_clock(); 92 } 93 94 95 /*-------------------------------------------------------------------------*/ 96 97 static void __devexit usb_hcd_at91_remove (struct usb_hcd *, struct platform_device *); 98 99 /* configure so an HC device and id are always provided */ 100 /* always called with process context; sleeping is OK */ 101 102 103 /** 104 * usb_hcd_at91_probe - initialize AT91-based HCDs 105 * Context: !in_interrupt() 106 * 107 * Allocates basic resources for this USB host controller, and 108 * then invokes the start() method for the HCD associated with it 109 * through the hotplug entry's driver_data. 110 */ 111 static int __devinit usb_hcd_at91_probe(const struct hc_driver *driver, 112 struct platform_device *pdev) 113 { 114 int retval; 115 struct usb_hcd *hcd = NULL; 116 117 if (pdev->num_resources != 2) { 118 pr_debug("hcd probe: invalid num_resources"); 119 return -ENODEV; 120 } 121 122 if ((pdev->resource[0].flags != IORESOURCE_MEM) 123 || (pdev->resource[1].flags != IORESOURCE_IRQ)) { 124 pr_debug("hcd probe: invalid resource type\n"); 125 return -ENODEV; 126 } 127 128 hcd = usb_create_hcd(driver, &pdev->dev, "at91"); 129 if (!hcd) 130 return -ENOMEM; 131 hcd->rsrc_start = pdev->resource[0].start; 132 hcd->rsrc_len = pdev->resource[0].end - pdev->resource[0].start + 1; 133 134 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { 135 pr_debug("request_mem_region failed\n"); 136 retval = -EBUSY; 137 goto err1; 138 } 139 140 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); 141 if (!hcd->regs) { 142 pr_debug("ioremap failed\n"); 143 retval = -EIO; 144 goto err2; 145 } 146 147 iclk = clk_get(&pdev->dev, "ohci_clk"); 148 if (IS_ERR(iclk)) { 149 dev_err(&pdev->dev, "failed to get ohci_clk\n"); 150 retval = PTR_ERR(iclk); 151 goto err3; 152 } 153 fclk = clk_get(&pdev->dev, "uhpck"); 154 if (IS_ERR(fclk)) { 155 dev_err(&pdev->dev, "failed to get uhpck\n"); 156 retval = PTR_ERR(fclk); 157 goto err4; 158 } 159 hclk = clk_get(&pdev->dev, "hclk"); 160 if (IS_ERR(hclk)) { 161 dev_err(&pdev->dev, "failed to get hclk\n"); 162 retval = PTR_ERR(hclk); 163 goto err5; 164 } 165 166 at91_start_hc(pdev); 167 ohci_hcd_init(hcd_to_ohci(hcd)); 168 169 retval = usb_add_hcd(hcd, pdev->resource[1].start, IRQF_SHARED); 170 if (retval == 0) 171 return retval; 172 173 /* Error handling */ 174 at91_stop_hc(pdev); 175 176 clk_put(hclk); 177 err5: 178 clk_put(fclk); 179 err4: 180 clk_put(iclk); 181 182 err3: 183 iounmap(hcd->regs); 184 185 err2: 186 release_mem_region(hcd->rsrc_start, hcd->rsrc_len); 187 188 err1: 189 usb_put_hcd(hcd); 190 return retval; 191 } 192 193 194 /* may be called with controller, bus, and devices active */ 195 196 /** 197 * usb_hcd_at91_remove - shutdown processing for AT91-based HCDs 198 * @dev: USB Host Controller being removed 199 * Context: !in_interrupt() 200 * 201 * Reverses the effect of usb_hcd_at91_probe(), first invoking 202 * the HCD's stop() method. It is always called from a thread 203 * context, "rmmod" or something similar. 204 * 205 */ 206 static void __devexit usb_hcd_at91_remove(struct usb_hcd *hcd, 207 struct platform_device *pdev) 208 { 209 usb_remove_hcd(hcd); 210 at91_stop_hc(pdev); 211 iounmap(hcd->regs); 212 release_mem_region(hcd->rsrc_start, hcd->rsrc_len); 213 usb_put_hcd(hcd); 214 215 clk_put(hclk); 216 clk_put(fclk); 217 clk_put(iclk); 218 fclk = iclk = hclk = NULL; 219 220 dev_set_drvdata(&pdev->dev, NULL); 221 } 222 223 /*-------------------------------------------------------------------------*/ 224 225 static int __devinit 226 ohci_at91_start (struct usb_hcd *hcd) 227 { 228 struct at91_usbh_data *board = hcd->self.controller->platform_data; 229 struct ohci_hcd *ohci = hcd_to_ohci (hcd); 230 int ret; 231 232 if ((ret = ohci_init(ohci)) < 0) 233 return ret; 234 235 ohci->num_ports = board->ports; 236 237 if ((ret = ohci_run(ohci)) < 0) { 238 err("can't start %s", hcd->self.bus_name); 239 ohci_stop(hcd); 240 return ret; 241 } 242 return 0; 243 } 244 245 static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int enable) 246 { 247 if (!valid_port(port)) 248 return; 249 250 if (!gpio_is_valid(pdata->vbus_pin[port])) 251 return; 252 253 gpio_set_value(pdata->vbus_pin[port], 254 pdata->vbus_pin_active_low[port] ^ enable); 255 } 256 257 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port) 258 { 259 if (!valid_port(port)) 260 return -EINVAL; 261 262 if (!gpio_is_valid(pdata->vbus_pin[port])) 263 return -EINVAL; 264 265 return gpio_get_value(pdata->vbus_pin[port]) ^ 266 pdata->vbus_pin_active_low[port]; 267 } 268 269 /* 270 * Update the status data from the hub with the over-current indicator change. 271 */ 272 static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf) 273 { 274 struct at91_usbh_data *pdata = hcd->self.controller->platform_data; 275 int length = ohci_hub_status_data(hcd, buf); 276 int port; 277 278 at91_for_each_port(port) { 279 if (pdata->overcurrent_changed[port]) { 280 if (!length) 281 length = 1; 282 buf[0] |= 1 << (port + 1); 283 } 284 } 285 286 return length; 287 } 288 289 /* 290 * Look at the control requests to the root hub and see if we need to override. 291 */ 292 static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, 293 u16 wIndex, char *buf, u16 wLength) 294 { 295 struct at91_usbh_data *pdata = hcd->self.controller->platform_data; 296 struct usb_hub_descriptor *desc; 297 int ret = -EINVAL; 298 u32 *data = (u32 *)buf; 299 300 dev_dbg(hcd->self.controller, 301 "ohci_at91_hub_control(%p,0x%04x,0x%04x,0x%04x,%p,%04x)\n", 302 hcd, typeReq, wValue, wIndex, buf, wLength); 303 304 wIndex--; 305 306 switch (typeReq) { 307 case SetPortFeature: 308 if (wValue == USB_PORT_FEAT_POWER) { 309 dev_dbg(hcd->self.controller, "SetPortFeat: POWER\n"); 310 if (valid_port(wIndex)) { 311 ohci_at91_usb_set_power(pdata, wIndex, 1); 312 ret = 0; 313 } 314 315 goto out; 316 } 317 break; 318 319 case ClearPortFeature: 320 switch (wValue) { 321 case USB_PORT_FEAT_C_OVER_CURRENT: 322 dev_dbg(hcd->self.controller, 323 "ClearPortFeature: C_OVER_CURRENT\n"); 324 325 if (valid_port(wIndex)) { 326 pdata->overcurrent_changed[wIndex] = 0; 327 pdata->overcurrent_status[wIndex] = 0; 328 } 329 330 goto out; 331 332 case USB_PORT_FEAT_OVER_CURRENT: 333 dev_dbg(hcd->self.controller, 334 "ClearPortFeature: OVER_CURRENT\n"); 335 336 if (valid_port(wIndex)) 337 pdata->overcurrent_status[wIndex] = 0; 338 339 goto out; 340 341 case USB_PORT_FEAT_POWER: 342 dev_dbg(hcd->self.controller, 343 "ClearPortFeature: POWER\n"); 344 345 if (valid_port(wIndex)) { 346 ohci_at91_usb_set_power(pdata, wIndex, 0); 347 return 0; 348 } 349 } 350 break; 351 } 352 353 ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength); 354 if (ret) 355 goto out; 356 357 switch (typeReq) { 358 case GetHubDescriptor: 359 360 /* update the hub's descriptor */ 361 362 desc = (struct usb_hub_descriptor *)buf; 363 364 dev_dbg(hcd->self.controller, "wHubCharacteristics 0x%04x\n", 365 desc->wHubCharacteristics); 366 367 /* remove the old configurations for power-switching, and 368 * over-current protection, and insert our new configuration 369 */ 370 371 desc->wHubCharacteristics &= ~cpu_to_le16(HUB_CHAR_LPSM); 372 desc->wHubCharacteristics |= cpu_to_le16(0x0001); 373 374 if (pdata->overcurrent_supported) { 375 desc->wHubCharacteristics &= ~cpu_to_le16(HUB_CHAR_OCPM); 376 desc->wHubCharacteristics |= cpu_to_le16(0x0008|0x0001); 377 } 378 379 dev_dbg(hcd->self.controller, "wHubCharacteristics after 0x%04x\n", 380 desc->wHubCharacteristics); 381 382 return ret; 383 384 case GetPortStatus: 385 /* check port status */ 386 387 dev_dbg(hcd->self.controller, "GetPortStatus(%d)\n", wIndex); 388 389 if (valid_port(wIndex)) { 390 if (!ohci_at91_usb_get_power(pdata, wIndex)) 391 *data &= ~cpu_to_le32(RH_PS_PPS); 392 393 if (pdata->overcurrent_changed[wIndex]) 394 *data |= cpu_to_le32(RH_PS_OCIC); 395 396 if (pdata->overcurrent_status[wIndex]) 397 *data |= cpu_to_le32(RH_PS_POCI); 398 } 399 } 400 401 out: 402 return ret; 403 } 404 405 /*-------------------------------------------------------------------------*/ 406 407 static const struct hc_driver ohci_at91_hc_driver = { 408 .description = hcd_name, 409 .product_desc = "AT91 OHCI", 410 .hcd_priv_size = sizeof(struct ohci_hcd), 411 412 /* 413 * generic hardware linkage 414 */ 415 .irq = ohci_irq, 416 .flags = HCD_USB11 | HCD_MEMORY, 417 418 /* 419 * basic lifecycle operations 420 */ 421 .start = ohci_at91_start, 422 .stop = ohci_stop, 423 .shutdown = ohci_shutdown, 424 425 /* 426 * managing i/o requests and associated device resources 427 */ 428 .urb_enqueue = ohci_urb_enqueue, 429 .urb_dequeue = ohci_urb_dequeue, 430 .endpoint_disable = ohci_endpoint_disable, 431 432 /* 433 * scheduling support 434 */ 435 .get_frame_number = ohci_get_frame, 436 437 /* 438 * root hub support 439 */ 440 .hub_status_data = ohci_at91_hub_status_data, 441 .hub_control = ohci_at91_hub_control, 442 #ifdef CONFIG_PM 443 .bus_suspend = ohci_bus_suspend, 444 .bus_resume = ohci_bus_resume, 445 #endif 446 .start_port_reset = ohci_start_port_reset, 447 }; 448 449 /*-------------------------------------------------------------------------*/ 450 451 static irqreturn_t ohci_hcd_at91_overcurrent_irq(int irq, void *data) 452 { 453 struct platform_device *pdev = data; 454 struct at91_usbh_data *pdata = pdev->dev.platform_data; 455 int val, gpio, port; 456 457 /* From the GPIO notifying the over-current situation, find 458 * out the corresponding port */ 459 at91_for_each_port(port) { 460 if (gpio_to_irq(pdata->overcurrent_pin[port]) == irq) { 461 gpio = pdata->overcurrent_pin[port]; 462 break; 463 } 464 } 465 466 if (port == AT91_MAX_USBH_PORTS) { 467 dev_err(& pdev->dev, "overcurrent interrupt from unknown GPIO\n"); 468 return IRQ_HANDLED; 469 } 470 471 val = gpio_get_value(gpio); 472 473 /* When notified of an over-current situation, disable power 474 on the corresponding port, and mark this port in 475 over-current. */ 476 if (!val) { 477 ohci_at91_usb_set_power(pdata, port, 0); 478 pdata->overcurrent_status[port] = 1; 479 pdata->overcurrent_changed[port] = 1; 480 } 481 482 dev_dbg(& pdev->dev, "overcurrent situation %s\n", 483 val ? "exited" : "notified"); 484 485 return IRQ_HANDLED; 486 } 487 488 #ifdef CONFIG_OF 489 static const struct of_device_id at91_ohci_dt_ids[] = { 490 { .compatible = "atmel,at91rm9200-ohci" }, 491 { /* sentinel */ } 492 }; 493 494 MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids); 495 496 static u64 at91_ohci_dma_mask = DMA_BIT_MASK(32); 497 498 static int __devinit ohci_at91_of_init(struct platform_device *pdev) 499 { 500 struct device_node *np = pdev->dev.of_node; 501 int i, gpio; 502 enum of_gpio_flags flags; 503 struct at91_usbh_data *pdata; 504 u32 ports; 505 506 if (!np) 507 return 0; 508 509 /* Right now device-tree probed devices don't get dma_mask set. 510 * Since shared usb code relies on it, set it here for now. 511 * Once we have dma capability bindings this can go away. 512 */ 513 if (!pdev->dev.dma_mask) 514 pdev->dev.dma_mask = &at91_ohci_dma_mask; 515 516 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 517 if (!pdata) 518 return -ENOMEM; 519 520 if (!of_property_read_u32(np, "num-ports", &ports)) 521 pdata->ports = ports; 522 523 at91_for_each_port(i) { 524 gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i, &flags); 525 pdata->vbus_pin[i] = gpio; 526 if (!gpio_is_valid(gpio)) 527 continue; 528 pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW; 529 } 530 531 at91_for_each_port(i) 532 pdata->overcurrent_pin[i] = 533 of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags); 534 535 pdev->dev.platform_data = pdata; 536 537 return 0; 538 } 539 #else 540 static int __devinit ohci_at91_of_init(struct platform_device *pdev) 541 { 542 return 0; 543 } 544 #endif 545 546 /*-------------------------------------------------------------------------*/ 547 548 static int __devinit ohci_hcd_at91_drv_probe(struct platform_device *pdev) 549 { 550 struct at91_usbh_data *pdata; 551 int i; 552 int gpio; 553 int ret; 554 555 ret = ohci_at91_of_init(pdev); 556 if (ret) 557 return ret; 558 559 pdata = pdev->dev.platform_data; 560 561 if (pdata) { 562 at91_for_each_port(i) { 563 if (!gpio_is_valid(pdata->vbus_pin[i])) 564 continue; 565 gpio = pdata->vbus_pin[i]; 566 567 ret = gpio_request(gpio, "ohci_vbus"); 568 if (ret) { 569 dev_err(&pdev->dev, 570 "can't request vbus gpio %d\n", gpio); 571 continue; 572 } 573 ret = gpio_direction_output(gpio, 574 !pdata->vbus_pin_active_low[i]); 575 if (ret) { 576 dev_err(&pdev->dev, 577 "can't put vbus gpio %d as output %d\n", 578 gpio, !pdata->vbus_pin_active_low[i]); 579 gpio_free(gpio); 580 continue; 581 } 582 583 ohci_at91_usb_set_power(pdata, i, 1); 584 } 585 586 at91_for_each_port(i) { 587 if (!gpio_is_valid(pdata->overcurrent_pin[i])) 588 continue; 589 gpio = pdata->overcurrent_pin[i]; 590 591 ret = gpio_request(gpio, "ohci_overcurrent"); 592 if (ret) { 593 dev_err(&pdev->dev, 594 "can't request overcurrent gpio %d\n", 595 gpio); 596 continue; 597 } 598 599 ret = gpio_direction_input(gpio); 600 if (ret) { 601 dev_err(&pdev->dev, 602 "can't configure overcurrent gpio %d as input\n", 603 gpio); 604 gpio_free(gpio); 605 continue; 606 } 607 608 ret = request_irq(gpio_to_irq(gpio), 609 ohci_hcd_at91_overcurrent_irq, 610 IRQF_SHARED, "ohci_overcurrent", pdev); 611 if (ret) { 612 gpio_free(gpio); 613 dev_err(&pdev->dev, 614 "can't get gpio IRQ for overcurrent\n"); 615 } 616 } 617 } 618 619 device_init_wakeup(&pdev->dev, 1); 620 return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev); 621 } 622 623 static int __devexit ohci_hcd_at91_drv_remove(struct platform_device *pdev) 624 { 625 struct at91_usbh_data *pdata = pdev->dev.platform_data; 626 int i; 627 628 if (pdata) { 629 at91_for_each_port(i) { 630 if (!gpio_is_valid(pdata->vbus_pin[i])) 631 continue; 632 ohci_at91_usb_set_power(pdata, i, 0); 633 gpio_free(pdata->vbus_pin[i]); 634 } 635 636 at91_for_each_port(i) { 637 if (!gpio_is_valid(pdata->overcurrent_pin[i])) 638 continue; 639 free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev); 640 gpio_free(pdata->overcurrent_pin[i]); 641 } 642 } 643 644 device_init_wakeup(&pdev->dev, 0); 645 usb_hcd_at91_remove(platform_get_drvdata(pdev), pdev); 646 return 0; 647 } 648 649 #ifdef CONFIG_PM 650 651 static int 652 ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg) 653 { 654 struct usb_hcd *hcd = platform_get_drvdata(pdev); 655 struct ohci_hcd *ohci = hcd_to_ohci(hcd); 656 657 if (device_may_wakeup(&pdev->dev)) 658 enable_irq_wake(hcd->irq); 659 660 /* 661 * The integrated transceivers seem unable to notice disconnect, 662 * reconnect, or wakeup without the 48 MHz clock active. so for 663 * correctness, always discard connection state (using reset). 664 * 665 * REVISIT: some boards will be able to turn VBUS off... 666 */ 667 if (at91_suspend_entering_slow_clock()) { 668 ohci_usb_reset (ohci); 669 /* flush the writes */ 670 (void) ohci_readl (ohci, &ohci->regs->control); 671 at91_stop_clock(); 672 } 673 674 return 0; 675 } 676 677 static int ohci_hcd_at91_drv_resume(struct platform_device *pdev) 678 { 679 struct usb_hcd *hcd = platform_get_drvdata(pdev); 680 681 if (device_may_wakeup(&pdev->dev)) 682 disable_irq_wake(hcd->irq); 683 684 if (!clocked) 685 at91_start_clock(); 686 687 ohci_finish_controller_resume(hcd); 688 return 0; 689 } 690 #else 691 #define ohci_hcd_at91_drv_suspend NULL 692 #define ohci_hcd_at91_drv_resume NULL 693 #endif 694 695 MODULE_ALIAS("platform:at91_ohci"); 696 697 static struct platform_driver ohci_hcd_at91_driver = { 698 .probe = ohci_hcd_at91_drv_probe, 699 .remove = __devexit_p(ohci_hcd_at91_drv_remove), 700 .shutdown = usb_hcd_platform_shutdown, 701 .suspend = ohci_hcd_at91_drv_suspend, 702 .resume = ohci_hcd_at91_drv_resume, 703 .driver = { 704 .name = "at91_ohci", 705 .owner = THIS_MODULE, 706 .of_match_table = of_match_ptr(at91_ohci_dt_ids), 707 }, 708 }; 709