Lines Matching +full:data +full:- +full:role

1 // SPDX-License-Identifier: GPL-2.0
3 * USB Role Switch Support
10 #include <linux/usb/role.h>
25 enum usb_role role; member
40 * usb_role_switch_set_role - Set USB role for a switch
41 * @sw: USB role switch
42 * @role: USB role to be switched to
44 * Set USB role @role for @sw.
46 int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role) in usb_role_switch_set_role() argument
53 if (!sw->registered) in usb_role_switch_set_role()
54 return -EOPNOTSUPP; in usb_role_switch_set_role()
56 mutex_lock(&sw->lock); in usb_role_switch_set_role()
58 ret = sw->set(sw, role); in usb_role_switch_set_role()
60 sw->role = role; in usb_role_switch_set_role()
61 kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE); in usb_role_switch_set_role()
64 mutex_unlock(&sw->lock); in usb_role_switch_set_role()
71 * usb_role_switch_get_role - Get the USB role for a switch
72 * @sw: USB role switch
74 * Depending on the role-switch-driver this function returns either a cached
75 * value of the last set role, or reads back the actual value from the hardware.
79 enum usb_role role; in usb_role_switch_get_role() local
81 if (IS_ERR_OR_NULL(sw) || !sw->registered) in usb_role_switch_get_role()
84 mutex_lock(&sw->lock); in usb_role_switch_get_role()
86 if (sw->get) in usb_role_switch_get_role()
87 role = sw->get(sw); in usb_role_switch_get_role()
89 role = sw->role; in usb_role_switch_get_role()
91 mutex_unlock(&sw->lock); in usb_role_switch_get_role()
93 return role; in usb_role_switch_get_role()
98 void *data) in usb_role_switch_match() argument
107 return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER); in usb_role_switch_match()
116 if (!fwnode_property_present(parent, "usb-role-switch")) { in usb_role_switch_is_parent()
123 return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER); in usb_role_switch_is_parent()
127 * usb_role_switch_get - Find USB role switch linked with the caller
130 * Finds and returns role switch linked with @dev. The reference count for the
139 sw = device_connection_find_match(dev, "usb-role-switch", NULL, in usb_role_switch_get()
143 WARN_ON(!try_module_get(sw->module)); in usb_role_switch_get()
150 * fwnode_usb_role_switch_get - Find USB role switch linked with the caller
162 sw = fwnode_connection_find_match(fwnode, "usb-role-switch", in fwnode_usb_role_switch_get()
165 WARN_ON(!try_module_get(sw->module)); in fwnode_usb_role_switch_get()
172 * usb_role_switch_put - Release handle to a switch
173 * @sw: USB Role Switch
180 module_put(sw->module); in usb_role_switch_put()
181 put_device(&sw->dev); in usb_role_switch_put()
187 * usb_role_switch_find_by_fwnode - Find USB role switch with its fwnode
188 * @fwnode: fwnode of the USB Role Switch
190 * Finds and returns role switch with @fwnode. The reference count for the
205 WARN_ON(!try_module_get(sw->module)); in usb_role_switch_find_by_fwnode()
218 if (sw->allow_userspace_control) in usb_role_switch_is_visible()
219 return attr->mode; in usb_role_switch_is_visible()
230 const char *usb_role_string(enum usb_role role) in usb_role_string() argument
232 if (role < 0 || role >= ARRAY_SIZE(usb_roles)) in usb_role_string()
235 return usb_roles[role]; in usb_role_string()
243 enum usb_role role = usb_role_switch_get_role(sw); in role_show() local
245 return sprintf(buf, "%s\n", usb_roles[role]); in role_show()
261 return -EINVAL; in role_store()
270 static DEVICE_ATTR_RW(role);
313 * usb_role_switch_register - Register USB Role Switch
317 * USB Role Switch is a device capable or choosing the role for USB connector.
318 * On platforms where the USB controller is dual-role capable, the controller
323 * Returns handle to a new role switch or ERR_PTR. The content of @desc is
333 if (!desc || !desc->set) in usb_role_switch_register()
334 return ERR_PTR(-EINVAL); in usb_role_switch_register()
338 return ERR_PTR(-ENOMEM); in usb_role_switch_register()
340 mutex_init(&sw->lock); in usb_role_switch_register()
342 sw->allow_userspace_control = desc->allow_userspace_control; in usb_role_switch_register()
343 sw->usb2_port = desc->usb2_port; in usb_role_switch_register()
344 sw->usb3_port = desc->usb3_port; in usb_role_switch_register()
345 sw->udc = desc->udc; in usb_role_switch_register()
346 sw->set = desc->set; in usb_role_switch_register()
347 sw->get = desc->get; in usb_role_switch_register()
349 sw->module = parent->driver->owner; in usb_role_switch_register()
350 sw->dev.parent = parent; in usb_role_switch_register()
351 sw->dev.fwnode = desc->fwnode; in usb_role_switch_register()
352 sw->dev.class = &role_class; in usb_role_switch_register()
353 sw->dev.type = &usb_role_dev_type; in usb_role_switch_register()
354 dev_set_drvdata(&sw->dev, desc->driver_data); in usb_role_switch_register()
355 dev_set_name(&sw->dev, "%s-role-switch", in usb_role_switch_register()
356 desc->name ? desc->name : dev_name(parent)); in usb_role_switch_register()
358 ret = device_register(&sw->dev); in usb_role_switch_register()
360 put_device(&sw->dev); in usb_role_switch_register()
364 sw->registered = true; in usb_role_switch_register()
373 * usb_role_switch_unregister - Unregsiter USB Role Switch
374 * @sw: USB Role Switch
381 sw->registered = false; in usb_role_switch_unregister()
382 device_unregister(&sw->dev); in usb_role_switch_unregister()
388 * usb_role_switch_set_drvdata - Assign private data pointer to a switch
389 * @sw: USB Role Switch
390 * @data: Private data pointer
392 void usb_role_switch_set_drvdata(struct usb_role_switch *sw, void *data) in usb_role_switch_set_drvdata() argument
394 dev_set_drvdata(&sw->dev, data); in usb_role_switch_set_drvdata()
399 * usb_role_switch_get_drvdata - Get the private data pointer of a switch
400 * @sw: USB Role Switch
404 return dev_get_drvdata(&sw->dev); in usb_role_switch_get_drvdata()
423 MODULE_DESCRIPTION("USB Role Class");