usb: gadget: replace usb_gadget::is_dualspeed with max_speed
This commit replaces usb_gadget's is_dualspeed field with a max_speed field. [ balbi@ti.com : Fixed DWC3 driver ] Signed-off-by: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
7aac8d1537
commit
d327ab5b6d
25 changed files with 68 additions and 35 deletions
|
@ -535,6 +535,20 @@ Why: In 3.0, we can now autodetect internal 3G device and already have
|
||||||
information log when acer-wmi initial.
|
information log when acer-wmi initial.
|
||||||
Who: Lee, Chun-Yi <jlee@novell.com>
|
Who: Lee, Chun-Yi <jlee@novell.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
What: /sys/devices/platform/_UDC_/udc/_UDC_/is_dualspeed file and
|
||||||
|
is_dualspeed line in /sys/devices/platform/ci13xxx_*/udc/device file.
|
||||||
|
When: 3.8
|
||||||
|
Why: The is_dualspeed file is superseded by maximum_speed in the same
|
||||||
|
directory and is_dualspeed line in device file is superseded by
|
||||||
|
max_speed line in the same file.
|
||||||
|
|
||||||
|
The maximum_speed/max_speed specifies maximum speed supported by UDC.
|
||||||
|
To check if dualspeeed is supported, check if the value is >= 3.
|
||||||
|
Various possible speeds are defined in <linux/usb/ch9.h>.
|
||||||
|
Who: Michal Nazarewicz <mina86@mina86.com>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
What: The XFS nodelaylog mount option
|
What: The XFS nodelaylog mount option
|
||||||
|
|
|
@ -1986,7 +1986,7 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc)
|
||||||
dev_set_name(&dwc->gadget.dev, "gadget");
|
dev_set_name(&dwc->gadget.dev, "gadget");
|
||||||
|
|
||||||
dwc->gadget.ops = &dwc3_gadget_ops;
|
dwc->gadget.ops = &dwc3_gadget_ops;
|
||||||
dwc->gadget.is_dualspeed = true;
|
dwc->gadget.max_speed = USB_SPEED_SUPER;
|
||||||
dwc->gadget.speed = USB_SPEED_UNKNOWN;
|
dwc->gadget.speed = USB_SPEED_UNKNOWN;
|
||||||
dwc->gadget.dev.parent = dwc->dev;
|
dwc->gadget.dev.parent = dwc->dev;
|
||||||
|
|
||||||
|
|
|
@ -3349,7 +3349,7 @@ static int udc_probe(struct udc *dev)
|
||||||
dev_set_name(&dev->gadget.dev, "gadget");
|
dev_set_name(&dev->gadget.dev, "gadget");
|
||||||
dev->gadget.dev.release = gadget_release;
|
dev->gadget.dev.release = gadget_release;
|
||||||
dev->gadget.name = name;
|
dev->gadget.name = name;
|
||||||
dev->gadget.is_dualspeed = 1;
|
dev->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
|
|
||||||
/* init registers, interrupts, ... */
|
/* init registers, interrupts, ... */
|
||||||
startup_registers(dev);
|
startup_registers(dev);
|
||||||
|
|
|
@ -1038,7 +1038,7 @@ static struct usba_udc the_udc = {
|
||||||
.gadget = {
|
.gadget = {
|
||||||
.ops = &usba_udc_ops,
|
.ops = &usba_udc_ops,
|
||||||
.ep_list = LIST_HEAD_INIT(the_udc.gadget.ep_list),
|
.ep_list = LIST_HEAD_INIT(the_udc.gadget.ep_list),
|
||||||
.is_dualspeed = 1,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.name = "atmel_usba_udc",
|
.name = "atmel_usba_udc",
|
||||||
.dev = {
|
.dev = {
|
||||||
.init_name = "gadget",
|
.init_name = "gadget",
|
||||||
|
|
|
@ -766,8 +766,11 @@ static ssize_t show_device(struct device *dev, struct device_attribute *attr,
|
||||||
|
|
||||||
n += scnprintf(buf + n, PAGE_SIZE - n, "speed = %d\n",
|
n += scnprintf(buf + n, PAGE_SIZE - n, "speed = %d\n",
|
||||||
gadget->speed);
|
gadget->speed);
|
||||||
|
n += scnprintf(buf + n, PAGE_SIZE - n, "max_speed = %d\n",
|
||||||
|
gadget->max_speed);
|
||||||
|
/* TODO: Scheduled for removal in 3.8. */
|
||||||
n += scnprintf(buf + n, PAGE_SIZE - n, "is_dualspeed = %d\n",
|
n += scnprintf(buf + n, PAGE_SIZE - n, "is_dualspeed = %d\n",
|
||||||
gadget->is_dualspeed);
|
gadget_is_dualspeed(gadget));
|
||||||
n += scnprintf(buf + n, PAGE_SIZE - n, "is_otg = %d\n",
|
n += scnprintf(buf + n, PAGE_SIZE - n, "is_otg = %d\n",
|
||||||
gadget->is_otg);
|
gadget->is_otg);
|
||||||
n += scnprintf(buf + n, PAGE_SIZE - n, "is_a_peripheral = %d\n",
|
n += scnprintf(buf + n, PAGE_SIZE - n, "is_a_peripheral = %d\n",
|
||||||
|
@ -2880,7 +2883,7 @@ static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev,
|
||||||
|
|
||||||
udc->gadget.ops = &usb_gadget_ops;
|
udc->gadget.ops = &usb_gadget_ops;
|
||||||
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
||||||
udc->gadget.is_dualspeed = 1;
|
udc->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
udc->gadget.is_otg = 0;
|
udc->gadget.is_otg = 0;
|
||||||
udc->gadget.name = driver->name;
|
udc->gadget.name = driver->name;
|
||||||
|
|
||||||
|
|
|
@ -977,7 +977,7 @@ static int dummy_udc_probe (struct platform_device *pdev)
|
||||||
|
|
||||||
dum->gadget.name = gadget_name;
|
dum->gadget.name = gadget_name;
|
||||||
dum->gadget.ops = &dummy_ops;
|
dum->gadget.ops = &dummy_ops;
|
||||||
dum->gadget.is_dualspeed = 1;
|
dum->gadget.max_speed = USB_SPEED_SUPER;
|
||||||
|
|
||||||
dev_set_name(&dum->gadget.dev, "gadget");
|
dev_set_name(&dum->gadget.dev, "gadget");
|
||||||
dum->gadget.dev.parent = &pdev->dev;
|
dum->gadget.dev.parent = &pdev->dev;
|
||||||
|
|
|
@ -152,7 +152,7 @@ ep_matches (
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case USB_ENDPOINT_XFER_INT:
|
case USB_ENDPOINT_XFER_INT:
|
||||||
/* INT: limit 64 bytes full speed, 1024 high/super speed */
|
/* INT: limit 64 bytes full speed, 1024 high/super speed */
|
||||||
if (!gadget->is_dualspeed && max > 64)
|
if (!gadget_is_dualspeed(gadget) && max > 64)
|
||||||
return 0;
|
return 0;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
@ -160,12 +160,12 @@ ep_matches (
|
||||||
/* ISO: limit 1023 bytes full speed, 1024 high/super speed */
|
/* ISO: limit 1023 bytes full speed, 1024 high/super speed */
|
||||||
if (ep->maxpacket < max)
|
if (ep->maxpacket < max)
|
||||||
return 0;
|
return 0;
|
||||||
if (!gadget->is_dualspeed && max > 1023)
|
if (!gadget_is_dualspeed(gadget) && max > 1023)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* BOTH: "high bandwidth" works only at high speed */
|
/* BOTH: "high bandwidth" works only at high speed */
|
||||||
if ((desc->wMaxPacketSize & cpu_to_le16(3<<11))) {
|
if ((desc->wMaxPacketSize & cpu_to_le16(3<<11))) {
|
||||||
if (!gadget->is_dualspeed)
|
if (!gadget_is_dualspeed(gadget))
|
||||||
return 0;
|
return 0;
|
||||||
/* configure your hardware with enough buffering!! */
|
/* configure your hardware with enough buffering!! */
|
||||||
}
|
}
|
||||||
|
|
|
@ -2525,7 +2525,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
/* Setup gadget structure */
|
/* Setup gadget structure */
|
||||||
udc_controller->gadget.ops = &fsl_gadget_ops;
|
udc_controller->gadget.ops = &fsl_gadget_ops;
|
||||||
udc_controller->gadget.is_dualspeed = 1;
|
udc_controller->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
udc_controller->gadget.ep0 = &udc_controller->eps[0].ep;
|
udc_controller->gadget.ep0 = &udc_controller->eps[0].ep;
|
||||||
INIT_LIST_HEAD(&udc_controller->gadget.ep_list);
|
INIT_LIST_HEAD(&udc_controller->gadget.ep_list);
|
||||||
udc_controller->gadget.speed = USB_SPEED_UNKNOWN;
|
udc_controller->gadget.speed = USB_SPEED_UNKNOWN;
|
||||||
|
|
|
@ -1463,7 +1463,7 @@ static int __init fusb300_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
dev_set_name(&fusb300->gadget.dev, "gadget");
|
dev_set_name(&fusb300->gadget.dev, "gadget");
|
||||||
|
|
||||||
fusb300->gadget.is_dualspeed = 1;
|
fusb300->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
fusb300->gadget.dev.parent = &pdev->dev;
|
fusb300->gadget.dev.parent = &pdev->dev;
|
||||||
fusb300->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
fusb300->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
||||||
fusb300->gadget.dev.release = pdev->dev.release;
|
fusb300->gadget.dev.release = pdev->dev.release;
|
||||||
|
|
|
@ -1796,6 +1796,7 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
spin_lock_init(&dev->lock);
|
spin_lock_init(&dev->lock);
|
||||||
dev->pdev = pdev;
|
dev->pdev = pdev;
|
||||||
dev->gadget.ops = &goku_ops;
|
dev->gadget.ops = &goku_ops;
|
||||||
|
dev->gadget.max_speed = USB_SPEED_FULL;
|
||||||
|
|
||||||
/* the "gadget" abstracts/virtualizes the controller */
|
/* the "gadget" abstracts/virtualizes the controller */
|
||||||
dev_set_name(&dev->gadget.dev, "gadget");
|
dev_set_name(&dev->gadget.dev, "gadget");
|
||||||
|
|
|
@ -3267,7 +3267,7 @@ static int langwell_udc_probe(struct pci_dev *pdev,
|
||||||
dev->gadget.ep0 = &dev->ep[0].ep; /* gadget ep0 */
|
dev->gadget.ep0 = &dev->ep[0].ep; /* gadget ep0 */
|
||||||
INIT_LIST_HEAD(&dev->gadget.ep_list); /* ep_list */
|
INIT_LIST_HEAD(&dev->gadget.ep_list); /* ep_list */
|
||||||
dev->gadget.speed = USB_SPEED_UNKNOWN; /* speed */
|
dev->gadget.speed = USB_SPEED_UNKNOWN; /* speed */
|
||||||
dev->gadget.is_dualspeed = 1; /* support dual speed */
|
dev->gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
|
||||||
#ifdef OTG_TRANSCEIVER
|
#ifdef OTG_TRANSCEIVER
|
||||||
dev->gadget.is_otg = 1; /* support otg mode */
|
dev->gadget.is_otg = 1; /* support otg mode */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1653,7 +1653,7 @@ static int __init m66592_probe(struct platform_device *pdev)
|
||||||
m66592->gadget.ops = &m66592_gadget_ops;
|
m66592->gadget.ops = &m66592_gadget_ops;
|
||||||
device_initialize(&m66592->gadget.dev);
|
device_initialize(&m66592->gadget.dev);
|
||||||
dev_set_name(&m66592->gadget.dev, "gadget");
|
dev_set_name(&m66592->gadget.dev, "gadget");
|
||||||
m66592->gadget.is_dualspeed = 1;
|
m66592->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
m66592->gadget.dev.parent = &pdev->dev;
|
m66592->gadget.dev.parent = &pdev->dev;
|
||||||
m66592->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
m66592->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
||||||
m66592->gadget.dev.release = pdev->dev.release;
|
m66592->gadget.dev.release = pdev->dev.release;
|
||||||
|
|
|
@ -2312,7 +2312,7 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
|
||||||
udc->gadget.ep0 = &udc->eps[0].ep; /* gadget ep0 */
|
udc->gadget.ep0 = &udc->eps[0].ep; /* gadget ep0 */
|
||||||
INIT_LIST_HEAD(&udc->gadget.ep_list); /* ep_list */
|
INIT_LIST_HEAD(&udc->gadget.ep_list); /* ep_list */
|
||||||
udc->gadget.speed = USB_SPEED_UNKNOWN; /* speed */
|
udc->gadget.speed = USB_SPEED_UNKNOWN; /* speed */
|
||||||
udc->gadget.is_dualspeed = 1; /* support dual speed */
|
udc->gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
|
||||||
|
|
||||||
/* the "gadget" abstracts/virtualizes the controller */
|
/* the "gadget" abstracts/virtualizes the controller */
|
||||||
dev_set_name(&udc->gadget.dev, "gadget");
|
dev_set_name(&udc->gadget.dev, "gadget");
|
||||||
|
|
|
@ -2235,7 +2235,7 @@ net2272_probe_init(struct device *dev, unsigned int irq)
|
||||||
ret->irq = irq;
|
ret->irq = irq;
|
||||||
ret->dev = dev;
|
ret->dev = dev;
|
||||||
ret->gadget.ops = &net2272_ops;
|
ret->gadget.ops = &net2272_ops;
|
||||||
ret->gadget.is_dualspeed = 1;
|
ret->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
|
|
||||||
/* the "gadget" abstracts/virtualizes the controller */
|
/* the "gadget" abstracts/virtualizes the controller */
|
||||||
dev_set_name(&ret->gadget.dev, "gadget");
|
dev_set_name(&ret->gadget.dev, "gadget");
|
||||||
|
|
|
@ -2698,7 +2698,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
spin_lock_init (&dev->lock);
|
spin_lock_init (&dev->lock);
|
||||||
dev->pdev = pdev;
|
dev->pdev = pdev;
|
||||||
dev->gadget.ops = &net2280_ops;
|
dev->gadget.ops = &net2280_ops;
|
||||||
dev->gadget.is_dualspeed = 1;
|
dev->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
|
|
||||||
/* the "gadget" abstracts/virtualizes the controller */
|
/* the "gadget" abstracts/virtualizes the controller */
|
||||||
dev_set_name(&dev->gadget.dev, "gadget");
|
dev_set_name(&dev->gadget.dev, "gadget");
|
||||||
|
|
|
@ -2676,6 +2676,7 @@ omap_udc_setup(struct platform_device *odev, struct otg_transceiver *xceiv)
|
||||||
INIT_LIST_HEAD(&udc->gadget.ep_list);
|
INIT_LIST_HEAD(&udc->gadget.ep_list);
|
||||||
INIT_LIST_HEAD(&udc->iso);
|
INIT_LIST_HEAD(&udc->iso);
|
||||||
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
||||||
|
udc->gadget.max_speed = USB_SPEED_FULL;
|
||||||
udc->gadget.name = driver_name;
|
udc->gadget.name = driver_name;
|
||||||
|
|
||||||
device_initialize(&udc->gadget.dev);
|
device_initialize(&udc->gadget.dev);
|
||||||
|
|
|
@ -2941,7 +2941,7 @@ static int pch_udc_probe(struct pci_dev *pdev,
|
||||||
dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
||||||
dev->gadget.dev.release = gadget_release;
|
dev->gadget.dev.release = gadget_release;
|
||||||
dev->gadget.name = KBUILD_MODNAME;
|
dev->gadget.name = KBUILD_MODNAME;
|
||||||
dev->gadget.is_dualspeed = 1;
|
dev->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
|
|
||||||
retval = device_register(&dev->gadget.dev);
|
retval = device_register(&dev->gadget.dev);
|
||||||
if (retval)
|
if (retval)
|
||||||
|
|
|
@ -1141,7 +1141,7 @@ printer_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_USB_GADGET_DUALSPEED
|
#ifdef CONFIG_USB_GADGET_DUALSPEED
|
||||||
case USB_DT_DEVICE_QUALIFIER:
|
case USB_DT_DEVICE_QUALIFIER:
|
||||||
if (!gadget->is_dualspeed)
|
if (!gadget_is_dualspeed(gadget))
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* assumes ep0 uses the same value for both
|
* assumes ep0 uses the same value for both
|
||||||
|
@ -1155,7 +1155,7 @@ printer_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case USB_DT_OTHER_SPEED_CONFIG:
|
case USB_DT_OTHER_SPEED_CONFIG:
|
||||||
if (!gadget->is_dualspeed)
|
if (!gadget_is_dualspeed(gadget))
|
||||||
break;
|
break;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
#endif /* CONFIG_USB_GADGET_DUALSPEED */
|
#endif /* CONFIG_USB_GADGET_DUALSPEED */
|
||||||
|
|
|
@ -1911,7 +1911,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
r8a66597->gadget.ops = &r8a66597_gadget_ops;
|
r8a66597->gadget.ops = &r8a66597_gadget_ops;
|
||||||
dev_set_name(&r8a66597->gadget.dev, "gadget");
|
dev_set_name(&r8a66597->gadget.dev, "gadget");
|
||||||
r8a66597->gadget.is_dualspeed = 1;
|
r8a66597->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
r8a66597->gadget.dev.parent = &pdev->dev;
|
r8a66597->gadget.dev.parent = &pdev->dev;
|
||||||
r8a66597->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
r8a66597->gadget.dev.dma_mask = pdev->dev.dma_mask;
|
||||||
r8a66597->gadget.dev.release = pdev->dev.release;
|
r8a66597->gadget.dev.release = pdev->dev.release;
|
||||||
|
|
|
@ -3362,7 +3362,7 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
dev_set_name(&hsotg->gadget.dev, "gadget");
|
dev_set_name(&hsotg->gadget.dev, "gadget");
|
||||||
|
|
||||||
hsotg->gadget.is_dualspeed = 1;
|
hsotg->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
hsotg->gadget.ops = &s3c_hsotg_gadget_ops;
|
hsotg->gadget.ops = &s3c_hsotg_gadget_ops;
|
||||||
hsotg->gadget.name = dev_name(dev);
|
hsotg->gadget.name = dev_name(dev);
|
||||||
|
|
||||||
|
|
|
@ -1310,7 +1310,7 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
|
||||||
device_initialize(&hsudc->gadget.dev);
|
device_initialize(&hsudc->gadget.dev);
|
||||||
dev_set_name(&hsudc->gadget.dev, "gadget");
|
dev_set_name(&hsudc->gadget.dev, "gadget");
|
||||||
|
|
||||||
hsudc->gadget.is_dualspeed = 1;
|
hsudc->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
hsudc->gadget.ops = &s3c_hsudc_gadget_ops;
|
hsudc->gadget.ops = &s3c_hsudc_gadget_ops;
|
||||||
hsudc->gadget.name = dev_name(dev);
|
hsudc->gadget.name = dev_name(dev);
|
||||||
hsudc->gadget.dev.parent = dev;
|
hsudc->gadget.dev.parent = dev;
|
||||||
|
|
|
@ -371,14 +371,28 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store);
|
static DEVICE_ATTR(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store);
|
||||||
|
|
||||||
static ssize_t usb_udc_speed_show(struct device *dev,
|
#define USB_UDC_SPEED_ATTR(name, param) \
|
||||||
|
ssize_t usb_udc_##param##_show(struct device *dev, \
|
||||||
|
struct device_attribute *attr, char *buf) \
|
||||||
|
{ \
|
||||||
|
struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
|
||||||
|
return snprintf(buf, PAGE_SIZE, "%s\n", \
|
||||||
|
usb_speed_string(udc->gadget->param)); \
|
||||||
|
} \
|
||||||
|
static DEVICE_ATTR(name, S_IRUSR, usb_udc_##param##_show, NULL)
|
||||||
|
|
||||||
|
static USB_UDC_SPEED_ATTR(current_speed, speed);
|
||||||
|
static USB_UDC_SPEED_ATTR(maximum_speed, max_speed);
|
||||||
|
|
||||||
|
/* TODO: Scheduled for removal in 3.8. */
|
||||||
|
static ssize_t usb_udc_is_dualspeed_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
|
struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
|
||||||
return snprintf(buf, PAGE_SIZE, "%s\n",
|
return snprintf(buf, PAGE_SIZE, "%d\n",
|
||||||
usb_speed_string(udc->gadget->speed));
|
gadget_is_dualspeed(udc->gadget));
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR(speed, S_IRUGO, usb_udc_speed_show, NULL);
|
static DEVICE_ATTR(is_dualspeed, S_IRUSR, usb_udc_is_dualspeed_show, NULL);
|
||||||
|
|
||||||
#define USB_UDC_ATTR(name) \
|
#define USB_UDC_ATTR(name) \
|
||||||
ssize_t usb_udc_##name##_show(struct device *dev, \
|
ssize_t usb_udc_##name##_show(struct device *dev, \
|
||||||
|
@ -391,7 +405,6 @@ ssize_t usb_udc_##name##_show(struct device *dev, \
|
||||||
} \
|
} \
|
||||||
static DEVICE_ATTR(name, S_IRUGO, usb_udc_##name##_show, NULL)
|
static DEVICE_ATTR(name, S_IRUGO, usb_udc_##name##_show, NULL)
|
||||||
|
|
||||||
static USB_UDC_ATTR(is_dualspeed);
|
|
||||||
static USB_UDC_ATTR(is_otg);
|
static USB_UDC_ATTR(is_otg);
|
||||||
static USB_UDC_ATTR(is_a_peripheral);
|
static USB_UDC_ATTR(is_a_peripheral);
|
||||||
static USB_UDC_ATTR(b_hnp_enable);
|
static USB_UDC_ATTR(b_hnp_enable);
|
||||||
|
@ -401,7 +414,8 @@ static USB_UDC_ATTR(a_alt_hnp_support);
|
||||||
static struct attribute *usb_udc_attrs[] = {
|
static struct attribute *usb_udc_attrs[] = {
|
||||||
&dev_attr_srp.attr,
|
&dev_attr_srp.attr,
|
||||||
&dev_attr_soft_connect.attr,
|
&dev_attr_soft_connect.attr,
|
||||||
&dev_attr_speed.attr,
|
&dev_attr_current_speed.attr,
|
||||||
|
&dev_attr_maximum_speed.attr,
|
||||||
|
|
||||||
&dev_attr_is_dualspeed.attr,
|
&dev_attr_is_dualspeed.attr,
|
||||||
&dev_attr_is_otg.attr,
|
&dev_attr_is_otg.attr,
|
||||||
|
|
|
@ -1844,7 +1844,7 @@ int __init musb_gadget_setup(struct musb *musb)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
musb->g.ops = &musb_gadget_operations;
|
musb->g.ops = &musb_gadget_operations;
|
||||||
musb->g.is_dualspeed = 1;
|
musb->g.max_speed = USB_SPEED_HIGH;
|
||||||
musb->g.speed = USB_SPEED_UNKNOWN;
|
musb->g.speed = USB_SPEED_UNKNOWN;
|
||||||
|
|
||||||
/* this "gadget" abstracts/virtualizes the controller */
|
/* this "gadget" abstracts/virtualizes the controller */
|
||||||
|
|
|
@ -862,7 +862,7 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
|
||||||
gpriv->gadget.dev.parent = dev;
|
gpriv->gadget.dev.parent = dev;
|
||||||
gpriv->gadget.name = "renesas_usbhs_udc";
|
gpriv->gadget.name = "renesas_usbhs_udc";
|
||||||
gpriv->gadget.ops = &usbhsg_gadget_ops;
|
gpriv->gadget.ops = &usbhsg_gadget_ops;
|
||||||
gpriv->gadget.is_dualspeed = 1;
|
gpriv->gadget.max_speed = USB_SPEED_HIGH;
|
||||||
ret = device_register(&gpriv->gadget.dev);
|
ret = device_register(&gpriv->gadget.dev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_add_udc;
|
goto err_add_udc;
|
||||||
|
|
|
@ -477,8 +477,8 @@ struct usb_gadget_ops {
|
||||||
* driver setup() requests
|
* driver setup() requests
|
||||||
* @ep_list: List of other endpoints supported by the device.
|
* @ep_list: List of other endpoints supported by the device.
|
||||||
* @speed: Speed of current connection to USB host.
|
* @speed: Speed of current connection to USB host.
|
||||||
* @is_dualspeed: True if the controller supports both high and full speed
|
* @max_speed: Maximal speed the UDC can handle. UDC must support this
|
||||||
* operation. If it does, the gadget driver must also support both.
|
* and all slower speeds.
|
||||||
* @is_otg: True if the USB device port uses a Mini-AB jack, so that the
|
* @is_otg: True if the USB device port uses a Mini-AB jack, so that the
|
||||||
* gadget driver must provide a USB OTG descriptor.
|
* gadget driver must provide a USB OTG descriptor.
|
||||||
* @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
|
* @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
|
||||||
|
@ -518,7 +518,7 @@ struct usb_gadget {
|
||||||
struct usb_ep *ep0;
|
struct usb_ep *ep0;
|
||||||
struct list_head ep_list; /* of usb_ep */
|
struct list_head ep_list; /* of usb_ep */
|
||||||
enum usb_device_speed speed;
|
enum usb_device_speed speed;
|
||||||
unsigned is_dualspeed:1;
|
enum usb_device_speed max_speed;
|
||||||
unsigned is_otg:1;
|
unsigned is_otg:1;
|
||||||
unsigned is_a_peripheral:1;
|
unsigned is_a_peripheral:1;
|
||||||
unsigned b_hnp_enable:1;
|
unsigned b_hnp_enable:1;
|
||||||
|
@ -549,7 +549,7 @@ static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
|
||||||
static inline int gadget_is_dualspeed(struct usb_gadget *g)
|
static inline int gadget_is_dualspeed(struct usb_gadget *g)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_USB_GADGET_DUALSPEED
|
#ifdef CONFIG_USB_GADGET_DUALSPEED
|
||||||
/* runtime test would check "g->is_dualspeed" ... that might be
|
/* runtime test would check "g->max_speed" ... that might be
|
||||||
* useful to work around hardware bugs, but is mostly pointless
|
* useful to work around hardware bugs, but is mostly pointless
|
||||||
*/
|
*/
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -567,7 +567,7 @@ static inline int gadget_is_superspeed(struct usb_gadget *g)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_USB_GADGET_SUPERSPEED
|
#ifdef CONFIG_USB_GADGET_SUPERSPEED
|
||||||
/*
|
/*
|
||||||
* runtime test would check "g->is_superspeed" ... that might be
|
* runtime test would check "g->max_speed" ... that might be
|
||||||
* useful to work around hardware bugs, but is mostly pointless
|
* useful to work around hardware bugs, but is mostly pointless
|
||||||
*/
|
*/
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue