• Home
  • Raw
  • Download

Lines Matching +full:sw +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0
36 * usb_role_switch_set_role - Set USB role for a switch
37 * @sw: USB role switch
40 * Set USB role @role for @sw.
42 int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role) in usb_role_switch_set_role() argument
46 if (IS_ERR_OR_NULL(sw)) in usb_role_switch_set_role()
49 mutex_lock(&sw->lock); in usb_role_switch_set_role()
51 ret = sw->set(sw, role); in usb_role_switch_set_role()
53 sw->role = role; in usb_role_switch_set_role()
54 kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE); in usb_role_switch_set_role()
57 mutex_unlock(&sw->lock); in usb_role_switch_set_role()
64 * usb_role_switch_get_role - Get the USB role for a switch
65 * @sw: USB role switch
67 * Depending on the role-switch-driver this function returns either a cached
70 enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw) in usb_role_switch_get_role() argument
74 if (IS_ERR_OR_NULL(sw)) in usb_role_switch_get_role()
77 mutex_lock(&sw->lock); in usb_role_switch_get_role()
79 if (sw->get) in usb_role_switch_get_role()
80 role = sw->get(sw); in usb_role_switch_get_role()
82 role = sw->role; in usb_role_switch_get_role()
84 mutex_unlock(&sw->lock); in usb_role_switch_get_role()
100 return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER); in usb_role_switch_match()
109 if (!parent || !fwnode_property_present(parent, "usb-role-switch")) in usb_role_switch_is_parent()
113 return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER); in usb_role_switch_is_parent()
117 * usb_role_switch_get - Find USB role switch linked with the caller
125 struct usb_role_switch *sw; in usb_role_switch_get() local
127 sw = usb_role_switch_is_parent(dev_fwnode(dev)); in usb_role_switch_get()
128 if (!sw) in usb_role_switch_get()
129 sw = device_connection_find_match(dev, "usb-role-switch", NULL, in usb_role_switch_get()
132 if (!IS_ERR_OR_NULL(sw)) in usb_role_switch_get()
133 WARN_ON(!try_module_get(sw->dev.parent->driver->owner)); in usb_role_switch_get()
135 return sw; in usb_role_switch_get()
140 * fwnode_usb_role_switch_get - Find USB role switch linked with the caller
148 struct usb_role_switch *sw; in fwnode_usb_role_switch_get() local
150 sw = usb_role_switch_is_parent(fwnode); in fwnode_usb_role_switch_get()
151 if (!sw) in fwnode_usb_role_switch_get()
152 sw = fwnode_connection_find_match(fwnode, "usb-role-switch", in fwnode_usb_role_switch_get()
154 if (!IS_ERR_OR_NULL(sw)) in fwnode_usb_role_switch_get()
155 WARN_ON(!try_module_get(sw->dev.parent->driver->owner)); in fwnode_usb_role_switch_get()
157 return sw; in fwnode_usb_role_switch_get()
162 * usb_role_switch_put - Release handle to a switch
163 * @sw: USB Role Switch
165 * Decrement reference count for @sw.
167 void usb_role_switch_put(struct usb_role_switch *sw) in usb_role_switch_put() argument
169 if (!IS_ERR_OR_NULL(sw)) { in usb_role_switch_put()
170 module_put(sw->dev.parent->driver->owner); in usb_role_switch_put()
171 put_device(&sw->dev); in usb_role_switch_put()
177 * usb_role_switch_find_by_fwnode - Find USB role switch with its fwnode
193 WARN_ON(!try_module_get(dev->parent->driver->owner)); in usb_role_switch_find_by_fwnode()
203 struct usb_role_switch *sw = to_role_switch(dev); in usb_role_switch_is_visible() local
205 if (sw->allow_userspace_control) in usb_role_switch_is_visible()
206 return attr->mode; in usb_role_switch_is_visible()
220 struct usb_role_switch *sw = to_role_switch(dev); in role_show() local
221 enum usb_role role = usb_role_switch_get_role(sw); in role_show()
229 struct usb_role_switch *sw = to_role_switch(dev); in role_store() local
239 return -EINVAL; in role_store()
242 ret = usb_role_switch_set_role(sw, ret); in role_store()
279 struct usb_role_switch *sw = to_role_switch(dev); in usb_role_switch_release() local
281 kfree(sw); in usb_role_switch_release()
292 * usb_role_switch_register - Register USB Role Switch
297 * On platforms where the USB controller is dual-role capable, the controller
309 struct usb_role_switch *sw; in usb_role_switch_register() local
312 if (!desc || !desc->set) in usb_role_switch_register()
313 return ERR_PTR(-EINVAL); in usb_role_switch_register()
315 sw = kzalloc(sizeof(*sw), GFP_KERNEL); in usb_role_switch_register()
316 if (!sw) in usb_role_switch_register()
317 return ERR_PTR(-ENOMEM); in usb_role_switch_register()
319 mutex_init(&sw->lock); in usb_role_switch_register()
321 sw->allow_userspace_control = desc->allow_userspace_control; in usb_role_switch_register()
322 sw->usb2_port = desc->usb2_port; in usb_role_switch_register()
323 sw->usb3_port = desc->usb3_port; in usb_role_switch_register()
324 sw->udc = desc->udc; in usb_role_switch_register()
325 sw->set = desc->set; in usb_role_switch_register()
326 sw->get = desc->get; in usb_role_switch_register()
328 sw->dev.parent = parent; in usb_role_switch_register()
329 sw->dev.fwnode = desc->fwnode; in usb_role_switch_register()
330 sw->dev.class = role_class; in usb_role_switch_register()
331 sw->dev.type = &usb_role_dev_type; in usb_role_switch_register()
332 dev_set_drvdata(&sw->dev, desc->driver_data); in usb_role_switch_register()
333 dev_set_name(&sw->dev, "%s-role-switch", in usb_role_switch_register()
334 desc->name ? desc->name : dev_name(parent)); in usb_role_switch_register()
336 ret = device_register(&sw->dev); in usb_role_switch_register()
338 put_device(&sw->dev); in usb_role_switch_register()
344 return sw; in usb_role_switch_register()
349 * usb_role_switch_unregister - Unregsiter USB Role Switch
350 * @sw: USB Role Switch
354 void usb_role_switch_unregister(struct usb_role_switch *sw) in usb_role_switch_unregister() argument
356 if (!IS_ERR_OR_NULL(sw)) in usb_role_switch_unregister()
357 device_unregister(&sw->dev); in usb_role_switch_unregister()
362 * usb_role_switch_set_drvdata - Assign private data pointer to a switch
363 * @sw: USB Role Switch
366 void usb_role_switch_set_drvdata(struct usb_role_switch *sw, void *data) in usb_role_switch_set_drvdata() argument
368 dev_set_drvdata(&sw->dev, data); in usb_role_switch_set_drvdata()
373 * usb_role_switch_get_drvdata - Get the private data pointer of a switch
374 * @sw: USB Role Switch
376 void *usb_role_switch_get_drvdata(struct usb_role_switch *sw) in usb_role_switch_get_drvdata() argument
378 return dev_get_drvdata(&sw->dev); in usb_role_switch_get_drvdata()