summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/ci13xxx_udc.c169
-rw-r--r--drivers/usb/gadget/ci13xxx_udc.h27
2 files changed, 87 insertions, 109 deletions
diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c
index 009a3cd5895d..ce50af97ab3f 100644
--- a/drivers/usb/gadget/ci13xxx_udc.c
+++ b/drivers/usb/gadget/ci13xxx_udc.c
@@ -781,9 +781,9 @@ static ssize_t show_device(struct device *dev, struct device_attribute *attr,
struct usb_gadget *gadget = &udc->gadget;
int n = 0;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
return 0;
}
@@ -823,7 +823,7 @@ static ssize_t show_driver(struct device *dev, struct device_attribute *attr,
struct usb_gadget_driver *driver = udc->driver;
int n = 0;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
dev_err(dev, "[%s] EINVAL\n", __func__);
return 0;
@@ -984,9 +984,9 @@ static ssize_t show_events(struct device *dev, struct device_attribute *attr,
unsigned long flags;
unsigned i, j, n = 0;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(dev->parent, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(dev->parent, "[%s] EINVAL\n", __func__);
return 0;
}
@@ -1019,7 +1019,7 @@ static ssize_t store_events(struct device *dev, struct device_attribute *attr,
{
unsigned tty;
- dbg_trace("[%s] %p, %d\n", __func__, buf, count);
+ trace(dev->parent, "[%s] %p, %d\n", __func__, buf, count);
if (attr == NULL || buf == NULL) {
dev_err(dev, "[%s] EINVAL\n", __func__);
goto done;
@@ -1051,9 +1051,9 @@ static ssize_t show_inters(struct device *dev, struct device_attribute *attr,
u32 intr;
unsigned i, j, n = 0;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
return 0;
}
@@ -1124,14 +1124,14 @@ static ssize_t store_inters(struct device *dev, struct device_attribute *attr,
unsigned long flags;
unsigned en, bit;
- dbg_trace("[%s] %p, %d\n", __func__, buf, count);
+ trace(udc->dev, "%p, %d\n", buf, count);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "EINVAL\n");
goto done;
}
if (sscanf(buf, "%u %u", &en, &bit) != 2 || en > 1) {
- dev_err(dev, "<1|0> <bit>: enable|disable interrupt");
+ dev_err(udc->dev, "<1|0> <bit>: enable|disable interrupt\n");
goto done;
}
@@ -1164,9 +1164,9 @@ static ssize_t show_port_test(struct device *dev,
unsigned long flags;
unsigned mode;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "EINVAL\n");
return 0;
}
@@ -1190,20 +1190,20 @@ static ssize_t store_port_test(struct device *dev,
unsigned long flags;
unsigned mode;
- dbg_trace("[%s] %p, %d\n", __func__, buf, count);
+ trace(udc->dev, "%p, %d\n", buf, count);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
goto done;
}
if (sscanf(buf, "%u", &mode) != 1) {
- dev_err(dev, "<mode>: set port test mode");
+ dev_err(udc->dev, "<mode>: set port test mode");
goto done;
}
spin_lock_irqsave(&udc->lock, flags);
if (hw_port_test_set(udc, mode))
- dev_err(dev, "invalid mode\n");
+ dev_err(udc->dev, "invalid mode\n");
spin_unlock_irqrestore(&udc->lock, flags);
done:
@@ -1224,9 +1224,9 @@ static ssize_t show_qheads(struct device *dev, struct device_attribute *attr,
unsigned long flags;
unsigned i, j, n = 0;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
return 0;
}
@@ -1265,15 +1265,15 @@ static ssize_t show_registers(struct device *dev,
u32 *dump;
unsigned i, k, n = 0;
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
return 0;
}
dump = kmalloc(sizeof(u32) * DUMP_ENTRIES, GFP_KERNEL);
if (!dump) {
- dev_err(dev, "%s: out of memory\n", __func__);
+ dev_err(udc->dev, "%s: out of memory\n", __func__);
return 0;
}
@@ -1303,20 +1303,21 @@ static ssize_t store_registers(struct device *dev,
struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
unsigned long addr, data, flags;
- dbg_trace("[%s] %p, %d\n", __func__, buf, count);
+ trace(udc->dev, "%p, %d\n", buf, count);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
goto done;
}
if (sscanf(buf, "%li %li", &addr, &data) != 2) {
- dev_err(dev, "<addr> <data>: write data to register address");
+ dev_err(udc->dev,
+ "<addr> <data>: write data to register address\n");
goto done;
}
spin_lock_irqsave(&udc->lock, flags);
if (hw_register_write(udc, addr, data))
- dev_err(dev, "invalid address range\n");
+ dev_err(udc->dev, "invalid address range\n");
spin_unlock_irqrestore(&udc->lock, flags);
done:
@@ -1339,9 +1340,9 @@ static ssize_t show_requests(struct device *dev, struct device_attribute *attr,
struct ci13xxx_req *req = NULL;
unsigned i, j, n = 0, qSize = sizeof(struct ci13xxx_td)/sizeof(u32);
- dbg_trace("[%s] %p\n", __func__, buf);
+ trace(udc->dev, "%p\n", buf);
if (attr == NULL || buf == NULL) {
- dev_err(dev, "[%s] EINVAL\n", __func__);
+ dev_err(udc->dev, "[%s] EINVAL\n", __func__);
return 0;
}
@@ -1470,7 +1471,7 @@ static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
int ret = 0;
unsigned length = mReq->req.length;
- trace("%p, %p", mEp, mReq);
+ trace(udc->dev, "%p, %p", mEp, mReq);
/* don't queue twice */
if (mReq->req.status == -EALREADY)
@@ -1572,7 +1573,7 @@ done:
*/
static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
{
- trace("%p, %p", mEp, mReq);
+ trace(mEp->udc->dev, "%p, %p", mEp, mReq);
if (mReq->req.status != -EALREADY)
return -EINVAL;
@@ -1623,7 +1624,7 @@ static int _ep_nuke(struct ci13xxx_ep *mEp)
__releases(mEp->lock)
__acquires(mEp->lock)
{
- trace("%p", mEp);
+ trace(mEp->udc->dev, "%p", mEp);
if (mEp == NULL)
return -EINVAL;
@@ -1660,7 +1661,7 @@ static int _gadget_stop_activity(struct usb_gadget *gadget)
struct ci13xxx *udc = container_of(gadget, struct ci13xxx, gadget);
unsigned long flags;
- trace("%p", gadget);
+ trace(udc->dev, "%p", gadget);
if (gadget == NULL)
return -EINVAL;
@@ -1708,12 +1709,7 @@ __acquires(udc->lock)
{
int retval;
- trace("%p", udc);
-
- if (udc == NULL) {
- pr_err("EINVAL\n");
- return;
- }
+ trace(udc->dev, "%p", udc);
dbg_event(0xFF, "BUS RST", 0);
@@ -1734,7 +1730,7 @@ __acquires(udc->lock)
done:
if (retval)
- pr_err("error: %i\n", retval);
+ dev_err(udc->dev, "error: %i\n", retval);
}
/**
@@ -1746,12 +1742,10 @@ __acquires(udc->lock)
*/
static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req)
{
- trace("%p, %p", ep, req);
+ trace(NULL, "%p, %p", ep, req);
- if (ep == NULL || req == NULL) {
- pr_err("EINVAL\n");
+ if (ep == NULL || req == NULL)
return;
- }
kfree(req->buf);
usb_ep_free_request(ep, req);
@@ -1774,7 +1768,7 @@ __acquires(mEp->lock)
gfp_t gfp_flags = GFP_ATOMIC;
int dir, num, retval;
- trace("%p, %p", mEp, setup);
+ trace(udc->dev, "%p, %p", mEp, setup);
if (mEp == NULL || setup == NULL)
return -EINVAL;
@@ -1837,7 +1831,7 @@ isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
struct ci13xxx *udc = req->context;
unsigned long flags;
- trace("%p, %p", ep, req);
+ trace(udc->dev, "%p, %p", ep, req);
spin_lock_irqsave(&udc->lock, flags);
if (udc->test_mode)
@@ -1858,7 +1852,7 @@ __acquires(mEp->lock)
int retval;
struct ci13xxx_ep *mEp;
- trace("%p", udc);
+ trace(udc->dev, "%p", udc);
mEp = (udc->ep0_dir == TX) ? udc->ep0out : udc->ep0in;
udc->status->context = udc;
@@ -1886,7 +1880,7 @@ __acquires(mEp->lock)
struct ci13xxx_ep *mEpTemp = mEp;
int uninitialized_var(retval);
- trace("%p", mEp);
+ trace(mEp->udc->dev, "%p", mEp);
if (list_empty(&mEp->qh.queue))
return -EINVAL;
@@ -1929,12 +1923,7 @@ __acquires(udc->lock)
unsigned i;
u8 tmode = 0;
- trace("%p", udc);
-
- if (udc == NULL) {
- pr_err("EINVAL\n");
- return;
- }
+ trace(udc->dev, "%p", udc);
for (i = 0; i < udc->hw_ep_max; i++) {
struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
@@ -1954,7 +1943,7 @@ __acquires(udc->lock)
"ERROR", err);
spin_unlock(&udc->lock);
if (usb_ep_set_halt(&mEp->ep))
- dev_err(&udc->gadget.dev,
+ dev_err(udc->dev,
"error: ep_set_halt\n");
spin_lock(&udc->lock);
}
@@ -1966,8 +1955,7 @@ __acquires(udc->lock)
continue;
if (i != 0) {
- dev_warn(&udc->gadget.dev,
- "ctrl traffic received at endpoint\n");
+ dev_warn(udc->dev, "ctrl traffic at endpoint %d\n", i);
continue;
}
@@ -2107,8 +2095,7 @@ delegate:
spin_unlock(&udc->lock);
if (usb_ep_set_halt(&mEp->ep))
- dev_err(&udc->gadget.dev,
- "error: ep_set_halt\n");
+ dev_err(udc->dev, "error: ep_set_halt\n");
spin_lock(&udc->lock);
}
}
@@ -2129,7 +2116,7 @@ static int ep_enable(struct usb_ep *ep,
int retval = 0;
unsigned long flags;
- trace("%p, %p", ep, desc);
+ trace(mEp->udc->dev, "%p, %p", ep, desc);
if (ep == NULL || desc == NULL)
return -EINVAL;
@@ -2141,7 +2128,7 @@ static int ep_enable(struct usb_ep *ep,
mEp->ep.desc = desc;
if (!list_empty(&mEp->qh.queue))
- warn("enabling a non-empty endpoint!");
+ dev_warn(mEp->udc->dev, "enabling a non-empty endpoint!\n");
mEp->dir = usb_endpoint_dir_in(desc) ? TX : RX;
mEp->num = usb_endpoint_num(desc);
@@ -2186,7 +2173,7 @@ static int ep_disable(struct usb_ep *ep)
int direction, retval = 0;
unsigned long flags;
- trace("%p", ep);
+ trace(mEp->udc->dev, "%p", ep);
if (ep == NULL)
return -EINVAL;
@@ -2225,12 +2212,10 @@ static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
struct ci13xxx_req *mReq = NULL;
- trace("%p, %i", ep, gfp_flags);
+ trace(mEp->udc->dev, "%p, %i", ep, gfp_flags);
- if (ep == NULL) {
- pr_err("EINVAL\n");
+ if (ep == NULL)
return NULL;
- }
mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags);
if (mReq != NULL) {
@@ -2261,13 +2246,12 @@ static void ep_free_request(struct usb_ep *ep, struct usb_request *req)
struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
unsigned long flags;
- trace("%p, %p", ep, req);
+ trace(mEp->udc->dev, "%p, %p", ep, req);
if (ep == NULL || req == NULL) {
- pr_err("EINVAL\n");
return;
} else if (!list_empty(&mReq->queue)) {
- pr_err("EBUSY\n");
+ dev_err(mEp->udc->dev, "freeing queued request\n");
return;
}
@@ -2295,7 +2279,7 @@ static int ep_queue(struct usb_ep *ep, struct usb_request *req,
int retval = 0;
unsigned long flags;
- trace("%p, %p, %X", ep, req, gfp_flags);
+ trace(mEp->udc->dev, "%p, %p, %X", ep, req, gfp_flags);
if (ep == NULL || req == NULL || mEp->ep.desc == NULL)
return -EINVAL;
@@ -2309,21 +2293,22 @@ static int ep_queue(struct usb_ep *ep, struct usb_request *req,
if (!list_empty(&mEp->qh.queue)) {
_ep_nuke(mEp);
retval = -EOVERFLOW;
- warn("endpoint ctrl %X nuked", _usb_addr(mEp));
+ dev_warn(mEp->udc->dev, "endpoint ctrl %X nuked\n",
+ _usb_addr(mEp));
}
}
/* first nuke then test link, e.g. previous status has not sent */
if (!list_empty(&mReq->queue)) {
retval = -EBUSY;
- pr_err("request already in queue\n");
+ dev_err(mEp->udc->dev, "request already in queue\n");
goto done;
}
if (req->length > 4 * CI13XXX_PAGE_SIZE) {
req->length = 4 * CI13XXX_PAGE_SIZE;
retval = -EMSGSIZE;
- warn("request length truncated");
+ dev_warn(mEp->udc->dev, "request length truncated\n");
}
dbg_queue(_usb_addr(mEp), req, retval);
@@ -2357,7 +2342,7 @@ static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
unsigned long flags;
- trace("%p, %p", ep, req);
+ trace(mEp->udc->dev, "%p, %p", ep, req);
if (ep == NULL || req == NULL || mReq->req.status != -EALREADY ||
mEp->ep.desc == NULL || list_empty(&mReq->queue) ||
@@ -2401,7 +2386,7 @@ static int ep_set_halt(struct usb_ep *ep, int value)
int direction, retval = 0;
unsigned long flags;
- trace("%p, %i", ep, value);
+ trace(mEp->udc->dev, "%p, %i", ep, value);
if (ep == NULL || mEp->ep.desc == NULL)
return -EINVAL;
@@ -2444,7 +2429,7 @@ static int ep_set_wedge(struct usb_ep *ep)
struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
unsigned long flags;
- trace("%p", ep);
+ trace(mEp->udc->dev, "%p", ep);
if (ep == NULL || mEp->ep.desc == NULL)
return -EINVAL;
@@ -2469,10 +2454,10 @@ static void ep_fifo_flush(struct usb_ep *ep)
struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
unsigned long flags;
- trace("%p", ep);
+ trace(mEp->udc->dev, "%p", ep);
if (ep == NULL) {
- pr_err("%02X: -EINVAL\n", _usb_addr(mEp));
+ dev_err(mEp->udc->dev, "%02X: -EINVAL\n", _usb_addr(mEp));
return;
}
@@ -2542,17 +2527,17 @@ static int ci13xxx_wakeup(struct usb_gadget *_gadget)
unsigned long flags;
int ret = 0;
- trace();
+ trace(udc->dev, "");
spin_lock_irqsave(&udc->lock, flags);
if (!udc->remote_wakeup) {
ret = -EOPNOTSUPP;
- trace("remote wakeup feature is not enabled\n");
+ trace(udc->dev, "remote wakeup feature is not enabled\n");
goto out;
}
if (!hw_read(udc, OP_PORTSC, PORTSC_SUSP)) {
ret = -EINVAL;
- trace("port is not suspended\n");
+ trace(udc->dev, "port is not suspended\n");
goto out;
}
hw_write(udc, OP_PORTSC, PORTSC_FPR, PORTSC_FPR);
@@ -2602,7 +2587,7 @@ static int ci13xxx_start(struct usb_gadget_driver *driver,
int i, j;
int retval = -ENOMEM;
- trace("%p", driver);
+ trace(udc->dev, "%p", driver);
if (driver == NULL ||
bind == NULL ||
@@ -2632,7 +2617,7 @@ static int ci13xxx_start(struct usb_gadget_driver *driver,
spin_lock_irqsave(&udc->lock, flags);
- info("hw_ep_max = %d", udc->hw_ep_max);
+ dev_info(udc->dev, "hw_ep_max = %d\n", udc->hw_ep_max);
udc->gadget.dev.driver = NULL;
@@ -2740,7 +2725,7 @@ static int ci13xxx_stop(struct usb_gadget_driver *driver)
struct ci13xxx *udc = _udc;
unsigned long i, flags;
- trace("%p", driver);
+ trace(udc->dev, "%p", driver);
if (driver == NULL ||
driver->unbind == NULL ||
@@ -2813,10 +2798,10 @@ static irqreturn_t udc_irq(int irq, void *data)
irqreturn_t retval;
u32 intr;
- trace();
+ trace(udc ? udc->dev : NULL, "");
if (udc == NULL) {
- pr_err("ENODEV\n");
+ dev_err(udc->dev, "ENODEV");
return IRQ_HANDLED;
}
@@ -2885,10 +2870,7 @@ static irqreturn_t udc_irq(int irq, void *data)
*/
static void udc_release(struct device *dev)
{
- trace("%p", dev);
-
- if (dev == NULL)
- pr_err("EINVAL\n");
+ trace(dev->parent, "%p", dev);
}
/**
@@ -2907,7 +2889,7 @@ static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev,
struct ci13xxx *udc;
int retval = 0;
- trace("%p, %p, %p", dev, regs, driver->name);
+ trace(dev, "%p, %p, %p", dev, regs, driver->name);
if (dev == NULL || regs == NULL || driver == NULL ||
driver->name == NULL)
@@ -2936,6 +2918,8 @@ static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev,
udc->gadget.dev.parent = dev;
udc->gadget.dev.release = udc_release;
+ udc->dev = dev;
+
retval = hw_device_init(udc, regs, driver->capoffset);
if (retval < 0)
goto free_udc;
@@ -3015,10 +2999,9 @@ static void udc_remove(void)
{
struct ci13xxx *udc = _udc;
- if (udc == NULL) {
- pr_err("EINVAL\n");
+ if (udc == NULL)
return;
- }
+
usb_del_gadget_udc(&udc->gadget);
if (udc->transceiver) {
diff --git a/drivers/usb/gadget/ci13xxx_udc.h b/drivers/usb/gadget/ci13xxx_udc.h
index f605090777ce..a12fa569315f 100644
--- a/drivers/usb/gadget/ci13xxx_udc.h
+++ b/drivers/usb/gadget/ci13xxx_udc.h
@@ -134,6 +134,7 @@ struct ci13xxx {
struct dma_pool *td_pool; /* DMA pool for transfer descs */
struct usb_request *status; /* ep0 status request */
+ struct device *dev;
struct usb_gadget gadget; /* USB slave device */
struct ci13xxx_ep ci13xxx_ep[ENDPT_MAX]; /* extended endpts */
u32 ep0_dir; /* ep0 direction */
@@ -245,24 +246,18 @@ enum ci13xxx_regs {
/******************************************************************************
* LOGGING
*****************************************************************************/
-#define ci13xxx_printk(level, format, args...) \
-do { \
- if (_udc == NULL) \
- printk(level "[%s] " format "\n", __func__, ## args); \
- else \
- dev_printk(level, _udc->gadget.dev.parent, \
- "[%s] " format "\n", __func__, ## args); \
-} while (0)
-
-#define warn(format, args...) ci13xxx_printk(KERN_WARNING, format, ## args)
-#define info(format, args...) ci13xxx_printk(KERN_INFO, format, ## args)
-
#ifdef TRACE
-#define trace(format, args...) ci13xxx_printk(KERN_DEBUG, format, ## args)
-#define dbg_trace(format, args...) dev_dbg(dev, format, ##args)
+#define trace(dev, format, args...) \
+ do { \
+ if (dev == NULL) \
+ pr_debug("[%s] " format "\n", __func__, \
+ ## args); \
+ else \
+ dev_printk(KERN_DEBUG, dev, "[%s] " format "\n", \
+ __func__, ## args); \
+ } while (0)
#else
-#define trace(format, args...) do {} while (0)
-#define dbg_trace(format, args...) do {} while (0)
+#define trace(dev, format, args...) do {} while (0)
#endif
#endif /* _CI13XXX_h_ */