Lines Matching defs:padctl
53 .compatible = "nvidia,tegra124-xusb-padctl",
59 .compatible = "nvidia,tegra210-xusb-padctl",
65 .compatible = "nvidia,tegra186-xusb-padctl",
71 .compatible = "nvidia,tegra194-xusb-padctl",
77 .compatible = "nvidia,tegra234-xusb-padctl",
86 tegra_xusb_find_pad_node(struct tegra_xusb_padctl *padctl, const char *name)
90 pads = of_get_child_by_name(padctl->dev->of_node, "pads");
160 struct tegra_xusb_padctl *padctl,
167 pad->dev.parent = padctl->dev;
170 pad->padctl = padctl;
230 list_add_tail(&lane->list, &pad->padctl->lanes);
265 tegra_xusb_pad_create(struct tegra_xusb_padctl *padctl,
272 np = tegra_xusb_find_pad_node(padctl, soc->name);
276 pad = soc->ops->probe(padctl, soc, np);
279 dev_err(padctl->dev, "failed to create pad %s: %d\n",
286 padctl->pcie = pad;
289 padctl->sata = pad;
292 padctl->usb2 = pad;
295 padctl->ulpi = pad;
298 padctl->hsic = pad;
303 static void __tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl)
307 list_for_each_entry_safe_reverse(pad, tmp, &padctl->pads, list) {
313 static void tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl)
315 mutex_lock(&padctl->lock);
316 __tegra_xusb_remove_pads(padctl);
317 mutex_unlock(&padctl->lock);
322 struct tegra_xusb_padctl *padctl = lane->pad->padctl;
334 value = padctl_readl(padctl, soc->offset);
337 padctl_writel(padctl, value, soc->offset);
357 static int tegra_xusb_setup_pads(struct tegra_xusb_padctl *padctl)
362 mutex_lock(&padctl->lock);
364 for (i = 0; i < padctl->soc->num_pads; i++) {
365 const struct tegra_xusb_pad_soc *soc = padctl->soc->pads[i];
368 pad = tegra_xusb_pad_create(padctl, soc);
371 dev_err(padctl->dev, "failed to create pad %s: %d\n",
373 __tegra_xusb_remove_pads(padctl);
374 mutex_unlock(&padctl->lock);
381 list_add_tail(&pad->list, &padctl->pads);
384 list_for_each_entry(pad, &padctl->pads, list)
387 mutex_unlock(&padctl->lock);
399 struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl,
410 list_for_each_entry(lane, &padctl->lanes, list) {
432 lane = tegra_xusb_find_lane(port->padctl, map->type,
451 tegra_xusb_find_port_node(struct tegra_xusb_padctl *padctl, const char *type,
457 ports = of_get_child_by_name(padctl->dev->of_node, "ports");
474 tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type,
480 np = tegra_xusb_find_port_node(padctl, type, index);
484 list_for_each_entry(port, &padctl->ports, list) {
497 tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl, unsigned int index)
501 port = tegra_xusb_find_port(padctl, "usb2", index);
509 tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl, unsigned int index)
513 port = tegra_xusb_find_port(padctl, "usb3", index);
533 struct tegra_xusb_padctl *padctl,
541 port->padctl = padctl;
547 port->dev.parent = padctl->dev;
701 lane = tegra_xusb_find_lane(port->padctl, "usb2", port->index);
784 static int tegra_xusb_add_usb2_port(struct tegra_xusb_padctl *padctl,
795 np = tegra_xusb_find_port_node(padctl, "usb2", index);
805 err = tegra_xusb_port_init(&usb2->base, padctl, np, "usb2", index);
809 usb2->base.ops = padctl->soc->ports.usb2.ops;
824 list_add_tail(&usb2->base.list, &padctl->ports);
855 static int tegra_xusb_add_ulpi_port(struct tegra_xusb_padctl *padctl,
862 np = tegra_xusb_find_port_node(padctl, "ulpi", index);
872 err = tegra_xusb_port_init(&ulpi->base, padctl, np, "ulpi", index);
876 ulpi->base.ops = padctl->soc->ports.ulpi.ops;
891 list_add_tail(&ulpi->base.list, &padctl->ports);
911 static int tegra_xusb_add_hsic_port(struct tegra_xusb_padctl *padctl,
918 np = tegra_xusb_find_port_node(padctl, "hsic", index);
928 err = tegra_xusb_port_init(&hsic->base, padctl, np, "hsic", index);
932 hsic->base.ops = padctl->soc->ports.hsic.ops;
946 list_add_tail(&hsic->base.list, &padctl->ports);
991 static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
1003 np = tegra_xusb_find_port_node(padctl, "usb3", index);
1013 err = tegra_xusb_port_init(&usb3->base, padctl, np, "usb3", index);
1017 usb3->base.ops = padctl->soc->ports.usb3.ops;
1031 list_add_tail(&usb3->base.list, &padctl->ports);
1045 static void __tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl)
1049 list_for_each_entry_safe_reverse(port, tmp, &padctl->ports, list) {
1055 static int tegra_xusb_find_unused_usb3_port(struct tegra_xusb_padctl *padctl)
1060 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1061 np = tegra_xusb_find_port_node(padctl, "usb3", i);
1073 struct tegra_xusb_padctl *padctl = usb2->base.padctl;
1075 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1076 usb3 = tegra_xusb_find_usb3_port(padctl, i);
1094 fake = tegra_xusb_find_unused_usb3_port(usb2->base.padctl);
1107 static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl)
1114 mutex_lock(&padctl->lock);
1116 for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
1117 err = tegra_xusb_add_usb2_port(padctl, i);
1122 for (i = 0; i < padctl->soc->ports.ulpi.count; i++) {
1123 err = tegra_xusb_add_ulpi_port(padctl, i);
1128 for (i = 0; i < padctl->soc->ports.hsic.count; i++) {
1129 err = tegra_xusb_add_hsic_port(padctl, i);
1134 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1135 err = tegra_xusb_add_usb3_port(padctl, i);
1140 if (padctl->soc->need_fake_usb3_port) {
1141 for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
1142 usb2 = tegra_xusb_find_usb2_port(padctl, i);
1152 list_for_each_entry(port, &padctl->ports, list) {
1155 dev_err(padctl->dev, "failed to enable port %s: %d\n",
1162 __tegra_xusb_remove_ports(padctl);
1164 mutex_unlock(&padctl->lock);
1168 static void tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl)
1170 mutex_lock(&padctl->lock);
1171 __tegra_xusb_remove_ports(padctl);
1172 mutex_unlock(&padctl->lock);
1179 struct tegra_xusb_padctl *padctl;
1195 padctl = soc->ops->probe(&pdev->dev, soc);
1196 if (IS_ERR(padctl))
1197 return PTR_ERR(padctl);
1199 platform_set_drvdata(pdev, padctl);
1200 INIT_LIST_HEAD(&padctl->ports);
1201 INIT_LIST_HEAD(&padctl->lanes);
1202 INIT_LIST_HEAD(&padctl->pads);
1203 mutex_init(&padctl->lock);
1205 padctl->regs = devm_platform_ioremap_resource(pdev, 0);
1206 if (IS_ERR(padctl->regs)) {
1207 err = PTR_ERR(padctl->regs);
1211 padctl->rst = devm_reset_control_get(&pdev->dev, NULL);
1212 if (IS_ERR(padctl->rst)) {
1213 err = PTR_ERR(padctl->rst);
1217 padctl->supplies = devm_kcalloc(&pdev->dev, padctl->soc->num_supplies,
1218 sizeof(*padctl->supplies), GFP_KERNEL);
1219 if (!padctl->supplies) {
1224 regulator_bulk_set_supply_names(padctl->supplies,
1225 padctl->soc->supply_names,
1226 padctl->soc->num_supplies);
1228 err = devm_regulator_bulk_get(&pdev->dev, padctl->soc->num_supplies,
1229 padctl->supplies);
1235 err = reset_control_deassert(padctl->rst);
1239 err = regulator_bulk_enable(padctl->soc->num_supplies,
1240 padctl->supplies);
1246 err = tegra_xusb_setup_pads(padctl);
1252 err = tegra_xusb_setup_ports(padctl);
1267 tegra_xusb_remove_pads(padctl);
1269 regulator_bulk_disable(padctl->soc->num_supplies, padctl->supplies);
1271 reset_control_assert(padctl->rst);
1274 soc->ops->remove(padctl);
1280 struct tegra_xusb_padctl *padctl = platform_get_drvdata(pdev);
1283 tegra_xusb_remove_ports(padctl);
1284 tegra_xusb_remove_pads(padctl);
1286 err = regulator_bulk_disable(padctl->soc->num_supplies,
1287 padctl->supplies);
1291 err = reset_control_assert(padctl->rst);
1295 padctl->soc->ops->remove(padctl);
1300 struct tegra_xusb_padctl *padctl = dev_get_drvdata(dev);
1302 if (padctl->soc && padctl->soc->ops && padctl->soc->ops->suspend_noirq)
1303 return padctl->soc->ops->suspend_noirq(padctl);
1310 struct tegra_xusb_padctl *padctl = dev_get_drvdata(dev);
1312 if (padctl->soc && padctl->soc->ops && padctl->soc->ops->resume_noirq)
1313 return padctl->soc->ops->resume_noirq(padctl);
1325 .name = "tegra-xusb-padctl",
1336 struct tegra_xusb_padctl *padctl;
1340 np = of_parse_phandle(dev->of_node, "nvidia,xusb-padctl", 0);
1357 padctl = platform_get_drvdata(pdev);
1358 if (!padctl) {
1363 return padctl;
1367 void tegra_xusb_padctl_put(struct tegra_xusb_padctl *padctl)
1369 if (padctl)
1370 put_device(padctl->dev);
1374 int tegra_xusb_padctl_usb3_save_context(struct tegra_xusb_padctl *padctl,
1377 if (padctl->soc->ops->usb3_save_context)
1378 return padctl->soc->ops->usb3_save_context(padctl, port);
1384 int tegra_xusb_padctl_hsic_set_idle(struct tegra_xusb_padctl *padctl,
1387 if (padctl->soc->ops->hsic_set_idle)
1388 return padctl->soc->ops->hsic_set_idle(padctl, port, idle);
1394 int tegra_xusb_padctl_enable_phy_sleepwalk(struct tegra_xusb_padctl *padctl, struct phy *phy,
1406 int tegra_xusb_padctl_disable_phy_sleepwalk(struct tegra_xusb_padctl *padctl, struct phy *phy)
1417 int tegra_xusb_padctl_enable_phy_wake(struct tegra_xusb_padctl *padctl, struct phy *phy)
1428 int tegra_xusb_padctl_disable_phy_wake(struct tegra_xusb_padctl *padctl, struct phy *phy)
1439 bool tegra_xusb_padctl_remote_wake_detected(struct tegra_xusb_padctl *padctl, struct phy *phy)
1450 int tegra_xusb_padctl_usb3_set_lfps_detect(struct tegra_xusb_padctl *padctl,
1453 if (padctl->soc->ops->usb3_set_lfps_detect)
1454 return padctl->soc->ops->usb3_set_lfps_detect(padctl, port,
1461 int tegra_xusb_padctl_set_vbus_override(struct tegra_xusb_padctl *padctl,
1464 if (padctl->soc->ops->vbus_override)
1465 return padctl->soc->ops->vbus_override(padctl, val);
1474 struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1476 if (padctl->soc->ops->utmi_port_reset)
1477 return padctl->soc->ops->utmi_port_reset(phy);
1486 struct tegra_xusb_padctl *padctl;
1492 padctl = lane->pad->padctl;
1494 if (padctl->soc->ops->utmi_pad_power_on)
1495 padctl->soc->ops->utmi_pad_power_on(phy);
1502 struct tegra_xusb_padctl *padctl;
1508 padctl = lane->pad->padctl;
1510 if (padctl->soc->ops->utmi_pad_power_down)
1511 padctl->soc->ops->utmi_pad_power_down(phy);
1515 int tegra_xusb_padctl_get_usb3_companion(struct tegra_xusb_padctl *padctl,
1522 usb2 = tegra_xusb_find_usb2_port(padctl, port);
1526 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1527 usb3 = tegra_xusb_find_usb3_port(padctl, i);