Lines Matching full:info
72 struct usb_conn_info *info;
76 info = container_of(to_delayed_work(work),
80 id = info->id_gpiod ?
81 gpiod_get_value_cansleep(info->id_gpiod) : 1;
82 vbus = info->vbus_gpiod ?
83 gpiod_get_value_cansleep(info->vbus_gpiod) : id;
92 dev_dbg(info->dev, "role %s -> %s, gpios: id %d, vbus %d\n",
93 usb_role_string(info->last_role), usb_role_string(role), id, vbus);
95 if (!info->initial_detection && info->last_role == role) {
96 dev_warn(info->dev, "repeated role: %s\n", usb_role_string(role));
100 info->initial_detection = false;
102 if (info->last_role == USB_ROLE_HOST && info->vbus)
103 regulator_disable(info->vbus);
105 ret = usb_role_switch_set_role(info->role_sw, role);
107 dev_err(info->dev, "failed to set role: %d\n", ret);
109 if (role == USB_ROLE_HOST && info->vbus) {
110 ret = regulator_enable(info->vbus);
112 dev_err(info->dev, "enable vbus regulator failed\n");
115 info->last_role = role;
117 if (info->vbus)
118 dev_dbg(info->dev, "vbus regulator is %s\n",
119 str_enabled_disabled(regulator_is_enabled(info->vbus)));
121 power_supply_changed(info->charger);
124 static void usb_conn_queue_dwork(struct usb_conn_info *info,
127 queue_delayed_work(system_power_efficient_wq, &info->dw_det, delay);
132 struct usb_conn_info *info = dev_id;
134 usb_conn_queue_dwork(info, info->debounce_jiffies);
147 struct usb_conn_info *info = power_supply_get_drvdata(psy);
151 val->intval = info->last_role == USB_ROLE_DEVICE;
160 static int usb_conn_psy_register(struct usb_conn_info *info)
162 struct device *dev = info->dev;
163 struct power_supply_desc *desc = &info->desc;
168 info->conn_id = ida_alloc(&usb_conn_ida, GFP_KERNEL);
169 if (info->conn_id < 0)
170 return info->conn_id;
173 info->conn_id);
175 ida_free(&usb_conn_ida, info->conn_id);
183 cfg.drv_data = info;
185 info->charger = devm_power_supply_register(dev, desc, &cfg);
186 if (IS_ERR(info->charger)) {
187 dev_err(dev, "Unable to register charger %d\n", info->conn_id);
188 ida_free(&usb_conn_ida, info->conn_id);
191 return PTR_ERR_OR_ZERO(info->charger);
197 struct usb_conn_info *info;
200 info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
201 if (!info)
204 info->dev = dev;
205 info->id_gpiod = devm_gpiod_get_optional(dev, "id", GPIOD_IN);
206 if (IS_ERR(info->id_gpiod))
207 return PTR_ERR(info->id_gpiod);
209 info->vbus_gpiod = devm_gpiod_get_optional(dev, "vbus", GPIOD_IN);
210 if (IS_ERR(info->vbus_gpiod))
211 return PTR_ERR(info->vbus_gpiod);
213 if (!info->id_gpiod && !info->vbus_gpiod) {
218 if (info->id_gpiod)
219 ret = gpiod_set_debounce(info->id_gpiod, USB_GPIO_DEB_US);
220 if (!ret && info->vbus_gpiod)
221 ret = gpiod_set_debounce(info->vbus_gpiod, USB_GPIO_DEB_US);
223 info->debounce_jiffies = msecs_to_jiffies(USB_GPIO_DEB_MS);
225 INIT_DELAYED_WORK(&info->dw_det, usb_conn_detect_cable);
227 info->vbus = devm_regulator_get_optional(dev, "vbus");
228 if (PTR_ERR(info->vbus) == -ENODEV)
229 info->vbus = NULL;
231 if (IS_ERR(info->vbus))
232 return dev_err_probe(dev, PTR_ERR(info->vbus), "failed to get vbus\n");
234 info->role_sw = usb_role_switch_get(dev);
235 if (IS_ERR(info->role_sw))
236 return dev_err_probe(dev, PTR_ERR(info->role_sw),
239 ret = usb_conn_psy_register(info);
243 if (info->id_gpiod) {
244 info->id_irq = gpiod_to_irq(info->id_gpiod);
245 if (info->id_irq < 0) {
247 ret = info->id_irq;
251 ret = devm_request_threaded_irq(dev, info->id_irq, NULL,
253 pdev->name, info);
260 if (info->vbus_gpiod) {
261 info->vbus_irq = gpiod_to_irq(info->vbus_gpiod);
262 if (info->vbus_irq < 0) {
264 ret = info->vbus_irq;
268 ret = devm_request_threaded_irq(dev, info->vbus_irq, NULL,
270 pdev->name, info);
277 platform_set_drvdata(pdev, info);
281 info->initial_detection = true;
282 usb_conn_queue_dwork(info, 0);
287 usb_role_switch_put(info->role_sw);
293 struct usb_conn_info *info = platform_get_drvdata(pdev);
295 cancel_delayed_work_sync(&info->dw_det);
297 if (info->charger)
298 ida_free(&usb_conn_ida, info->conn_id);
300 if (info->last_role == USB_ROLE_HOST && info->vbus)
301 regulator_disable(info->vbus);
303 usb_role_switch_put(info->role_sw);
308 struct usb_conn_info *info = dev_get_drvdata(dev);
311 if (info->id_gpiod)
312 enable_irq_wake(info->id_irq);
313 if (info->vbus_gpiod)
314 enable_irq_wake(info->vbus_irq);
318 if (info->id_gpiod)
319 disable_irq(info->id_irq);
320 if (info->vbus_gpiod)
321 disable_irq(info->vbus_irq);
330 struct usb_conn_info *info = dev_get_drvdata(dev);
333 if (info->id_gpiod)
334 disable_irq_wake(info->id_irq);
335 if (info->vbus_gpiod)
336 disable_irq_wake(info->vbus_irq);
342 if (info->id_gpiod)
343 enable_irq(info->id_irq);
344 if (info->vbus_gpiod)
345 enable_irq(info->vbus_irq);
347 usb_conn_queue_dwork(info, 0);