|
@@ -857,7 +857,7 @@ static void dbg_print(u8 addr, const char *name, int status, const char *extra)
|
|
|
stamp = stamp * 1000000 + tval.tv_usec;
|
|
|
|
|
|
scnprintf(dbg_data.buf[dbg_data.idx], DBG_DATA_MSG,
|
|
|
- "%04X\t» %02X %-7.7s %4i «\t%s\n",
|
|
|
+ "%04X\t? %02X %-7.7s %4i ?\t%s\n",
|
|
|
stamp, addr, name, status, extra);
|
|
|
|
|
|
dbg_inc(&dbg_data.idx);
|
|
@@ -865,7 +865,7 @@ static void dbg_print(u8 addr, const char *name, int status, const char *extra)
|
|
|
write_unlock_irqrestore(&dbg_data.lck, flags);
|
|
|
|
|
|
if (dbg_data.tty != 0)
|
|
|
- pr_notice("%04X\t» %02X %-7.7s %4i «\t%s\n",
|
|
|
+ pr_notice("%04X\t? %02X %-7.7s %4i ?\t%s\n",
|
|
|
stamp, addr, name, status, extra);
|
|
|
}
|
|
|
|
|
@@ -1025,15 +1025,15 @@ static ssize_t show_inters(struct device *dev, struct device_attribute *attr,
|
|
|
|
|
|
n += scnprintf(buf + n, PAGE_SIZE - n, "*test = %d\n",
|
|
|
isr_statistics.test);
|
|
|
- n += scnprintf(buf + n, PAGE_SIZE - n, "» ui = %d\n",
|
|
|
+ n += scnprintf(buf + n, PAGE_SIZE - n, "? ui = %d\n",
|
|
|
isr_statistics.ui);
|
|
|
- n += scnprintf(buf + n, PAGE_SIZE - n, "» uei = %d\n",
|
|
|
+ n += scnprintf(buf + n, PAGE_SIZE - n, "? uei = %d\n",
|
|
|
isr_statistics.uei);
|
|
|
- n += scnprintf(buf + n, PAGE_SIZE - n, "» pci = %d\n",
|
|
|
+ n += scnprintf(buf + n, PAGE_SIZE - n, "? pci = %d\n",
|
|
|
isr_statistics.pci);
|
|
|
- n += scnprintf(buf + n, PAGE_SIZE - n, "» uri = %d\n",
|
|
|
+ n += scnprintf(buf + n, PAGE_SIZE - n, "? uri = %d\n",
|
|
|
isr_statistics.uri);
|
|
|
- n += scnprintf(buf + n, PAGE_SIZE - n, "» sli = %d\n",
|
|
|
+ n += scnprintf(buf + n, PAGE_SIZE - n, "? sli = %d\n",
|
|
|
isr_statistics.sli);
|
|
|
n += scnprintf(buf + n, PAGE_SIZE - n, "*none = %d\n",
|
|
|
isr_statistics.none);
|
|
@@ -2515,6 +2515,9 @@ static int ci13xxx_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
|
|
|
return -ENOTSUPP;
|
|
|
}
|
|
|
|
|
|
+static int ci13xxx_start(struct usb_gadget_driver *driver,
|
|
|
+ int (*bind)(struct usb_gadget *));
|
|
|
+static int ci13xxx_stop(struct usb_gadget_driver *driver);
|
|
|
/**
|
|
|
* Device operations part of the API to the USB controller hardware,
|
|
|
* which don't involve endpoints (or i/o)
|
|
@@ -2524,17 +2527,19 @@ static const struct usb_gadget_ops usb_gadget_ops = {
|
|
|
.vbus_session = ci13xxx_vbus_session,
|
|
|
.wakeup = ci13xxx_wakeup,
|
|
|
.vbus_draw = ci13xxx_vbus_draw,
|
|
|
+ .start = ci13xxx_start,
|
|
|
+ .stop = ci13xxx_stop,
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
- * usb_gadget_probe_driver: register a gadget driver
|
|
|
+ * ci13xxx_start: register a gadget driver
|
|
|
* @driver: the driver being registered
|
|
|
* @bind: the driver's bind callback
|
|
|
*
|
|
|
- * Check usb_gadget_probe_driver() at <linux/usb/gadget.h> for details.
|
|
|
+ * Check ci13xxx_start() at <linux/usb/gadget.h> for details.
|
|
|
* Interrupts are enabled here.
|
|
|
*/
|
|
|
-int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
|
|
|
+static int ci13xxx_start(struct usb_gadget_driver *driver,
|
|
|
int (*bind)(struct usb_gadget *))
|
|
|
{
|
|
|
struct ci13xxx *udc = _udc;
|
|
@@ -2657,14 +2662,13 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
|
|
|
spin_unlock_irqrestore(udc->lock, flags);
|
|
|
return retval;
|
|
|
}
|
|
|
-EXPORT_SYMBOL(usb_gadget_probe_driver);
|
|
|
|
|
|
/**
|
|
|
- * usb_gadget_unregister_driver: unregister a gadget driver
|
|
|
+ * ci13xxx_stop: unregister a gadget driver
|
|
|
*
|
|
|
* Check usb_gadget_unregister_driver() at "usb_gadget.h" for details
|
|
|
*/
|
|
|
-int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
|
|
|
+static int ci13xxx_stop(struct usb_gadget_driver *driver)
|
|
|
{
|
|
|
struct ci13xxx *udc = _udc;
|
|
|
unsigned long i, flags;
|
|
@@ -2726,7 +2730,6 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-EXPORT_SYMBOL(usb_gadget_unregister_driver);
|
|
|
|
|
|
/******************************************************************************
|
|
|
* BUS block
|
|
@@ -2901,12 +2904,23 @@ static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev,
|
|
|
if (retval)
|
|
|
goto remove_dbg;
|
|
|
}
|
|
|
+
|
|
|
+ retval = usb_add_gadget_udc(dev, &udc->gadget);
|
|
|
+ if (retval)
|
|
|
+ goto remove_trans;
|
|
|
+
|
|
|
pm_runtime_no_callbacks(&udc->gadget.dev);
|
|
|
pm_runtime_enable(&udc->gadget.dev);
|
|
|
|
|
|
_udc = udc;
|
|
|
return retval;
|
|
|
|
|
|
+remove_trans:
|
|
|
+ if (udc->transceiver) {
|
|
|
+ otg_set_peripheral(udc->transceiver, &udc->gadget);
|
|
|
+ otg_put_transceiver(udc->transceiver);
|
|
|
+ }
|
|
|
+
|
|
|
err("error = %i", retval);
|
|
|
remove_dbg:
|
|
|
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
|
|
@@ -2936,6 +2950,7 @@ static void udc_remove(void)
|
|
|
err("EINVAL");
|
|
|
return;
|
|
|
}
|
|
|
+ usb_del_gadget_udc(&udc->gadget);
|
|
|
|
|
|
if (udc->transceiver) {
|
|
|
otg_set_peripheral(udc->transceiver, &udc->gadget);
|