diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/usb/core/sysfs.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/usb/core/sysfs.c')
| -rw-r--r-- | drivers/usb/core/sysfs.c | 50 | 
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c index b63f78e48c74..323dc02becbe 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c @@ -1227,9 +1227,59 @@ static const struct attribute_group intf_assoc_attr_grp = {  	.is_visible =	intf_assoc_attrs_are_visible,  }; +static ssize_t wireless_status_show(struct device *dev, +				    struct device_attribute *attr, char *buf) +{ +	struct usb_interface *intf; + +	intf = to_usb_interface(dev); +	if (intf->wireless_status == USB_WIRELESS_STATUS_DISCONNECTED) +		return sysfs_emit(buf, "%s\n", "disconnected"); +	return sysfs_emit(buf, "%s\n", "connected"); +} +static DEVICE_ATTR_RO(wireless_status); + +static struct attribute *intf_wireless_status_attrs[] = { +	&dev_attr_wireless_status.attr, +	NULL +}; + +static umode_t intf_wireless_status_attr_is_visible(struct kobject *kobj, +		struct attribute *a, int n) +{ +	struct device *dev = kobj_to_dev(kobj); +	struct usb_interface *intf = to_usb_interface(dev); + +	if (a != &dev_attr_wireless_status.attr || +	    intf->wireless_status != USB_WIRELESS_STATUS_NA) +		return a->mode; +	return 0; +} + +static const struct attribute_group intf_wireless_status_attr_grp = { +	.attrs =	intf_wireless_status_attrs, +	.is_visible =	intf_wireless_status_attr_is_visible, +}; + +int usb_update_wireless_status_attr(struct usb_interface *intf) +{ +	struct device *dev = &intf->dev; +	int ret; + +	ret = sysfs_update_group(&dev->kobj, &intf_wireless_status_attr_grp); +	if (ret < 0) +		return ret; + +	sysfs_notify(&dev->kobj, NULL, "wireless_status"); +	kobject_uevent(&dev->kobj, KOBJ_CHANGE); + +	return 0; +} +  const struct attribute_group *usb_interface_groups[] = {  	&intf_attr_grp,  	&intf_assoc_attr_grp, +	&intf_wireless_status_attr_grp,  	NULL  };  |