static ssize_t show_##field (struct device *dev, char *buf) \
{ \
struct usb_device *udev; \
- struct usb_host_config *actconfig; \
\
udev = to_usb_device (dev); \
- actconfig = udev->actconfig; \
- if (actconfig) \
+ if (udev->actconfig) \
return sprintf (buf, format_string, \
- actconfig->desc.field * multiplier); \
+ udev->actconfig->desc.field * multiplier); \
else \
return 0; \
} \
usb_actconfig_attr (bmAttributes, 1, "%2x\n")
usb_actconfig_attr (bMaxPower, 2, "%3dmA\n")
-#define usb_actconfig_str(name, field) \
-static ssize_t show_##name(struct device *dev, char *buf) \
-{ \
- struct usb_device *udev; \
- struct usb_host_config *actconfig; \
- int len; \
- \
- udev = to_usb_device (dev); \
- actconfig = udev->actconfig; \
- if (!actconfig) \
- return 0; \
- len = usb_string(udev, actconfig->desc.field, buf, PAGE_SIZE); \
- if (len < 0) \
- return 0; \
- buf[len] = '\n'; \
- buf[len+1] = 0; \
- return len+1; \
-} \
-static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
-
-usb_actconfig_str (configuration, iConfiguration)
-
/* configuration value is always present, and r/w */
usb_actconfig_show(bConfigurationValue, 1, "%u\n");
if (sscanf (buf, "%u", &config) != 1 || config > 255)
return -EINVAL;
- usb_lock_device(udev);
+ down(&udev->serialize);
value = usb_set_configuration (udev, config);
- usb_unlock_device(udev);
+ up(&udev->serialize);
return (value < 0) ? value : count;
}
device_create_file (dev, &dev_attr_product);
if (udev->descriptor.iSerialNumber)
device_create_file (dev, &dev_attr_serial);
- device_create_file (dev, &dev_attr_configuration);
}
void usb_remove_sysfs_dev_files (struct usb_device *udev)
device_remove_file(dev, &dev_attr_product);
if (udev->descriptor.iSerialNumber)
device_remove_file(dev, &dev_attr_serial);
- device_remove_file (dev, &dev_attr_configuration);
}
/* Interface fields */
usb_intf_attr (bInterfaceClass, "%02x\n")
usb_intf_attr (bInterfaceSubClass, "%02x\n")
usb_intf_attr (bInterfaceProtocol, "%02x\n")
-
-#define usb_intf_str(name, field) \
-static ssize_t show_##name(struct device *dev, char *buf) \
-{ \
- struct usb_interface *intf; \
- struct usb_device *udev; \
- int len; \
- \
- intf = to_usb_interface (dev); \
- udev = interface_to_usbdev (intf); \
- len = usb_string(udev, intf->cur_altsetting->desc.field, buf, PAGE_SIZE);\
- if (len < 0) \
- return 0; \
- buf[len] = '\n'; \
- buf[len+1] = 0; \
- return len+1; \
-} \
-static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
-
-usb_intf_str (interface, iInterface);
+usb_intf_attr (iInterface, "%02x\n")
static struct attribute *intf_attrs[] = {
&dev_attr_bInterfaceNumber.attr,
&dev_attr_bInterfaceClass.attr,
&dev_attr_bInterfaceSubClass.attr,
&dev_attr_bInterfaceProtocol.attr,
+ &dev_attr_iInterface.attr,
NULL,
};
static struct attribute_group intf_attr_grp = {
void usb_create_sysfs_intf_files (struct usb_interface *intf)
{
sysfs_create_group(&intf->dev.kobj, &intf_attr_grp);
-
- if (intf->cur_altsetting->desc.iInterface)
- device_create_file(&intf->dev, &dev_attr_interface);
-
}
void usb_remove_sysfs_intf_files (struct usb_interface *intf)
{
sysfs_remove_group(&intf->dev.kobj, &intf_attr_grp);
-
- if (intf->cur_altsetting->desc.iInterface)
- device_remove_file(&intf->dev, &dev_attr_interface);
-
}