diff options
Diffstat (limited to 'drivers/usb/gadget/udc-core.c')
-rw-r--r-- | drivers/usb/gadget/udc-core.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c index 6939e17f458..0b0d12ccc48 100644 --- a/drivers/usb/gadget/udc-core.c +++ b/drivers/usb/gadget/udc-core.c | |||
@@ -371,14 +371,28 @@ static ssize_t usb_udc_softconn_store(struct device *dev, | |||
371 | } | 371 | } |
372 | static DEVICE_ATTR(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store); | 372 | static DEVICE_ATTR(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store); |
373 | 373 | ||
374 | static ssize_t usb_udc_speed_show(struct device *dev, | 374 | #define USB_UDC_SPEED_ATTR(name, param) \ |
375 | ssize_t usb_udc_##param##_show(struct device *dev, \ | ||
376 | struct device_attribute *attr, char *buf) \ | ||
377 | { \ | ||
378 | struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \ | ||
379 | return snprintf(buf, PAGE_SIZE, "%s\n", \ | ||
380 | usb_speed_string(udc->gadget->param)); \ | ||
381 | } \ | ||
382 | static DEVICE_ATTR(name, S_IRUSR, usb_udc_##param##_show, NULL) | ||
383 | |||
384 | static USB_UDC_SPEED_ATTR(current_speed, speed); | ||
385 | static USB_UDC_SPEED_ATTR(maximum_speed, max_speed); | ||
386 | |||
387 | /* TODO: Scheduled for removal in 3.8. */ | ||
388 | static ssize_t usb_udc_is_dualspeed_show(struct device *dev, | ||
375 | struct device_attribute *attr, char *buf) | 389 | struct device_attribute *attr, char *buf) |
376 | { | 390 | { |
377 | struct usb_udc *udc = container_of(dev, struct usb_udc, dev); | 391 | struct usb_udc *udc = container_of(dev, struct usb_udc, dev); |
378 | return snprintf(buf, PAGE_SIZE, "%s\n", | 392 | return snprintf(buf, PAGE_SIZE, "%d\n", |
379 | usb_speed_string(udc->gadget->speed)); | 393 | gadget_is_dualspeed(udc->gadget)); |
380 | } | 394 | } |
381 | static DEVICE_ATTR(speed, S_IRUGO, usb_udc_speed_show, NULL); | 395 | static DEVICE_ATTR(is_dualspeed, S_IRUSR, usb_udc_is_dualspeed_show, NULL); |
382 | 396 | ||
383 | #define USB_UDC_ATTR(name) \ | 397 | #define USB_UDC_ATTR(name) \ |
384 | ssize_t usb_udc_##name##_show(struct device *dev, \ | 398 | ssize_t usb_udc_##name##_show(struct device *dev, \ |
@@ -391,7 +405,6 @@ ssize_t usb_udc_##name##_show(struct device *dev, \ | |||
391 | } \ | 405 | } \ |
392 | static DEVICE_ATTR(name, S_IRUGO, usb_udc_##name##_show, NULL) | 406 | static DEVICE_ATTR(name, S_IRUGO, usb_udc_##name##_show, NULL) |
393 | 407 | ||
394 | static USB_UDC_ATTR(is_dualspeed); | ||
395 | static USB_UDC_ATTR(is_otg); | 408 | static USB_UDC_ATTR(is_otg); |
396 | static USB_UDC_ATTR(is_a_peripheral); | 409 | static USB_UDC_ATTR(is_a_peripheral); |
397 | static USB_UDC_ATTR(b_hnp_enable); | 410 | static USB_UDC_ATTR(b_hnp_enable); |
@@ -401,7 +414,8 @@ static USB_UDC_ATTR(a_alt_hnp_support); | |||
401 | static struct attribute *usb_udc_attrs[] = { | 414 | static struct attribute *usb_udc_attrs[] = { |
402 | &dev_attr_srp.attr, | 415 | &dev_attr_srp.attr, |
403 | &dev_attr_soft_connect.attr, | 416 | &dev_attr_soft_connect.attr, |
404 | &dev_attr_speed.attr, | 417 | &dev_attr_current_speed.attr, |
418 | &dev_attr_maximum_speed.attr, | ||
405 | 419 | ||
406 | &dev_attr_is_dualspeed.attr, | 420 | &dev_attr_is_dualspeed.attr, |
407 | &dev_attr_is_otg.attr, | 421 | &dev_attr_is_otg.attr, |