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 = resource_size(&pdev->resource[0]); 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_reset (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 return 0; 237 } 238 239 static int __devinit 240 ohci_at91_start (struct usb_hcd *hcd) 241 { 242 struct ohci_hcd *ohci = hcd_to_ohci (hcd); 243 int ret; 244 245 if ((ret = ohci_run(ohci)) < 0) { 246 dev_err(hcd->self.controller, "can't start %s\n", 247 hcd->self.bus_name); 248 ohci_stop(hcd); 249 return ret; 250 } 251 return 0; 252 } 253 254 static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int enable) 255 { 256 if (!valid_port(port)) 257 return; 258 259 if (!gpio_is_valid(pdata->vbus_pin[port])) 260 return; 261 262 gpio_set_value(pdata->vbus_pin[port], 263 pdata->vbus_pin_active_low[port] ^ enable); 264 } 265 266 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port) 267 { 268 if (!valid_port(port)) 269 return -EINVAL; 270 271 if (!gpio_is_valid(pdata->vbus_pin[port])) 272 return -EINVAL; 273 274 return gpio_get_value(pdata->vbus_pin[port]) ^ 275 pdata->vbus_pin_active_low[port]; 276 } 277 278 /* 279 * Update the status data from the hub with the over-current indicator change. 280 */ 281 static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf) 282 { 283 struct at91_usbh_data *pdata = hcd->self.controller->platform_data; 284 int length = ohci_hub_status_data(hcd, buf); 285 int port; 286 287 at91_for_each_port(port) { 288 if (pdata->overcurrent_changed[port]) { 289 if (!length) 290 length = 1; 291 buf[0] |= 1 << (port + 1); 292 } 293 } 294 295 return length; 296 } 297 298 /* 299 * Look at the control requests to the root hub and see if we need to override. 300 */ 301 static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, 302 u16 wIndex, char *buf, u16 wLength) 303 { 304 struct at91_usbh_data *pdata = hcd->self.controller->platform_data; 305 struct usb_hub_descriptor *desc; 306 int ret = -EINVAL; 307 u32 *data = (u32 *)buf; 308 309 dev_dbg(hcd->self.controller, 310 "ohci_at91_hub_control(%p,0x%04x,0x%04x,0x%04x,%p,%04x)\n", 311 hcd, typeReq, wValue, wIndex, buf, wLength); 312 313 wIndex--; 314 315 switch (typeReq) { 316 case SetPortFeature: 317 if (wValue == USB_PORT_FEAT_POWER) { 318 dev_dbg(hcd->self.controller, "SetPortFeat: POWER\n"); 319 if (valid_port(wIndex)) { 320 ohci_at91_usb_set_power(pdata, wIndex, 1); 321 ret = 0; 322 } 323 324 goto out; 325 } 326 break; 327 328 case ClearPortFeature: 329 switch (wValue) { 330 case USB_PORT_FEAT_C_OVER_CURRENT: 331 dev_dbg(hcd->self.controller, 332 "ClearPortFeature: C_OVER_CURRENT\n"); 333 334 if (valid_port(wIndex)) { 335 pdata->overcurrent_changed[wIndex] = 0; 336 pdata->overcurrent_status[wIndex] = 0; 337 } 338 339 goto out; 340 341 case USB_PORT_FEAT_OVER_CURRENT: 342 dev_dbg(hcd->self.controller, 343 "ClearPortFeature: OVER_CURRENT\n"); 344 345 if (valid_port(wIndex)) 346 pdata->overcurrent_status[wIndex] = 0; 347 348 goto out; 349 350 case USB_PORT_FEAT_POWER: 351 dev_dbg(hcd->self.controller, 352 "ClearPortFeature: POWER\n"); 353 354 if (valid_port(wIndex)) { 355 ohci_at91_usb_set_power(pdata, wIndex, 0); 356 return 0; 357 } 358 } 359 break; 360 } 361 362 ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength); 363 if (ret) 364 goto out; 365 366 switch (typeReq) { 367 case GetHubDescriptor: 368 369 /* update the hub's descriptor */ 370 371 desc = (struct usb_hub_descriptor *)buf; 372 373 dev_dbg(hcd->self.controller, "wHubCharacteristics 0x%04x\n", 374 desc->wHubCharacteristics); 375 376 /* remove the old configurations for power-switching, and 377 * over-current protection, and insert our new configuration 378 */ 379 380 desc->wHubCharacteristics &= ~cpu_to_le16(HUB_CHAR_LPSM); 381 desc->wHubCharacteristics |= cpu_to_le16(0x0001); 382 383 if (pdata->overcurrent_supported) { 384 desc->wHubCharacteristics &= ~cpu_to_le16(HUB_CHAR_OCPM); 385 desc->wHubCharacteristics |= cpu_to_le16(0x0008|0x0001); 386 } 387 388 dev_dbg(hcd->self.controller, "wHubCharacteristics after 0x%04x\n", 389 desc->wHubCharacteristics); 390 391 return ret; 392 393 case GetPortStatus: 394 /* check port status */ 395 396 dev_dbg(hcd->self.controller, "GetPortStatus(%d)\n", wIndex); 397 398 if (valid_port(wIndex)) { 399 if (!ohci_at91_usb_get_power(pdata, wIndex)) 400 *data &= ~cpu_to_le32(RH_PS_PPS); 401 402 if (pdata->overcurrent_changed[wIndex]) 403 *data |= cpu_to_le32(RH_PS_OCIC); 404 405 if (pdata->overcurrent_status[wIndex]) 406 *data |= cpu_to_le32(RH_PS_POCI); 407 } 408 } 409 410 out: 411 return ret; 412 } 413 414 /*-------------------------------------------------------------------------*/ 415 416 static const struct hc_driver ohci_at91_hc_driver = { 417 .description = hcd_name, 418 .product_desc = "AT91 OHCI", 419 .hcd_priv_size = sizeof(struct ohci_hcd), 420 421 /* 422 * generic hardware linkage 423 */ 424 .irq = ohci_irq, 425 .flags = HCD_USB11 | HCD_MEMORY, 426 427 /* 428 * basic lifecycle operations 429 */ 430 .reset = ohci_at91_reset, 431 .start = ohci_at91_start, 432 .stop = ohci_stop, 433 .shutdown = ohci_shutdown, 434 435 /* 436 * managing i/o requests and associated device resources 437 */ 438 .urb_enqueue = ohci_urb_enqueue, 439 .urb_dequeue = ohci_urb_dequeue, 440 .endpoint_disable = ohci_endpoint_disable, 441 442 /* 443 * scheduling support 444 */ 445 .get_frame_number = ohci_get_frame, 446 447 /* 448 * root hub support 449 */ 450 .hub_status_data = ohci_at91_hub_status_data, 451 .hub_control = ohci_at91_hub_control, 452 #ifdef CONFIG_PM 453 .bus_suspend = ohci_bus_suspend, 454 .bus_resume = ohci_bus_resume, 455 #endif 456 .start_port_reset = ohci_start_port_reset, 457 }; 458 459 /*-------------------------------------------------------------------------*/ 460 461 static irqreturn_t ohci_hcd_at91_overcurrent_irq(int irq, void *data) 462 { 463 struct platform_device *pdev = data; 464 struct at91_usbh_data *pdata = pdev->dev.platform_data; 465 int val, gpio, port; 466 467 /* From the GPIO notifying the over-current situation, find 468 * out the corresponding port */ 469 at91_for_each_port(port) { 470 if (gpio_is_valid(pdata->overcurrent_pin[port]) && 471 gpio_to_irq(pdata->overcurrent_pin[port]) == irq) { 472 gpio = pdata->overcurrent_pin[port]; 473 break; 474 } 475 } 476 477 if (port == AT91_MAX_USBH_PORTS) { 478 dev_err(& pdev->dev, "overcurrent interrupt from unknown GPIO\n"); 479 return IRQ_HANDLED; 480 } 481 482 val = gpio_get_value(gpio); 483 484 /* When notified of an over-current situation, disable power 485 on the corresponding port, and mark this port in 486 over-current. */ 487 if (!val) { 488 ohci_at91_usb_set_power(pdata, port, 0); 489 pdata->overcurrent_status[port] = 1; 490 pdata->overcurrent_changed[port] = 1; 491 } 492 493 dev_dbg(& pdev->dev, "overcurrent situation %s\n", 494 val ? "exited" : "notified"); 495 496 return IRQ_HANDLED; 497 } 498 499 #ifdef CONFIG_OF 500 static const struct of_device_id at91_ohci_dt_ids[] = { 501 { .compatible = "atmel,at91rm9200-ohci" }, 502 { /* sentinel */ } 503 }; 504 505 MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids); 506 507 static u64 at91_ohci_dma_mask = DMA_BIT_MASK(32); 508 509 static int __devinit ohci_at91_of_init(struct platform_device *pdev) 510 { 511 struct device_node *np = pdev->dev.of_node; 512 int i, gpio; 513 enum of_gpio_flags flags; 514 struct at91_usbh_data *pdata; 515 u32 ports; 516 517 if (!np) 518 return 0; 519 520 /* Right now device-tree probed devices don't get dma_mask set. 521 * Since shared usb code relies on it, set it here for now. 522 * Once we have dma capability bindings this can go away. 523 */ 524 if (!pdev->dev.dma_mask) 525 pdev->dev.dma_mask = &at91_ohci_dma_mask; 526 527 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 528 if (!pdata) 529 return -ENOMEM; 530 531 if (!of_property_read_u32(np, "num-ports", &ports)) 532 pdata->ports = ports; 533 534 at91_for_each_port(i) { 535 gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i, &flags); 536 pdata->vbus_pin[i] = gpio; 537 if (!gpio_is_valid(gpio)) 538 continue; 539 pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW; 540 } 541 542 at91_for_each_port(i) 543 pdata->overcurrent_pin[i] = 544 of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags); 545 546 pdev->dev.platform_data = pdata; 547 548 return 0; 549 } 550 #else 551 static int __devinit ohci_at91_of_init(struct platform_device *pdev) 552 { 553 return 0; 554 } 555 #endif 556 557 /*-------------------------------------------------------------------------*/ 558 559 static int __devinit ohci_hcd_at91_drv_probe(struct platform_device *pdev) 560 { 561 struct at91_usbh_data *pdata; 562 int i; 563 int gpio; 564 int ret; 565 566 ret = ohci_at91_of_init(pdev); 567 if (ret) 568 return ret; 569 570 pdata = pdev->dev.platform_data; 571 572 if (pdata) { 573 at91_for_each_port(i) { 574 /* 575 * do not configure PIO if not in relation with 576 * real USB port on board 577 */ 578 if (i >= pdata->ports) { 579 pdata->vbus_pin[i] = -EINVAL; 580 pdata->overcurrent_pin[i] = -EINVAL; 581 break; 582 } 583 584 if (!gpio_is_valid(pdata->vbus_pin[i])) 585 continue; 586 gpio = pdata->vbus_pin[i]; 587 588 ret = gpio_request(gpio, "ohci_vbus"); 589 if (ret) { 590 dev_err(&pdev->dev, 591 "can't request vbus gpio %d\n", gpio); 592 continue; 593 } 594 ret = gpio_direction_output(gpio, 595 !pdata->vbus_pin_active_low[i]); 596 if (ret) { 597 dev_err(&pdev->dev, 598 "can't put vbus gpio %d as output %d\n", 599 gpio, !pdata->vbus_pin_active_low[i]); 600 gpio_free(gpio); 601 continue; 602 } 603 604 ohci_at91_usb_set_power(pdata, i, 1); 605 } 606 607 at91_for_each_port(i) { 608 if (!gpio_is_valid(pdata->overcurrent_pin[i])) 609 continue; 610 gpio = pdata->overcurrent_pin[i]; 611 612 ret = gpio_request(gpio, "ohci_overcurrent"); 613 if (ret) { 614 dev_err(&pdev->dev, 615 "can't request overcurrent gpio %d\n", 616 gpio); 617 continue; 618 } 619 620 ret = gpio_direction_input(gpio); 621 if (ret) { 622 dev_err(&pdev->dev, 623 "can't configure overcurrent gpio %d as input\n", 624 gpio); 625 gpio_free(gpio); 626 continue; 627 } 628 629 ret = request_irq(gpio_to_irq(gpio), 630 ohci_hcd_at91_overcurrent_irq, 631 IRQF_SHARED, "ohci_overcurrent", pdev); 632 if (ret) { 633 gpio_free(gpio); 634 dev_err(&pdev->dev, 635 "can't get gpio IRQ for overcurrent\n"); 636 } 637 } 638 } 639 640 device_init_wakeup(&pdev->dev, 1); 641 return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev); 642 } 643 644 static int __devexit ohci_hcd_at91_drv_remove(struct platform_device *pdev) 645 { 646 struct at91_usbh_data *pdata = pdev->dev.platform_data; 647 int i; 648 649 if (pdata) { 650 at91_for_each_port(i) { 651 if (!gpio_is_valid(pdata->vbus_pin[i])) 652 continue; 653 ohci_at91_usb_set_power(pdata, i, 0); 654 gpio_free(pdata->vbus_pin[i]); 655 } 656 657 at91_for_each_port(i) { 658 if (!gpio_is_valid(pdata->overcurrent_pin[i])) 659 continue; 660 free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev); 661 gpio_free(pdata->overcurrent_pin[i]); 662 } 663 } 664 665 device_init_wakeup(&pdev->dev, 0); 666 usb_hcd_at91_remove(platform_get_drvdata(pdev), pdev); 667 return 0; 668 } 669 670 #ifdef CONFIG_PM 671 672 static int 673 ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg) 674 { 675 struct usb_hcd *hcd = platform_get_drvdata(pdev); 676 struct ohci_hcd *ohci = hcd_to_ohci(hcd); 677 678 if (device_may_wakeup(&pdev->dev)) 679 enable_irq_wake(hcd->irq); 680 681 /* 682 * The integrated transceivers seem unable to notice disconnect, 683 * reconnect, or wakeup without the 48 MHz clock active. so for 684 * correctness, always discard connection state (using reset). 685 * 686 * REVISIT: some boards will be able to turn VBUS off... 687 */ 688 if (at91_suspend_entering_slow_clock()) { 689 ohci_usb_reset (ohci); 690 /* flush the writes */ 691 (void) ohci_readl (ohci, &ohci->regs->control); 692 at91_stop_clock(); 693 } 694 695 return 0; 696 } 697 698 static int ohci_hcd_at91_drv_resume(struct platform_device *pdev) 699 { 700 struct usb_hcd *hcd = platform_get_drvdata(pdev); 701 702 if (device_may_wakeup(&pdev->dev)) 703 disable_irq_wake(hcd->irq); 704 705 if (!clocked) 706 at91_start_clock(); 707 708 ohci_finish_controller_resume(hcd); 709 return 0; 710 } 711 #else 712 #define ohci_hcd_at91_drv_suspend NULL 713 #define ohci_hcd_at91_drv_resume NULL 714 #endif 715 716 MODULE_ALIAS("platform:at91_ohci"); 717 718 static struct platform_driver ohci_hcd_at91_driver = { 719 .probe = ohci_hcd_at91_drv_probe, 720 .remove = __devexit_p(ohci_hcd_at91_drv_remove), 721 .shutdown = usb_hcd_platform_shutdown, 722 .suspend = ohci_hcd_at91_drv_suspend, 723 .resume = ohci_hcd_at91_drv_resume, 724 .driver = { 725 .name = "at91_ohci", 726 .owner = THIS_MODULE, 727 .of_match_table = of_match_ptr(at91_ohci_dt_ids), 728 }, 729 }; 730