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_to_irq(pdata->overcurrent_pin[port]) == irq) { 471 gpio = pdata->overcurrent_pin[port]; 472 break; 473 } 474 } 475 476 if (port == AT91_MAX_USBH_PORTS) { 477 dev_err(& pdev->dev, "overcurrent interrupt from unknown GPIO\n"); 478 return IRQ_HANDLED; 479 } 480 481 val = gpio_get_value(gpio); 482 483 /* When notified of an over-current situation, disable power 484 on the corresponding port, and mark this port in 485 over-current. */ 486 if (!val) { 487 ohci_at91_usb_set_power(pdata, port, 0); 488 pdata->overcurrent_status[port] = 1; 489 pdata->overcurrent_changed[port] = 1; 490 } 491 492 dev_dbg(& pdev->dev, "overcurrent situation %s\n", 493 val ? "exited" : "notified"); 494 495 return IRQ_HANDLED; 496 } 497 498 #ifdef CONFIG_OF 499 static const struct of_device_id at91_ohci_dt_ids[] = { 500 { .compatible = "atmel,at91rm9200-ohci" }, 501 { /* sentinel */ } 502 }; 503 504 MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids); 505 506 static u64 at91_ohci_dma_mask = DMA_BIT_MASK(32); 507 508 static int __devinit ohci_at91_of_init(struct platform_device *pdev) 509 { 510 struct device_node *np = pdev->dev.of_node; 511 int i, gpio; 512 enum of_gpio_flags flags; 513 struct at91_usbh_data *pdata; 514 u32 ports; 515 516 if (!np) 517 return 0; 518 519 /* Right now device-tree probed devices don't get dma_mask set. 520 * Since shared usb code relies on it, set it here for now. 521 * Once we have dma capability bindings this can go away. 522 */ 523 if (!pdev->dev.dma_mask) 524 pdev->dev.dma_mask = &at91_ohci_dma_mask; 525 526 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 527 if (!pdata) 528 return -ENOMEM; 529 530 if (!of_property_read_u32(np, "num-ports", &ports)) 531 pdata->ports = ports; 532 533 at91_for_each_port(i) { 534 gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i, &flags); 535 pdata->vbus_pin[i] = gpio; 536 if (!gpio_is_valid(gpio)) 537 continue; 538 pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW; 539 } 540 541 at91_for_each_port(i) 542 pdata->overcurrent_pin[i] = 543 of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags); 544 545 pdev->dev.platform_data = pdata; 546 547 return 0; 548 } 549 #else 550 static int __devinit ohci_at91_of_init(struct platform_device *pdev) 551 { 552 return 0; 553 } 554 #endif 555 556 /*-------------------------------------------------------------------------*/ 557 558 static int __devinit ohci_hcd_at91_drv_probe(struct platform_device *pdev) 559 { 560 struct at91_usbh_data *pdata; 561 int i; 562 int gpio; 563 int ret; 564 565 ret = ohci_at91_of_init(pdev); 566 if (ret) 567 return ret; 568 569 pdata = pdev->dev.platform_data; 570 571 if (pdata) { 572 at91_for_each_port(i) { 573 if (!gpio_is_valid(pdata->vbus_pin[i])) 574 continue; 575 gpio = pdata->vbus_pin[i]; 576 577 ret = gpio_request(gpio, "ohci_vbus"); 578 if (ret) { 579 dev_err(&pdev->dev, 580 "can't request vbus gpio %d\n", gpio); 581 continue; 582 } 583 ret = gpio_direction_output(gpio, 584 !pdata->vbus_pin_active_low[i]); 585 if (ret) { 586 dev_err(&pdev->dev, 587 "can't put vbus gpio %d as output %d\n", 588 gpio, !pdata->vbus_pin_active_low[i]); 589 gpio_free(gpio); 590 continue; 591 } 592 593 ohci_at91_usb_set_power(pdata, i, 1); 594 } 595 596 at91_for_each_port(i) { 597 if (!gpio_is_valid(pdata->overcurrent_pin[i])) 598 continue; 599 gpio = pdata->overcurrent_pin[i]; 600 601 ret = gpio_request(gpio, "ohci_overcurrent"); 602 if (ret) { 603 dev_err(&pdev->dev, 604 "can't request overcurrent gpio %d\n", 605 gpio); 606 continue; 607 } 608 609 ret = gpio_direction_input(gpio); 610 if (ret) { 611 dev_err(&pdev->dev, 612 "can't configure overcurrent gpio %d as input\n", 613 gpio); 614 gpio_free(gpio); 615 continue; 616 } 617 618 ret = request_irq(gpio_to_irq(gpio), 619 ohci_hcd_at91_overcurrent_irq, 620 IRQF_SHARED, "ohci_overcurrent", pdev); 621 if (ret) { 622 gpio_free(gpio); 623 dev_err(&pdev->dev, 624 "can't get gpio IRQ for overcurrent\n"); 625 } 626 } 627 } 628 629 device_init_wakeup(&pdev->dev, 1); 630 return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev); 631 } 632 633 static int __devexit ohci_hcd_at91_drv_remove(struct platform_device *pdev) 634 { 635 struct at91_usbh_data *pdata = pdev->dev.platform_data; 636 int i; 637 638 if (pdata) { 639 at91_for_each_port(i) { 640 if (!gpio_is_valid(pdata->vbus_pin[i])) 641 continue; 642 ohci_at91_usb_set_power(pdata, i, 0); 643 gpio_free(pdata->vbus_pin[i]); 644 } 645 646 at91_for_each_port(i) { 647 if (!gpio_is_valid(pdata->overcurrent_pin[i])) 648 continue; 649 free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev); 650 gpio_free(pdata->overcurrent_pin[i]); 651 } 652 } 653 654 device_init_wakeup(&pdev->dev, 0); 655 usb_hcd_at91_remove(platform_get_drvdata(pdev), pdev); 656 return 0; 657 } 658 659 #ifdef CONFIG_PM 660 661 static int 662 ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg) 663 { 664 struct usb_hcd *hcd = platform_get_drvdata(pdev); 665 struct ohci_hcd *ohci = hcd_to_ohci(hcd); 666 667 if (device_may_wakeup(&pdev->dev)) 668 enable_irq_wake(hcd->irq); 669 670 /* 671 * The integrated transceivers seem unable to notice disconnect, 672 * reconnect, or wakeup without the 48 MHz clock active. so for 673 * correctness, always discard connection state (using reset). 674 * 675 * REVISIT: some boards will be able to turn VBUS off... 676 */ 677 if (at91_suspend_entering_slow_clock()) { 678 ohci_usb_reset (ohci); 679 /* flush the writes */ 680 (void) ohci_readl (ohci, &ohci->regs->control); 681 at91_stop_clock(); 682 } 683 684 return 0; 685 } 686 687 static int ohci_hcd_at91_drv_resume(struct platform_device *pdev) 688 { 689 struct usb_hcd *hcd = platform_get_drvdata(pdev); 690 691 if (device_may_wakeup(&pdev->dev)) 692 disable_irq_wake(hcd->irq); 693 694 if (!clocked) 695 at91_start_clock(); 696 697 ohci_finish_controller_resume(hcd); 698 return 0; 699 } 700 #else 701 #define ohci_hcd_at91_drv_suspend NULL 702 #define ohci_hcd_at91_drv_resume NULL 703 #endif 704 705 MODULE_ALIAS("platform:at91_ohci"); 706 707 static struct platform_driver ohci_hcd_at91_driver = { 708 .probe = ohci_hcd_at91_drv_probe, 709 .remove = __devexit_p(ohci_hcd_at91_drv_remove), 710 .shutdown = usb_hcd_platform_shutdown, 711 .suspend = ohci_hcd_at91_drv_suspend, 712 .resume = ohci_hcd_at91_drv_resume, 713 .driver = { 714 .name = "at91_ohci", 715 .owner = THIS_MODULE, 716 .of_match_table = of_match_ptr(at91_ohci_dt_ids), 717 }, 718 }; 719