1 /* 2 * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms and conditions of the GNU General Public License, 6 * version 2, as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope it will be useful, but WITHOUT 9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * more details. 12 */ 13 14 #include <linux/delay.h> 15 #include <linux/io.h> 16 #include <linux/mailbox_client.h> 17 #include <linux/module.h> 18 #include <linux/of.h> 19 #include <linux/of_device.h> 20 #include <linux/phy/phy.h> 21 #include <linux/phy/tegra/xusb.h> 22 #include <linux/platform_device.h> 23 #include <linux/regulator/consumer.h> 24 #include <linux/reset.h> 25 #include <linux/slab.h> 26 #include <linux/workqueue.h> 27 28 #include <soc/tegra/fuse.h> 29 30 #include "xusb.h" 31 32 static struct phy *tegra_xusb_pad_of_xlate(struct device *dev, 33 struct of_phandle_args *args) 34 { 35 struct tegra_xusb_pad *pad = dev_get_drvdata(dev); 36 struct phy *phy = NULL; 37 unsigned int i; 38 39 if (args->args_count != 0) 40 return ERR_PTR(-EINVAL); 41 42 for (i = 0; i < pad->soc->num_lanes; i++) { 43 if (!pad->lanes[i]) 44 continue; 45 46 if (pad->lanes[i]->dev.of_node == args->np) { 47 phy = pad->lanes[i]; 48 break; 49 } 50 } 51 52 if (phy == NULL) 53 phy = ERR_PTR(-ENODEV); 54 55 return phy; 56 } 57 58 static const struct of_device_id tegra_xusb_padctl_of_match[] = { 59 #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC) 60 { 61 .compatible = "nvidia,tegra124-xusb-padctl", 62 .data = &tegra124_xusb_padctl_soc, 63 }, 64 #endif 65 #if defined(CONFIG_ARCH_TEGRA_210_SOC) 66 { 67 .compatible = "nvidia,tegra210-xusb-padctl", 68 .data = &tegra210_xusb_padctl_soc, 69 }, 70 #endif 71 { } 72 }; 73 MODULE_DEVICE_TABLE(of, tegra_xusb_padctl_of_match); 74 75 static struct device_node * 76 tegra_xusb_find_pad_node(struct tegra_xusb_padctl *padctl, const char *name) 77 { 78 struct device_node *pads, *np; 79 80 pads = of_get_child_by_name(padctl->dev->of_node, "pads"); 81 if (!pads) 82 return NULL; 83 84 np = of_get_child_by_name(pads, name); 85 of_node_put(pads); 86 87 return np; 88 } 89 90 static struct device_node * 91 tegra_xusb_pad_find_phy_node(struct tegra_xusb_pad *pad, unsigned int index) 92 { 93 struct device_node *np, *lanes; 94 95 lanes = of_get_child_by_name(pad->dev.of_node, "lanes"); 96 if (!lanes) 97 return NULL; 98 99 np = of_get_child_by_name(lanes, pad->soc->lanes[index].name); 100 of_node_put(lanes); 101 102 return np; 103 } 104 105 int tegra_xusb_lane_parse_dt(struct tegra_xusb_lane *lane, 106 struct device_node *np) 107 { 108 struct device *dev = &lane->pad->dev; 109 const char *function; 110 int err; 111 112 err = of_property_read_string(np, "nvidia,function", &function); 113 if (err < 0) 114 return err; 115 116 err = match_string(lane->soc->funcs, lane->soc->num_funcs, function); 117 if (err < 0) { 118 dev_err(dev, "invalid function \"%s\" for lane \"%pOFn\"\n", 119 function, np); 120 return err; 121 } 122 123 lane->function = err; 124 125 return 0; 126 } 127 128 static void tegra_xusb_lane_destroy(struct phy *phy) 129 { 130 if (phy) { 131 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 132 133 lane->pad->ops->remove(lane); 134 phy_destroy(phy); 135 } 136 } 137 138 static void tegra_xusb_pad_release(struct device *dev) 139 { 140 struct tegra_xusb_pad *pad = to_tegra_xusb_pad(dev); 141 142 pad->soc->ops->remove(pad); 143 } 144 145 static struct device_type tegra_xusb_pad_type = { 146 .release = tegra_xusb_pad_release, 147 }; 148 149 int tegra_xusb_pad_init(struct tegra_xusb_pad *pad, 150 struct tegra_xusb_padctl *padctl, 151 struct device_node *np) 152 { 153 int err; 154 155 device_initialize(&pad->dev); 156 INIT_LIST_HEAD(&pad->list); 157 pad->dev.parent = padctl->dev; 158 pad->dev.type = &tegra_xusb_pad_type; 159 pad->dev.of_node = np; 160 pad->padctl = padctl; 161 162 err = dev_set_name(&pad->dev, "%s", pad->soc->name); 163 if (err < 0) 164 goto unregister; 165 166 err = device_add(&pad->dev); 167 if (err < 0) 168 goto unregister; 169 170 return 0; 171 172 unregister: 173 device_unregister(&pad->dev); 174 return err; 175 } 176 177 int tegra_xusb_pad_register(struct tegra_xusb_pad *pad, 178 const struct phy_ops *ops) 179 { 180 struct device_node *children; 181 struct phy *lane; 182 unsigned int i; 183 int err; 184 185 children = of_get_child_by_name(pad->dev.of_node, "lanes"); 186 if (!children) 187 return -ENODEV; 188 189 pad->lanes = devm_kcalloc(&pad->dev, pad->soc->num_lanes, sizeof(lane), 190 GFP_KERNEL); 191 if (!pad->lanes) { 192 of_node_put(children); 193 return -ENOMEM; 194 } 195 196 for (i = 0; i < pad->soc->num_lanes; i++) { 197 struct device_node *np = tegra_xusb_pad_find_phy_node(pad, i); 198 struct tegra_xusb_lane *lane; 199 200 /* skip disabled lanes */ 201 if (!np || !of_device_is_available(np)) { 202 of_node_put(np); 203 continue; 204 } 205 206 pad->lanes[i] = phy_create(&pad->dev, np, ops); 207 if (IS_ERR(pad->lanes[i])) { 208 err = PTR_ERR(pad->lanes[i]); 209 of_node_put(np); 210 goto remove; 211 } 212 213 lane = pad->ops->probe(pad, np, i); 214 if (IS_ERR(lane)) { 215 phy_destroy(pad->lanes[i]); 216 err = PTR_ERR(lane); 217 goto remove; 218 } 219 220 list_add_tail(&lane->list, &pad->padctl->lanes); 221 phy_set_drvdata(pad->lanes[i], lane); 222 } 223 224 pad->provider = of_phy_provider_register_full(&pad->dev, children, 225 tegra_xusb_pad_of_xlate); 226 if (IS_ERR(pad->provider)) { 227 err = PTR_ERR(pad->provider); 228 goto remove; 229 } 230 231 return 0; 232 233 remove: 234 while (i--) 235 tegra_xusb_lane_destroy(pad->lanes[i]); 236 237 of_node_put(children); 238 239 return err; 240 } 241 242 void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad) 243 { 244 unsigned int i = pad->soc->num_lanes; 245 246 of_phy_provider_unregister(pad->provider); 247 248 while (i--) 249 tegra_xusb_lane_destroy(pad->lanes[i]); 250 251 device_unregister(&pad->dev); 252 } 253 254 static struct tegra_xusb_pad * 255 tegra_xusb_pad_create(struct tegra_xusb_padctl *padctl, 256 const struct tegra_xusb_pad_soc *soc) 257 { 258 struct tegra_xusb_pad *pad; 259 struct device_node *np; 260 int err; 261 262 np = tegra_xusb_find_pad_node(padctl, soc->name); 263 if (!np || !of_device_is_available(np)) 264 return NULL; 265 266 pad = soc->ops->probe(padctl, soc, np); 267 if (IS_ERR(pad)) { 268 err = PTR_ERR(pad); 269 dev_err(padctl->dev, "failed to create pad %s: %d\n", 270 soc->name, err); 271 return ERR_PTR(err); 272 } 273 274 /* XXX move this into ->probe() to avoid string comparison */ 275 if (strcmp(soc->name, "pcie") == 0) 276 padctl->pcie = pad; 277 278 if (strcmp(soc->name, "sata") == 0) 279 padctl->sata = pad; 280 281 if (strcmp(soc->name, "usb2") == 0) 282 padctl->usb2 = pad; 283 284 if (strcmp(soc->name, "ulpi") == 0) 285 padctl->ulpi = pad; 286 287 if (strcmp(soc->name, "hsic") == 0) 288 padctl->hsic = pad; 289 290 return pad; 291 } 292 293 static void __tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl) 294 { 295 struct tegra_xusb_pad *pad, *tmp; 296 297 list_for_each_entry_safe_reverse(pad, tmp, &padctl->pads, list) { 298 list_del(&pad->list); 299 tegra_xusb_pad_unregister(pad); 300 } 301 } 302 303 static void tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl) 304 { 305 mutex_lock(&padctl->lock); 306 __tegra_xusb_remove_pads(padctl); 307 mutex_unlock(&padctl->lock); 308 } 309 310 static void tegra_xusb_lane_program(struct tegra_xusb_lane *lane) 311 { 312 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 313 const struct tegra_xusb_lane_soc *soc = lane->soc; 314 u32 value; 315 316 /* choose function */ 317 value = padctl_readl(padctl, soc->offset); 318 value &= ~(soc->mask << soc->shift); 319 value |= lane->function << soc->shift; 320 padctl_writel(padctl, value, soc->offset); 321 } 322 323 static void tegra_xusb_pad_program(struct tegra_xusb_pad *pad) 324 { 325 unsigned int i; 326 327 for (i = 0; i < pad->soc->num_lanes; i++) { 328 struct tegra_xusb_lane *lane; 329 330 if (pad->lanes[i]) { 331 lane = phy_get_drvdata(pad->lanes[i]); 332 tegra_xusb_lane_program(lane); 333 } 334 } 335 } 336 337 static int tegra_xusb_setup_pads(struct tegra_xusb_padctl *padctl) 338 { 339 struct tegra_xusb_pad *pad; 340 unsigned int i; 341 342 mutex_lock(&padctl->lock); 343 344 for (i = 0; i < padctl->soc->num_pads; i++) { 345 const struct tegra_xusb_pad_soc *soc = padctl->soc->pads[i]; 346 int err; 347 348 pad = tegra_xusb_pad_create(padctl, soc); 349 if (IS_ERR(pad)) { 350 err = PTR_ERR(pad); 351 dev_err(padctl->dev, "failed to create pad %s: %d\n", 352 soc->name, err); 353 __tegra_xusb_remove_pads(padctl); 354 mutex_unlock(&padctl->lock); 355 return err; 356 } 357 358 if (!pad) 359 continue; 360 361 list_add_tail(&pad->list, &padctl->pads); 362 } 363 364 list_for_each_entry(pad, &padctl->pads, list) 365 tegra_xusb_pad_program(pad); 366 367 mutex_unlock(&padctl->lock); 368 return 0; 369 } 370 371 static bool tegra_xusb_lane_check(struct tegra_xusb_lane *lane, 372 const char *function) 373 { 374 const char *func = lane->soc->funcs[lane->function]; 375 376 return strcmp(function, func) == 0; 377 } 378 379 struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl, 380 const char *type, 381 unsigned int index) 382 { 383 struct tegra_xusb_lane *lane, *hit = ERR_PTR(-ENODEV); 384 char *name; 385 386 name = kasprintf(GFP_KERNEL, "%s-%u", type, index); 387 if (!name) 388 return ERR_PTR(-ENOMEM); 389 390 list_for_each_entry(lane, &padctl->lanes, list) { 391 if (strcmp(lane->soc->name, name) == 0) { 392 hit = lane; 393 break; 394 } 395 } 396 397 kfree(name); 398 return hit; 399 } 400 401 struct tegra_xusb_lane * 402 tegra_xusb_port_find_lane(struct tegra_xusb_port *port, 403 const struct tegra_xusb_lane_map *map, 404 const char *function) 405 { 406 struct tegra_xusb_lane *lane, *match = ERR_PTR(-ENODEV); 407 408 for (; map->type; map++) { 409 if (port->index != map->port) 410 continue; 411 412 lane = tegra_xusb_find_lane(port->padctl, map->type, 413 map->index); 414 if (IS_ERR(lane)) 415 continue; 416 417 if (!tegra_xusb_lane_check(lane, function)) 418 continue; 419 420 if (!IS_ERR(match)) 421 dev_err(&port->dev, "conflicting match: %s-%u / %s\n", 422 map->type, map->index, match->soc->name); 423 else 424 match = lane; 425 } 426 427 return match; 428 } 429 430 static struct device_node * 431 tegra_xusb_find_port_node(struct tegra_xusb_padctl *padctl, const char *type, 432 unsigned int index) 433 { 434 struct device_node *ports, *np; 435 char *name; 436 437 ports = of_get_child_by_name(padctl->dev->of_node, "ports"); 438 if (!ports) 439 return NULL; 440 441 name = kasprintf(GFP_KERNEL, "%s-%u", type, index); 442 if (!name) { 443 of_node_put(ports); 444 return ERR_PTR(-ENOMEM); 445 } 446 np = of_get_child_by_name(ports, name); 447 kfree(name); 448 of_node_put(ports); 449 450 return np; 451 } 452 453 struct tegra_xusb_port * 454 tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type, 455 unsigned int index) 456 { 457 struct tegra_xusb_port *port; 458 struct device_node *np; 459 460 np = tegra_xusb_find_port_node(padctl, type, index); 461 if (!np) 462 return NULL; 463 464 list_for_each_entry(port, &padctl->ports, list) { 465 if (np == port->dev.of_node) { 466 of_node_put(np); 467 return port; 468 } 469 } 470 471 of_node_put(np); 472 473 return NULL; 474 } 475 476 struct tegra_xusb_usb2_port * 477 tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl, unsigned int index) 478 { 479 struct tegra_xusb_port *port; 480 481 port = tegra_xusb_find_port(padctl, "usb2", index); 482 if (port) 483 return to_usb2_port(port); 484 485 return NULL; 486 } 487 488 struct tegra_xusb_usb3_port * 489 tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl, unsigned int index) 490 { 491 struct tegra_xusb_port *port; 492 493 port = tegra_xusb_find_port(padctl, "usb3", index); 494 if (port) 495 return to_usb3_port(port); 496 497 return NULL; 498 } 499 500 static void tegra_xusb_port_release(struct device *dev) 501 { 502 } 503 504 static struct device_type tegra_xusb_port_type = { 505 .release = tegra_xusb_port_release, 506 }; 507 508 static int tegra_xusb_port_init(struct tegra_xusb_port *port, 509 struct tegra_xusb_padctl *padctl, 510 struct device_node *np, 511 const char *name, 512 unsigned int index) 513 { 514 int err; 515 516 INIT_LIST_HEAD(&port->list); 517 port->padctl = padctl; 518 port->index = index; 519 520 device_initialize(&port->dev); 521 port->dev.type = &tegra_xusb_port_type; 522 port->dev.of_node = of_node_get(np); 523 port->dev.parent = padctl->dev; 524 525 err = dev_set_name(&port->dev, "%s-%u", name, index); 526 if (err < 0) 527 goto unregister; 528 529 err = device_add(&port->dev); 530 if (err < 0) 531 goto unregister; 532 533 return 0; 534 535 unregister: 536 device_unregister(&port->dev); 537 return err; 538 } 539 540 static void tegra_xusb_port_unregister(struct tegra_xusb_port *port) 541 { 542 device_unregister(&port->dev); 543 } 544 545 static int tegra_xusb_usb2_port_parse_dt(struct tegra_xusb_usb2_port *usb2) 546 { 547 struct tegra_xusb_port *port = &usb2->base; 548 struct device_node *np = port->dev.of_node; 549 550 usb2->internal = of_property_read_bool(np, "nvidia,internal"); 551 552 usb2->supply = devm_regulator_get(&port->dev, "vbus"); 553 return PTR_ERR_OR_ZERO(usb2->supply); 554 } 555 556 static int tegra_xusb_add_usb2_port(struct tegra_xusb_padctl *padctl, 557 unsigned int index) 558 { 559 struct tegra_xusb_usb2_port *usb2; 560 struct device_node *np; 561 int err = 0; 562 563 /* 564 * USB2 ports don't require additional properties, but if the port is 565 * marked as disabled there is no reason to register it. 566 */ 567 np = tegra_xusb_find_port_node(padctl, "usb2", index); 568 if (!np || !of_device_is_available(np)) 569 goto out; 570 571 usb2 = devm_kzalloc(padctl->dev, sizeof(*usb2), GFP_KERNEL); 572 if (!usb2) { 573 err = -ENOMEM; 574 goto out; 575 } 576 577 err = tegra_xusb_port_init(&usb2->base, padctl, np, "usb2", index); 578 if (err < 0) 579 goto out; 580 581 usb2->base.ops = padctl->soc->ports.usb2.ops; 582 583 usb2->base.lane = usb2->base.ops->map(&usb2->base); 584 if (IS_ERR(usb2->base.lane)) { 585 err = PTR_ERR(usb2->base.lane); 586 goto out; 587 } 588 589 err = tegra_xusb_usb2_port_parse_dt(usb2); 590 if (err < 0) { 591 tegra_xusb_port_unregister(&usb2->base); 592 goto out; 593 } 594 595 list_add_tail(&usb2->base.list, &padctl->ports); 596 597 out: 598 of_node_put(np); 599 return err; 600 } 601 602 static int tegra_xusb_ulpi_port_parse_dt(struct tegra_xusb_ulpi_port *ulpi) 603 { 604 struct tegra_xusb_port *port = &ulpi->base; 605 struct device_node *np = port->dev.of_node; 606 607 ulpi->internal = of_property_read_bool(np, "nvidia,internal"); 608 609 return 0; 610 } 611 612 static int tegra_xusb_add_ulpi_port(struct tegra_xusb_padctl *padctl, 613 unsigned int index) 614 { 615 struct tegra_xusb_ulpi_port *ulpi; 616 struct device_node *np; 617 int err = 0; 618 619 np = tegra_xusb_find_port_node(padctl, "ulpi", index); 620 if (!np || !of_device_is_available(np)) 621 goto out; 622 623 ulpi = devm_kzalloc(padctl->dev, sizeof(*ulpi), GFP_KERNEL); 624 if (!ulpi) { 625 err = -ENOMEM; 626 goto out; 627 } 628 629 err = tegra_xusb_port_init(&ulpi->base, padctl, np, "ulpi", index); 630 if (err < 0) 631 goto out; 632 633 ulpi->base.ops = padctl->soc->ports.ulpi.ops; 634 635 ulpi->base.lane = ulpi->base.ops->map(&ulpi->base); 636 if (IS_ERR(ulpi->base.lane)) { 637 err = PTR_ERR(ulpi->base.lane); 638 goto out; 639 } 640 641 err = tegra_xusb_ulpi_port_parse_dt(ulpi); 642 if (err < 0) { 643 tegra_xusb_port_unregister(&ulpi->base); 644 goto out; 645 } 646 647 list_add_tail(&ulpi->base.list, &padctl->ports); 648 649 out: 650 of_node_put(np); 651 return err; 652 } 653 654 static int tegra_xusb_hsic_port_parse_dt(struct tegra_xusb_hsic_port *hsic) 655 { 656 /* XXX */ 657 return 0; 658 } 659 660 static int tegra_xusb_add_hsic_port(struct tegra_xusb_padctl *padctl, 661 unsigned int index) 662 { 663 struct tegra_xusb_hsic_port *hsic; 664 struct device_node *np; 665 int err = 0; 666 667 np = tegra_xusb_find_port_node(padctl, "hsic", index); 668 if (!np || !of_device_is_available(np)) 669 goto out; 670 671 hsic = devm_kzalloc(padctl->dev, sizeof(*hsic), GFP_KERNEL); 672 if (!hsic) { 673 err = -ENOMEM; 674 goto out; 675 } 676 677 err = tegra_xusb_port_init(&hsic->base, padctl, np, "hsic", index); 678 if (err < 0) 679 goto out; 680 681 hsic->base.ops = padctl->soc->ports.hsic.ops; 682 683 hsic->base.lane = hsic->base.ops->map(&hsic->base); 684 if (IS_ERR(hsic->base.lane)) { 685 err = PTR_ERR(hsic->base.lane); 686 goto out; 687 } 688 689 err = tegra_xusb_hsic_port_parse_dt(hsic); 690 if (err < 0) { 691 tegra_xusb_port_unregister(&hsic->base); 692 goto out; 693 } 694 695 list_add_tail(&hsic->base.list, &padctl->ports); 696 697 out: 698 of_node_put(np); 699 return err; 700 } 701 702 static int tegra_xusb_usb3_port_parse_dt(struct tegra_xusb_usb3_port *usb3) 703 { 704 struct tegra_xusb_port *port = &usb3->base; 705 struct device_node *np = port->dev.of_node; 706 u32 value; 707 int err; 708 709 err = of_property_read_u32(np, "nvidia,usb2-companion", &value); 710 if (err < 0) { 711 dev_err(&port->dev, "failed to read port: %d\n", err); 712 return err; 713 } 714 715 usb3->port = value; 716 717 usb3->internal = of_property_read_bool(np, "nvidia,internal"); 718 719 usb3->supply = devm_regulator_get(&port->dev, "vbus"); 720 return PTR_ERR_OR_ZERO(usb3->supply); 721 } 722 723 static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl, 724 unsigned int index) 725 { 726 struct tegra_xusb_usb3_port *usb3; 727 struct device_node *np; 728 int err = 0; 729 730 /* 731 * If there is no supplemental configuration in the device tree the 732 * port is unusable. But it is valid to configure only a single port, 733 * hence return 0 instead of an error to allow ports to be optional. 734 */ 735 np = tegra_xusb_find_port_node(padctl, "usb3", index); 736 if (!np || !of_device_is_available(np)) 737 goto out; 738 739 usb3 = devm_kzalloc(padctl->dev, sizeof(*usb3), GFP_KERNEL); 740 if (!usb3) { 741 err = -ENOMEM; 742 goto out; 743 } 744 745 err = tegra_xusb_port_init(&usb3->base, padctl, np, "usb3", index); 746 if (err < 0) 747 goto out; 748 749 usb3->base.ops = padctl->soc->ports.usb3.ops; 750 751 usb3->base.lane = usb3->base.ops->map(&usb3->base); 752 if (IS_ERR(usb3->base.lane)) { 753 err = PTR_ERR(usb3->base.lane); 754 goto out; 755 } 756 757 err = tegra_xusb_usb3_port_parse_dt(usb3); 758 if (err < 0) { 759 tegra_xusb_port_unregister(&usb3->base); 760 goto out; 761 } 762 763 list_add_tail(&usb3->base.list, &padctl->ports); 764 765 out: 766 of_node_put(np); 767 return err; 768 } 769 770 static void __tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl) 771 { 772 struct tegra_xusb_port *port, *tmp; 773 774 list_for_each_entry_safe_reverse(port, tmp, &padctl->ports, list) { 775 list_del(&port->list); 776 tegra_xusb_port_unregister(port); 777 } 778 } 779 780 static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl) 781 { 782 struct tegra_xusb_port *port; 783 unsigned int i; 784 int err = 0; 785 786 mutex_lock(&padctl->lock); 787 788 for (i = 0; i < padctl->soc->ports.usb2.count; i++) { 789 err = tegra_xusb_add_usb2_port(padctl, i); 790 if (err < 0) 791 goto remove_ports; 792 } 793 794 for (i = 0; i < padctl->soc->ports.ulpi.count; i++) { 795 err = tegra_xusb_add_ulpi_port(padctl, i); 796 if (err < 0) 797 goto remove_ports; 798 } 799 800 for (i = 0; i < padctl->soc->ports.hsic.count; i++) { 801 err = tegra_xusb_add_hsic_port(padctl, i); 802 if (err < 0) 803 goto remove_ports; 804 } 805 806 for (i = 0; i < padctl->soc->ports.usb3.count; i++) { 807 err = tegra_xusb_add_usb3_port(padctl, i); 808 if (err < 0) 809 goto remove_ports; 810 } 811 812 list_for_each_entry(port, &padctl->ports, list) { 813 err = port->ops->enable(port); 814 if (err < 0) 815 dev_err(padctl->dev, "failed to enable port %s: %d\n", 816 dev_name(&port->dev), err); 817 } 818 819 goto unlock; 820 821 remove_ports: 822 __tegra_xusb_remove_ports(padctl); 823 unlock: 824 mutex_unlock(&padctl->lock); 825 return err; 826 } 827 828 static void tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl) 829 { 830 mutex_lock(&padctl->lock); 831 __tegra_xusb_remove_ports(padctl); 832 mutex_unlock(&padctl->lock); 833 } 834 835 static int tegra_xusb_padctl_probe(struct platform_device *pdev) 836 { 837 struct device_node *np = pdev->dev.of_node; 838 const struct tegra_xusb_padctl_soc *soc; 839 struct tegra_xusb_padctl *padctl; 840 const struct of_device_id *match; 841 struct resource *res; 842 int err; 843 844 /* for backwards compatibility with old device trees */ 845 np = of_get_child_by_name(np, "pads"); 846 if (!np) { 847 dev_warn(&pdev->dev, "deprecated DT, using legacy driver\n"); 848 return tegra_xusb_padctl_legacy_probe(pdev); 849 } 850 851 of_node_put(np); 852 853 match = of_match_node(tegra_xusb_padctl_of_match, pdev->dev.of_node); 854 soc = match->data; 855 856 padctl = soc->ops->probe(&pdev->dev, soc); 857 if (IS_ERR(padctl)) 858 return PTR_ERR(padctl); 859 860 platform_set_drvdata(pdev, padctl); 861 INIT_LIST_HEAD(&padctl->ports); 862 INIT_LIST_HEAD(&padctl->lanes); 863 INIT_LIST_HEAD(&padctl->pads); 864 mutex_init(&padctl->lock); 865 866 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 867 padctl->regs = devm_ioremap_resource(&pdev->dev, res); 868 if (IS_ERR(padctl->regs)) { 869 err = PTR_ERR(padctl->regs); 870 goto remove; 871 } 872 873 padctl->rst = devm_reset_control_get(&pdev->dev, NULL); 874 if (IS_ERR(padctl->rst)) { 875 err = PTR_ERR(padctl->rst); 876 goto remove; 877 } 878 879 err = reset_control_deassert(padctl->rst); 880 if (err < 0) 881 goto remove; 882 883 err = tegra_xusb_setup_pads(padctl); 884 if (err < 0) { 885 dev_err(&pdev->dev, "failed to setup pads: %d\n", err); 886 goto reset; 887 } 888 889 err = tegra_xusb_setup_ports(padctl); 890 if (err) { 891 dev_err(&pdev->dev, "failed to setup XUSB ports: %d\n", err); 892 goto remove_pads; 893 } 894 895 return 0; 896 897 remove_pads: 898 tegra_xusb_remove_pads(padctl); 899 reset: 900 reset_control_assert(padctl->rst); 901 remove: 902 soc->ops->remove(padctl); 903 return err; 904 } 905 906 static int tegra_xusb_padctl_remove(struct platform_device *pdev) 907 { 908 struct tegra_xusb_padctl *padctl = platform_get_drvdata(pdev); 909 int err; 910 911 tegra_xusb_remove_ports(padctl); 912 tegra_xusb_remove_pads(padctl); 913 914 err = reset_control_assert(padctl->rst); 915 if (err < 0) 916 dev_err(&pdev->dev, "failed to assert reset: %d\n", err); 917 918 padctl->soc->ops->remove(padctl); 919 920 return err; 921 } 922 923 static struct platform_driver tegra_xusb_padctl_driver = { 924 .driver = { 925 .name = "tegra-xusb-padctl", 926 .of_match_table = tegra_xusb_padctl_of_match, 927 }, 928 .probe = tegra_xusb_padctl_probe, 929 .remove = tegra_xusb_padctl_remove, 930 }; 931 module_platform_driver(tegra_xusb_padctl_driver); 932 933 struct tegra_xusb_padctl *tegra_xusb_padctl_get(struct device *dev) 934 { 935 struct tegra_xusb_padctl *padctl; 936 struct platform_device *pdev; 937 struct device_node *np; 938 939 np = of_parse_phandle(dev->of_node, "nvidia,xusb-padctl", 0); 940 if (!np) 941 return ERR_PTR(-EINVAL); 942 943 /* 944 * This is slightly ugly. A better implementation would be to keep a 945 * registry of pad controllers, but since there will almost certainly 946 * only ever be one per SoC that would be a little overkill. 947 */ 948 pdev = of_find_device_by_node(np); 949 if (!pdev) { 950 of_node_put(np); 951 return ERR_PTR(-ENODEV); 952 } 953 954 of_node_put(np); 955 956 padctl = platform_get_drvdata(pdev); 957 if (!padctl) { 958 put_device(&pdev->dev); 959 return ERR_PTR(-EPROBE_DEFER); 960 } 961 962 return padctl; 963 } 964 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_get); 965 966 void tegra_xusb_padctl_put(struct tegra_xusb_padctl *padctl) 967 { 968 if (padctl) 969 put_device(padctl->dev); 970 } 971 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_put); 972 973 int tegra_xusb_padctl_usb3_save_context(struct tegra_xusb_padctl *padctl, 974 unsigned int port) 975 { 976 if (padctl->soc->ops->usb3_save_context) 977 return padctl->soc->ops->usb3_save_context(padctl, port); 978 979 return -ENOSYS; 980 } 981 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_usb3_save_context); 982 983 int tegra_xusb_padctl_hsic_set_idle(struct tegra_xusb_padctl *padctl, 984 unsigned int port, bool idle) 985 { 986 if (padctl->soc->ops->hsic_set_idle) 987 return padctl->soc->ops->hsic_set_idle(padctl, port, idle); 988 989 return -ENOSYS; 990 } 991 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_hsic_set_idle); 992 993 int tegra_xusb_padctl_usb3_set_lfps_detect(struct tegra_xusb_padctl *padctl, 994 unsigned int port, bool enable) 995 { 996 if (padctl->soc->ops->usb3_set_lfps_detect) 997 return padctl->soc->ops->usb3_set_lfps_detect(padctl, port, 998 enable); 999 1000 return -ENOSYS; 1001 } 1002 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_usb3_set_lfps_detect); 1003 1004 MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); 1005 MODULE_DESCRIPTION("Tegra XUSB Pad Controller driver"); 1006 MODULE_LICENSE("GPL v2"); 1007