Lines Matching full:pad
35 struct tegra_xusb_pad *pad = dev_get_drvdata(dev); in tegra_xusb_pad_of_xlate() local
42 for (i = 0; i < pad->soc->num_lanes; i++) { in tegra_xusb_pad_of_xlate()
43 if (!pad->lanes[i]) in tegra_xusb_pad_of_xlate()
46 if (pad->lanes[i]->dev.of_node == args->np) { in tegra_xusb_pad_of_xlate()
47 phy = pad->lanes[i]; in tegra_xusb_pad_of_xlate()
91 tegra_xusb_pad_find_phy_node(struct tegra_xusb_pad *pad, unsigned int index) in tegra_xusb_pad_find_phy_node() argument
95 lanes = of_get_child_by_name(pad->dev.of_node, "lanes"); in tegra_xusb_pad_find_phy_node()
99 np = of_get_child_by_name(lanes, pad->soc->lanes[index].name); in tegra_xusb_pad_find_phy_node()
108 struct device *dev = &lane->pad->dev; in tegra_xusb_lane_parse_dt()
133 lane->pad->ops->remove(lane); in tegra_xusb_lane_destroy()
140 struct tegra_xusb_pad *pad = to_tegra_xusb_pad(dev); in tegra_xusb_pad_release() local
142 pad->soc->ops->remove(pad); in tegra_xusb_pad_release()
149 int tegra_xusb_pad_init(struct tegra_xusb_pad *pad, in tegra_xusb_pad_init() argument
155 device_initialize(&pad->dev); in tegra_xusb_pad_init()
156 INIT_LIST_HEAD(&pad->list); in tegra_xusb_pad_init()
157 pad->dev.parent = padctl->dev; in tegra_xusb_pad_init()
158 pad->dev.type = &tegra_xusb_pad_type; in tegra_xusb_pad_init()
159 pad->dev.of_node = np; in tegra_xusb_pad_init()
160 pad->padctl = padctl; in tegra_xusb_pad_init()
162 err = dev_set_name(&pad->dev, "%s", pad->soc->name); in tegra_xusb_pad_init()
166 err = device_add(&pad->dev); in tegra_xusb_pad_init()
173 device_unregister(&pad->dev); in tegra_xusb_pad_init()
177 int tegra_xusb_pad_register(struct tegra_xusb_pad *pad, in tegra_xusb_pad_register() argument
185 children = of_get_child_by_name(pad->dev.of_node, "lanes"); in tegra_xusb_pad_register()
189 pad->lanes = devm_kcalloc(&pad->dev, pad->soc->num_lanes, sizeof(lane), in tegra_xusb_pad_register()
191 if (!pad->lanes) { in tegra_xusb_pad_register()
196 for (i = 0; i < pad->soc->num_lanes; i++) { in tegra_xusb_pad_register()
197 struct device_node *np = tegra_xusb_pad_find_phy_node(pad, i); in tegra_xusb_pad_register()
206 pad->lanes[i] = phy_create(&pad->dev, np, ops); in tegra_xusb_pad_register()
207 if (IS_ERR(pad->lanes[i])) { in tegra_xusb_pad_register()
208 err = PTR_ERR(pad->lanes[i]); in tegra_xusb_pad_register()
213 lane = pad->ops->probe(pad, np, i); in tegra_xusb_pad_register()
215 phy_destroy(pad->lanes[i]); in tegra_xusb_pad_register()
220 list_add_tail(&lane->list, &pad->padctl->lanes); in tegra_xusb_pad_register()
221 phy_set_drvdata(pad->lanes[i], lane); in tegra_xusb_pad_register()
224 pad->provider = of_phy_provider_register_full(&pad->dev, children, in tegra_xusb_pad_register()
226 if (IS_ERR(pad->provider)) { in tegra_xusb_pad_register()
227 err = PTR_ERR(pad->provider); in tegra_xusb_pad_register()
235 tegra_xusb_lane_destroy(pad->lanes[i]); in tegra_xusb_pad_register()
242 void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad) in tegra_xusb_pad_unregister() argument
244 unsigned int i = pad->soc->num_lanes; in tegra_xusb_pad_unregister()
246 of_phy_provider_unregister(pad->provider); in tegra_xusb_pad_unregister()
249 tegra_xusb_lane_destroy(pad->lanes[i]); in tegra_xusb_pad_unregister()
251 device_unregister(&pad->dev); in tegra_xusb_pad_unregister()
258 struct tegra_xusb_pad *pad; in tegra_xusb_pad_create() local
266 pad = soc->ops->probe(padctl, soc, np); in tegra_xusb_pad_create()
267 if (IS_ERR(pad)) { in tegra_xusb_pad_create()
268 err = PTR_ERR(pad); in tegra_xusb_pad_create()
269 dev_err(padctl->dev, "failed to create pad %s: %d\n", in tegra_xusb_pad_create()
276 padctl->pcie = pad; in tegra_xusb_pad_create()
279 padctl->sata = pad; in tegra_xusb_pad_create()
282 padctl->usb2 = pad; in tegra_xusb_pad_create()
285 padctl->ulpi = pad; in tegra_xusb_pad_create()
288 padctl->hsic = pad; in tegra_xusb_pad_create()
290 return pad; in tegra_xusb_pad_create()
295 struct tegra_xusb_pad *pad, *tmp; in __tegra_xusb_remove_pads() local
297 list_for_each_entry_safe_reverse(pad, tmp, &padctl->pads, list) { in __tegra_xusb_remove_pads()
298 list_del(&pad->list); in __tegra_xusb_remove_pads()
299 tegra_xusb_pad_unregister(pad); in __tegra_xusb_remove_pads()
312 struct tegra_xusb_padctl *padctl = lane->pad->padctl; in tegra_xusb_lane_program()
323 static void tegra_xusb_pad_program(struct tegra_xusb_pad *pad) in tegra_xusb_pad_program() argument
327 for (i = 0; i < pad->soc->num_lanes; i++) { in tegra_xusb_pad_program()
330 if (pad->lanes[i]) { in tegra_xusb_pad_program()
331 lane = phy_get_drvdata(pad->lanes[i]); in tegra_xusb_pad_program()
339 struct tegra_xusb_pad *pad; in tegra_xusb_setup_pads() local
348 pad = tegra_xusb_pad_create(padctl, soc); in tegra_xusb_setup_pads()
349 if (IS_ERR(pad)) { in tegra_xusb_setup_pads()
350 err = PTR_ERR(pad); in tegra_xusb_setup_pads()
351 dev_err(padctl->dev, "failed to create pad %s: %d\n", in tegra_xusb_setup_pads()
358 if (!pad) in tegra_xusb_setup_pads()
361 list_add_tail(&pad->list, &padctl->pads); in tegra_xusb_setup_pads()
364 list_for_each_entry(pad, &padctl->pads, list) in tegra_xusb_setup_pads()
365 tegra_xusb_pad_program(pad); in tegra_xusb_setup_pads()
945 * registry of pad controllers, but since there will almost certainly in tegra_xusb_padctl_get()
1005 MODULE_DESCRIPTION("Tegra XUSB Pad Controller driver");