Lines Matching refs:gpio_vbus

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