Lines Matching refs:pad
27 struct tegra_xusb_pad *pad = dev_get_drvdata(dev); in tegra_xusb_pad_of_xlate() local
34 for (i = 0; i < pad->soc->num_lanes; i++) { in tegra_xusb_pad_of_xlate()
35 if (!pad->lanes[i]) in tegra_xusb_pad_of_xlate()
38 if (pad->lanes[i]->dev.of_node == args->np) { in tegra_xusb_pad_of_xlate()
39 phy = pad->lanes[i]; in tegra_xusb_pad_of_xlate()
89 tegra_xusb_pad_find_phy_node(struct tegra_xusb_pad *pad, unsigned int index) in tegra_xusb_pad_find_phy_node() argument
93 lanes = of_get_child_by_name(pad->dev.of_node, "lanes"); in tegra_xusb_pad_find_phy_node()
97 np = of_get_child_by_name(lanes, pad->soc->lanes[index].name); in tegra_xusb_pad_find_phy_node()
106 struct device *dev = &lane->pad->dev; in tegra_xusb_lane_parse_dt()
131 lane->pad->ops->remove(lane); in tegra_xusb_lane_destroy()
138 struct tegra_xusb_pad *pad = to_tegra_xusb_pad(dev); in tegra_xusb_pad_release() local
140 pad->soc->ops->remove(pad); in tegra_xusb_pad_release()
147 int tegra_xusb_pad_init(struct tegra_xusb_pad *pad, in tegra_xusb_pad_init() argument
153 device_initialize(&pad->dev); in tegra_xusb_pad_init()
154 INIT_LIST_HEAD(&pad->list); in tegra_xusb_pad_init()
155 pad->dev.parent = padctl->dev; in tegra_xusb_pad_init()
156 pad->dev.type = &tegra_xusb_pad_type; in tegra_xusb_pad_init()
157 pad->dev.of_node = np; in tegra_xusb_pad_init()
158 pad->padctl = padctl; in tegra_xusb_pad_init()
160 err = dev_set_name(&pad->dev, "%s", pad->soc->name); in tegra_xusb_pad_init()
164 err = device_add(&pad->dev); in tegra_xusb_pad_init()
171 device_unregister(&pad->dev); in tegra_xusb_pad_init()
175 int tegra_xusb_pad_register(struct tegra_xusb_pad *pad, in tegra_xusb_pad_register() argument
183 children = of_get_child_by_name(pad->dev.of_node, "lanes"); in tegra_xusb_pad_register()
187 pad->lanes = devm_kcalloc(&pad->dev, pad->soc->num_lanes, sizeof(lane), in tegra_xusb_pad_register()
189 if (!pad->lanes) { in tegra_xusb_pad_register()
194 for (i = 0; i < pad->soc->num_lanes; i++) { in tegra_xusb_pad_register()
195 struct device_node *np = tegra_xusb_pad_find_phy_node(pad, i); in tegra_xusb_pad_register()
204 pad->lanes[i] = phy_create(&pad->dev, np, ops); in tegra_xusb_pad_register()
205 if (IS_ERR(pad->lanes[i])) { in tegra_xusb_pad_register()
206 err = PTR_ERR(pad->lanes[i]); in tegra_xusb_pad_register()
211 lane = pad->ops->probe(pad, np, i); in tegra_xusb_pad_register()
213 phy_destroy(pad->lanes[i]); in tegra_xusb_pad_register()
218 list_add_tail(&lane->list, &pad->padctl->lanes); in tegra_xusb_pad_register()
219 phy_set_drvdata(pad->lanes[i], lane); in tegra_xusb_pad_register()
222 pad->provider = of_phy_provider_register_full(&pad->dev, children, in tegra_xusb_pad_register()
224 if (IS_ERR(pad->provider)) { in tegra_xusb_pad_register()
225 err = PTR_ERR(pad->provider); in tegra_xusb_pad_register()
233 tegra_xusb_lane_destroy(pad->lanes[i]); in tegra_xusb_pad_register()
240 void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad) in tegra_xusb_pad_unregister() argument
242 unsigned int i = pad->soc->num_lanes; in tegra_xusb_pad_unregister()
244 of_phy_provider_unregister(pad->provider); in tegra_xusb_pad_unregister()
247 tegra_xusb_lane_destroy(pad->lanes[i]); in tegra_xusb_pad_unregister()
249 device_unregister(&pad->dev); in tegra_xusb_pad_unregister()
256 struct tegra_xusb_pad *pad; in tegra_xusb_pad_create() local
264 pad = soc->ops->probe(padctl, soc, np); in tegra_xusb_pad_create()
265 if (IS_ERR(pad)) { in tegra_xusb_pad_create()
266 err = PTR_ERR(pad); in tegra_xusb_pad_create()
274 padctl->pcie = pad; in tegra_xusb_pad_create()
277 padctl->sata = pad; in tegra_xusb_pad_create()
280 padctl->usb2 = pad; in tegra_xusb_pad_create()
283 padctl->ulpi = pad; in tegra_xusb_pad_create()
286 padctl->hsic = pad; in tegra_xusb_pad_create()
288 return pad; in tegra_xusb_pad_create()
293 struct tegra_xusb_pad *pad, *tmp; in __tegra_xusb_remove_pads() local
295 list_for_each_entry_safe_reverse(pad, tmp, &padctl->pads, list) { in __tegra_xusb_remove_pads()
296 list_del(&pad->list); in __tegra_xusb_remove_pads()
297 tegra_xusb_pad_unregister(pad); in __tegra_xusb_remove_pads()
310 struct tegra_xusb_padctl *padctl = lane->pad->padctl; in tegra_xusb_lane_program()
325 static void tegra_xusb_pad_program(struct tegra_xusb_pad *pad) in tegra_xusb_pad_program() argument
329 for (i = 0; i < pad->soc->num_lanes; i++) { in tegra_xusb_pad_program()
332 if (pad->lanes[i]) { in tegra_xusb_pad_program()
333 lane = phy_get_drvdata(pad->lanes[i]); in tegra_xusb_pad_program()
341 struct tegra_xusb_pad *pad; in tegra_xusb_setup_pads() local
350 pad = tegra_xusb_pad_create(padctl, soc); in tegra_xusb_setup_pads()
351 if (IS_ERR(pad)) { in tegra_xusb_setup_pads()
352 err = PTR_ERR(pad); in tegra_xusb_setup_pads()
360 if (!pad) in tegra_xusb_setup_pads()
363 list_add_tail(&pad->list, &padctl->pads); in tegra_xusb_setup_pads()
366 list_for_each_entry(pad, &padctl->pads, list) in tegra_xusb_setup_pads()
367 tegra_xusb_pad_program(pad); in tegra_xusb_setup_pads()