Lines Matching refs: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",
80 tegra_xusb_find_pad_node(struct tegra_xusb_padctl *padctl, const char *name)
84 pads = of_get_child_by_name(padctl->dev->of_node, "pads");
154 struct tegra_xusb_padctl *padctl,
161 pad->dev.parent = padctl->dev;
164 pad->padctl = padctl;
224 list_add_tail(&lane->list, &pad->padctl->lanes);
259 tegra_xusb_pad_create(struct tegra_xusb_padctl *padctl,
266 np = tegra_xusb_find_pad_node(padctl, soc->name);
270 pad = soc->ops->probe(padctl, soc, np);
273 dev_err(padctl->dev, "failed to create pad %s: %d\n",
280 padctl->pcie = pad;
283 padctl->sata = pad;
286 padctl->usb2 = pad;
289 padctl->ulpi = pad;
292 padctl->hsic = pad;
297 static void __tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl)
301 list_for_each_entry_safe_reverse(pad, tmp, &padctl->pads, list) {
307 static void tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl)
309 mutex_lock(&padctl->lock);
310 __tegra_xusb_remove_pads(padctl);
311 mutex_unlock(&padctl->lock);
316 struct tegra_xusb_padctl *padctl = lane->pad->padctl;
325 value = padctl_readl(padctl, soc->offset);
328 padctl_writel(padctl, value, soc->offset);
345 static int tegra_xusb_setup_pads(struct tegra_xusb_padctl *padctl)
350 mutex_lock(&padctl->lock);
352 for (i = 0; i < padctl->soc->num_pads; i++) {
353 const struct tegra_xusb_pad_soc *soc = padctl->soc->pads[i];
356 pad = tegra_xusb_pad_create(padctl, soc);
359 dev_err(padctl->dev, "failed to create pad %s: %d\n",
361 __tegra_xusb_remove_pads(padctl);
362 mutex_unlock(&padctl->lock);
369 list_add_tail(&pad->list, &padctl->pads);
372 list_for_each_entry(pad, &padctl->pads, list)
375 mutex_unlock(&padctl->lock);
387 struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl,
398 list_for_each_entry(lane, &padctl->lanes, list) {
420 lane = tegra_xusb_find_lane(port->padctl, map->type,
439 tegra_xusb_find_port_node(struct tegra_xusb_padctl *padctl, const char *type,
445 ports = of_get_child_by_name(padctl->dev->of_node, "ports");
462 tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type,
468 np = tegra_xusb_find_port_node(padctl, type, index);
472 list_for_each_entry(port, &padctl->ports, list) {
485 tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl, unsigned int index)
489 port = tegra_xusb_find_port(padctl, "usb2", index);
497 tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl, unsigned int index)
501 port = tegra_xusb_find_port(padctl, "usb3", index);
521 struct tegra_xusb_padctl *padctl,
529 port->padctl = padctl;
535 port->dev.parent = padctl->dev;
688 lane = tegra_xusb_find_lane(port->padctl, "usb2", port->index);
752 static int tegra_xusb_add_usb2_port(struct tegra_xusb_padctl *padctl,
763 np = tegra_xusb_find_port_node(padctl, "usb2", index);
773 err = tegra_xusb_port_init(&usb2->base, padctl, np, "usb2", index);
777 usb2->base.ops = padctl->soc->ports.usb2.ops;
792 list_add_tail(&usb2->base.list, &padctl->ports);
823 static int tegra_xusb_add_ulpi_port(struct tegra_xusb_padctl *padctl,
830 np = tegra_xusb_find_port_node(padctl, "ulpi", index);
840 err = tegra_xusb_port_init(&ulpi->base, padctl, np, "ulpi", index);
844 ulpi->base.ops = padctl->soc->ports.ulpi.ops;
859 list_add_tail(&ulpi->base.list, &padctl->ports);
879 static int tegra_xusb_add_hsic_port(struct tegra_xusb_padctl *padctl,
886 np = tegra_xusb_find_port_node(padctl, "hsic", index);
896 err = tegra_xusb_port_init(&hsic->base, padctl, np, "hsic", index);
900 hsic->base.ops = padctl->soc->ports.hsic.ops;
914 list_add_tail(&hsic->base.list, &padctl->ports);
960 static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
972 np = tegra_xusb_find_port_node(padctl, "usb3", index);
982 err = tegra_xusb_port_init(&usb3->base, padctl, np, "usb3", index);
986 usb3->base.ops = padctl->soc->ports.usb3.ops;
1000 list_add_tail(&usb3->base.list, &padctl->ports);
1021 static void __tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl)
1025 list_for_each_entry_safe_reverse(port, tmp, &padctl->ports, list) {
1031 static int tegra_xusb_find_unused_usb3_port(struct tegra_xusb_padctl *padctl)
1036 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1037 np = tegra_xusb_find_port_node(padctl, "usb3", i);
1049 struct tegra_xusb_padctl *padctl = usb2->base.padctl;
1051 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1052 usb3 = tegra_xusb_find_usb3_port(padctl, i);
1070 fake = tegra_xusb_find_unused_usb3_port(usb2->base.padctl);
1083 static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl)
1090 mutex_lock(&padctl->lock);
1092 for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
1093 err = tegra_xusb_add_usb2_port(padctl, i);
1098 for (i = 0; i < padctl->soc->ports.ulpi.count; i++) {
1099 err = tegra_xusb_add_ulpi_port(padctl, i);
1104 for (i = 0; i < padctl->soc->ports.hsic.count; i++) {
1105 err = tegra_xusb_add_hsic_port(padctl, i);
1110 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1111 err = tegra_xusb_add_usb3_port(padctl, i);
1116 if (padctl->soc->need_fake_usb3_port) {
1117 for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
1118 usb2 = tegra_xusb_find_usb2_port(padctl, i);
1128 list_for_each_entry(port, &padctl->ports, list) {
1131 dev_err(padctl->dev, "failed to enable port %s: %d\n",
1138 __tegra_xusb_remove_ports(padctl);
1140 mutex_unlock(&padctl->lock);
1144 static void tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl)
1146 mutex_lock(&padctl->lock);
1147 __tegra_xusb_remove_ports(padctl);
1148 mutex_unlock(&padctl->lock);
1155 struct tegra_xusb_padctl *padctl;
1172 padctl = soc->ops->probe(&pdev->dev, soc);
1173 if (IS_ERR(padctl))
1174 return PTR_ERR(padctl);
1176 platform_set_drvdata(pdev, padctl);
1177 INIT_LIST_HEAD(&padctl->ports);
1178 INIT_LIST_HEAD(&padctl->lanes);
1179 INIT_LIST_HEAD(&padctl->pads);
1180 mutex_init(&padctl->lock);
1183 padctl->regs = devm_ioremap_resource(&pdev->dev, res);
1184 if (IS_ERR(padctl->regs)) {
1185 err = PTR_ERR(padctl->regs);
1189 padctl->rst = devm_reset_control_get(&pdev->dev, NULL);
1190 if (IS_ERR(padctl->rst)) {
1191 err = PTR_ERR(padctl->rst);
1195 padctl->supplies = devm_kcalloc(&pdev->dev, padctl->soc->num_supplies,
1196 sizeof(*padctl->supplies), GFP_KERNEL);
1197 if (!padctl->supplies) {
1202 regulator_bulk_set_supply_names(padctl->supplies,
1203 padctl->soc->supply_names,
1204 padctl->soc->num_supplies);
1206 err = devm_regulator_bulk_get(&pdev->dev, padctl->soc->num_supplies,
1207 padctl->supplies);
1213 err = reset_control_deassert(padctl->rst);
1217 err = regulator_bulk_enable(padctl->soc->num_supplies,
1218 padctl->supplies);
1224 err = tegra_xusb_setup_pads(padctl);
1230 err = tegra_xusb_setup_ports(padctl);
1245 tegra_xusb_remove_pads(padctl);
1247 regulator_bulk_disable(padctl->soc->num_supplies, padctl->supplies);
1249 reset_control_assert(padctl->rst);
1252 soc->ops->remove(padctl);
1258 struct tegra_xusb_padctl *padctl = platform_get_drvdata(pdev);
1261 tegra_xusb_remove_ports(padctl);
1262 tegra_xusb_remove_pads(padctl);
1264 err = regulator_bulk_disable(padctl->soc->num_supplies,
1265 padctl->supplies);
1269 err = reset_control_assert(padctl->rst);
1273 padctl->soc->ops->remove(padctl);
1280 .name = "tegra-xusb-padctl",
1290 struct tegra_xusb_padctl *padctl;
1294 np = of_parse_phandle(dev->of_node, "nvidia,xusb-padctl", 0);
1311 padctl = platform_get_drvdata(pdev);
1312 if (!padctl) {
1317 return padctl;
1321 void tegra_xusb_padctl_put(struct tegra_xusb_padctl *padctl)
1323 if (padctl)
1324 put_device(padctl->dev);
1328 int tegra_xusb_padctl_usb3_save_context(struct tegra_xusb_padctl *padctl,
1331 if (padctl->soc->ops->usb3_save_context)
1332 return padctl->soc->ops->usb3_save_context(padctl, port);
1338 int tegra_xusb_padctl_hsic_set_idle(struct tegra_xusb_padctl *padctl,
1341 if (padctl->soc->ops->hsic_set_idle)
1342 return padctl->soc->ops->hsic_set_idle(padctl, port, idle);
1348 int tegra_xusb_padctl_usb3_set_lfps_detect(struct tegra_xusb_padctl *padctl,
1351 if (padctl->soc->ops->usb3_set_lfps_detect)
1352 return padctl->soc->ops->usb3_set_lfps_detect(padctl, port,
1359 int tegra_xusb_padctl_set_vbus_override(struct tegra_xusb_padctl *padctl,
1362 if (padctl->soc->ops->vbus_override)
1363 return padctl->soc->ops->vbus_override(padctl, val);
1372 struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1374 if (padctl->soc->ops->utmi_port_reset)
1375 return padctl->soc->ops->utmi_port_reset(phy);
1381 int tegra_xusb_padctl_get_usb3_companion(struct tegra_xusb_padctl *padctl,
1388 usb2 = tegra_xusb_find_usb2_port(padctl, port);
1392 for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1393 usb3 = tegra_xusb_find_usb3_port(padctl, i);