Lines Matching refs:gpio_vbus
58 static void set_vbus_draw(struct gpio_vbus_data *gpio_vbus, unsigned mA)
60 struct regulator *vbus_draw = gpio_vbus->vbus_draw;
67 enabled = gpio_vbus->vbus_draw_enabled;
74 gpio_vbus->vbus_draw_enabled = 1;
81 gpio_vbus->vbus_draw_enabled = 0;
84 gpio_vbus->mA = mA;
87 static int is_vbus_powered(struct gpio_vbus_data *gpio_vbus)
89 return gpiod_get_value(gpio_vbus->vbus_gpiod);
94 struct gpio_vbus_data *gpio_vbus =
98 if (!gpio_vbus->phy.otg->gadget)
101 vbus = is_vbus_powered(gpio_vbus);
102 if ((vbus ^ gpio_vbus->vbus) == 0)
104 gpio_vbus->vbus = vbus;
114 gpio_vbus->phy.otg->state = OTG_STATE_B_PERIPHERAL;
115 gpio_vbus->phy.last_event = status;
116 usb_gadget_vbus_connect(gpio_vbus->phy.otg->gadget);
119 set_vbus_draw(gpio_vbus, 100);
122 if (gpio_vbus->pullup_gpiod)
123 gpiod_set_value(gpio_vbus->pullup_gpiod, 1);
125 atomic_notifier_call_chain(&gpio_vbus->phy.notifier,
126 status, gpio_vbus->phy.otg->gadget);
127 usb_phy_set_event(&gpio_vbus->phy, USB_EVENT_ENUMERATED);
130 if (gpio_vbus->pullup_gpiod)
131 gpiod_set_value(gpio_vbus->pullup_gpiod, 0);
133 set_vbus_draw(gpio_vbus, 0);
135 usb_gadget_vbus_disconnect(gpio_vbus->phy.otg->gadget);
137 gpio_vbus->phy.otg->state = OTG_STATE_B_IDLE;
138 gpio_vbus->phy.last_event = status;
140 atomic_notifier_call_chain(&gpio_vbus->phy.notifier,
141 status, gpio_vbus->phy.otg->gadget);
142 usb_phy_set_event(&gpio_vbus->phy, USB_EVENT_NONE);
150 struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev);
151 struct usb_otg *otg = gpio_vbus->phy.otg;
154 is_vbus_powered(gpio_vbus) ? "supplied" : "inactive",
158 schedule_delayed_work(&gpio_vbus->work, msecs_to_jiffies(100));
169 struct gpio_vbus_data *gpio_vbus;
172 gpio_vbus = container_of(otg->usb_phy, struct gpio_vbus_data, phy);
173 pdev = to_platform_device(gpio_vbus->dev);
180 if (gpio_vbus->pullup_gpiod)
181 gpiod_set_value(gpio_vbus->pullup_gpiod, 0);
183 set_vbus_draw(gpio_vbus, 0);
196 gpio_vbus->vbus = 0; /* start with disconnected */
197 gpio_vbus_irq(gpio_vbus->irq, pdev);
204 struct gpio_vbus_data *gpio_vbus;
206 gpio_vbus = container_of(phy, struct gpio_vbus_data, phy);
209 set_vbus_draw(gpio_vbus, mA);
216 struct gpio_vbus_data *gpio_vbus;
218 gpio_vbus = container_of(phy, struct gpio_vbus_data, phy);
226 return gpio_vbus_set_power(phy, suspend ? 0 : gpio_vbus->mA);
233 struct gpio_vbus_data *gpio_vbus;
239 gpio_vbus = devm_kzalloc(&pdev->dev, sizeof(struct gpio_vbus_data),
241 if (!gpio_vbus)
244 gpio_vbus->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg),
246 if (!gpio_vbus->phy.otg)
249 platform_set_drvdata(pdev, gpio_vbus);
250 gpio_vbus->dev = &pdev->dev;
251 gpio_vbus->phy.label = "gpio-vbus";
252 gpio_vbus->phy.dev = gpio_vbus->dev;
253 gpio_vbus->phy.set_power = gpio_vbus_set_power;
254 gpio_vbus->phy.set_suspend = gpio_vbus_set_suspend;
256 gpio_vbus->phy.otg->state = OTG_STATE_UNDEFINED;
257 gpio_vbus->phy.otg->usb_phy = &gpio_vbus->phy;
258 gpio_vbus->phy.otg->set_peripheral = gpio_vbus_set_peripheral;
261 gpio_vbus->vbus_gpiod = devm_gpiod_get(dev, "vbus", GPIOD_IN);
262 if (IS_ERR(gpio_vbus->vbus_gpiod)) {
263 err = PTR_ERR(gpio_vbus->vbus_gpiod);
267 gpiod_set_consumer_name(gpio_vbus->vbus_gpiod, "vbus_detect");
274 irq = gpiod_to_irq(gpio_vbus->vbus_gpiod);
278 gpio_vbus->irq = irq;
287 gpio_vbus->pullup_gpiod = devm_gpiod_get_optional(dev, "pullup",
289 if (IS_ERR(gpio_vbus->pullup_gpiod)) {
290 err = PTR_ERR(gpio_vbus->pullup_gpiod);
295 if (gpio_vbus->pullup_gpiod)
296 gpiod_set_consumer_name(gpio_vbus->pullup_gpiod, "udc_pullup");
306 INIT_DELAYED_WORK(&gpio_vbus->work, gpio_vbus_work);
308 gpio_vbus->vbus_draw = devm_regulator_get(&pdev->dev, "vbus_draw");
309 if (IS_ERR(gpio_vbus->vbus_draw)) {
311 PTR_ERR(gpio_vbus->vbus_draw));
312 gpio_vbus->vbus_draw = NULL;
316 err = usb_add_phy(&gpio_vbus->phy, USB_PHY_TYPE_USB2);
330 struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev);
333 cancel_delayed_work_sync(&gpio_vbus->work);
335 usb_remove_phy(&gpio_vbus->phy);
341 struct gpio_vbus_data *gpio_vbus = dev_get_drvdata(dev);
344 enable_irq_wake(gpio_vbus->irq);
351 struct gpio_vbus_data *gpio_vbus = dev_get_drvdata(dev);
354 disable_irq_wake(gpio_vbus->irq);