Lines Matching refs:hub
32 * hub requires more than the currently supported supplies, add a new one here.
65 static int onboard_hub_power_on(struct onboard_hub *hub)
69 err = regulator_bulk_enable(hub->pdata->num_supplies, hub->supplies);
71 dev_err(hub->dev, "failed to enable supplies: %d\n", err);
75 fsleep(hub->pdata->reset_us);
76 gpiod_set_value_cansleep(hub->reset_gpio, 0);
78 hub->is_powered_on = true;
83 static int onboard_hub_power_off(struct onboard_hub *hub)
87 gpiod_set_value_cansleep(hub->reset_gpio, 1);
89 err = regulator_bulk_disable(hub->pdata->num_supplies, hub->supplies);
91 dev_err(hub->dev, "failed to disable supplies: %d\n", err);
95 hub->is_powered_on = false;
102 struct onboard_hub *hub = dev_get_drvdata(dev);
106 if (hub->always_powered_in_suspend)
109 mutex_lock(&hub->lock);
111 list_for_each_entry(node, &hub->udev_list, list) {
121 mutex_unlock(&hub->lock);
126 return onboard_hub_power_off(hub);
131 struct onboard_hub *hub = dev_get_drvdata(dev);
133 if (hub->is_powered_on)
136 return onboard_hub_power_on(hub);
144 static int onboard_hub_add_usbdev(struct onboard_hub *hub, struct usb_device *udev)
150 mutex_lock(&hub->lock);
152 if (hub->going_away) {
165 list_add(&node->list, &hub->udev_list);
167 mutex_unlock(&hub->lock);
170 WARN_ON(sysfs_create_link(&hub->dev->kobj, &udev->dev.kobj, link_name));
175 mutex_unlock(&hub->lock);
180 static void onboard_hub_remove_usbdev(struct onboard_hub *hub, const struct usb_device *udev)
186 sysfs_remove_link(&hub->dev->kobj, link_name);
188 mutex_lock(&hub->lock);
190 list_for_each_entry(node, &hub->udev_list, list) {
198 mutex_unlock(&hub->lock);
204 const struct onboard_hub *hub = dev_get_drvdata(dev);
206 return sysfs_emit(buf, "%d\n", hub->always_powered_in_suspend);
212 struct onboard_hub *hub = dev_get_drvdata(dev);
220 hub->always_powered_in_suspend = val;
245 struct onboard_hub *hub;
249 hub = devm_kzalloc(dev, sizeof(*hub), GFP_KERNEL);
250 if (!hub)
257 hub->pdata = of_id->data;
258 if (!hub->pdata)
261 if (hub->pdata->num_supplies > MAX_SUPPLIES)
265 for (i = 0; i < hub->pdata->num_supplies; i++)
266 hub->supplies[i].supply = supply_names[i];
268 err = devm_regulator_bulk_get(dev, hub->pdata->num_supplies, hub->supplies);
274 hub->reset_gpio = devm_gpiod_get_optional(dev, "reset",
276 if (IS_ERR(hub->reset_gpio))
277 return dev_err_probe(dev, PTR_ERR(hub->reset_gpio), "failed to get reset GPIO\n");
279 hub->dev = dev;
280 mutex_init(&hub->lock);
281 INIT_LIST_HEAD(&hub->udev_list);
283 dev_set_drvdata(dev, hub);
285 err = onboard_hub_power_on(hub);
304 struct onboard_hub *hub = dev_get_drvdata(&pdev->dev);
308 hub->going_away = true;
310 mutex_lock(&hub->lock);
313 while (!list_empty(&hub->udev_list)) {
314 node = list_first_entry(&hub->udev_list, struct usbdev_node, list);
319 * which acquires hub->lock. We must release the lock first.
322 mutex_unlock(&hub->lock);
325 mutex_lock(&hub->lock);
328 mutex_unlock(&hub->lock);
330 onboard_hub_power_off(hub);
344 .name = "onboard-usb-hub",
368 struct onboard_hub *hub;
372 np = of_parse_phandle(dev->of_node, "peer-hub", 0);
374 dev_err(dev, "failed to find device node for peer hub\n");
385 hub = dev_get_drvdata(&pdev->dev);
389 * The presence of drvdata ('hub') indicates that the platform driver
395 if (!hub)
398 return hub;
404 struct onboard_hub *hub;
411 hub = _find_onboard_hub(dev);
412 if (IS_ERR(hub))
413 return PTR_ERR(hub);
415 dev_set_drvdata(dev, hub);
417 err = onboard_hub_add_usbdev(hub, udev);
426 struct onboard_hub *hub = dev_get_drvdata(&udev->dev);
428 onboard_hub_remove_usbdev(hub, udev);
455 .name = "onboard-usb-hub",