From 4263fdd731d9a1922d93ccd7b46943b3bdf3d58e Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Fri, 23 Nov 2007 18:11:49 +0000
Subject: [PATCH] fix USB driver to compile with ADMH_VERBOSE_DEBUG defined

SVN-Revision: 9593
---
 .../files/drivers/usb/host/adm5120-dbg.c      | 15 +++---
 .../files/drivers/usb/host/adm5120-hcd.c      |  5 +-
 .../files/drivers/usb/host/adm5120-q.c        | 50 +++++++++----------
 3 files changed, 34 insertions(+), 36 deletions(-)

diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-dbg.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-dbg.c
index 17d4ad446b0..4c814e8b451 100644
--- a/target/linux/adm5120/files/drivers/usb/host/adm5120-dbg.c
+++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-dbg.c
@@ -76,12 +76,12 @@ static inline char *td_togglestring(u32 info)
  * small: 0) header + data packets 1) just header
  */
 static void __attribute__((unused))
-urb_print(struct admhcd *ahcd, struct urb *urb, char * str, int small)
+urb_print(struct admhcd *ahcd, struct urb *urb, char *str, int small)
 {
 	unsigned int pipe = urb->pipe;
 
 	if (!urb->dev || !urb->dev->bus) {
-		admhc_dbg("%s URB: no dev", str);
+		admhc_dbg(ahcd, "%s URB: no dev", str);
 		return;
 	}
 
@@ -89,7 +89,7 @@ urb_print(struct admhcd *ahcd, struct urb *urb, char * str, int small)
 	if (urb->status != 0)
 #endif
 	admhc_dbg(ahcd, "URB-%s %p dev=%d ep=%d%s-%s flags=%x len=%d/%d "
-			"stat=%d",
+			"stat=%d\n",
 			str,
 			urb,
 			usb_pipedevice (pipe),
@@ -112,14 +112,14 @@ urb_print(struct admhcd *ahcd, struct urb *urb, char * str, int small)
 			printk ("\n");
 		}
 		if (urb->transfer_buffer_length > 0 && urb->transfer_buffer) {
-			printk(KERN_DEBUG __FILE__ ": data(%d/%d):",
+			admhc_dbg(ahcd, "data(%d/%d):",
 				urb->actual_length,
 				urb->transfer_buffer_length);
 			len = usb_pipeout(pipe)?
 						urb->transfer_buffer_length: urb->actual_length;
 			for (i = 0; i < 16 && i < len; i++)
-				printk (" %02x", ((__u8 *) urb->transfer_buffer) [i]);
-			admhc_dbg("%s stat:%d\n", i < len? "...": "", urb->status);
+				printk(" %02x", ((__u8 *)urb->transfer_buffer)[i]);
+			printk("%s stat:%d\n", i < len? "...": "", urb->status);
 		}
 	}
 #endif /* ADMHC_VERBOSE_DEBUG */
@@ -363,7 +363,8 @@ admhc_dump_ed(const struct admhcd *ahcd, const char *label,
 
 #else /* ifdef DEBUG */
 
-static inline void urb_print(struct urb * urb, char * str, int small) {}
+static inline void urb_print(struct admhcd *ahcd, struct urb * urb, char * str,
+	int small) {}
 static inline void admhc_dump_ed(const struct admhcd *ahcd, const char *label,
 	const struct ed *ed, int verbose) {}
 static inline void admhc_dump_td(const struct admhcd *ahcd, const char *label,
diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c
index 30fe132d99f..90889bfc04c 100644
--- a/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c
+++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c
@@ -45,7 +45,7 @@
 #include "../core/hcd.h"
 #include "../core/hub.h"
 
-#define DRIVER_VERSION	"v0.10"
+#define DRIVER_VERSION	"v0.10.1"
 #define DRIVER_AUTHOR	"Gabor Juhos <juhosg at openwrt.org>"
 #define DRIVER_DESC	"ADMtek USB 1.1 Host Controller Driver"
 
@@ -228,11 +228,12 @@ static int admhc_urb_dequeue(struct usb_hcd *hcd, struct urb *urb)
 	struct admhcd *ahcd = hcd_to_admhcd(hcd);
 	unsigned long flags;
 
+	spin_lock_irqsave(&ahcd->lock, flags);
+
 #ifdef ADMHC_VERBOSE_DEBUG
 	urb_print(ahcd, urb, "DEQUEUE", 1);
 #endif
 
-	spin_lock_irqsave(&ahcd->lock, flags);
 	if (HC_IS_RUNNING(hcd->state)) {
 		struct urb_priv *urb_priv;
 
diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-q.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-q.c
index 24acc87e780..d93f8b9d5d0 100644
--- a/target/linux/adm5120/files/drivers/usb/host/adm5120-q.c
+++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-q.c
@@ -38,7 +38,7 @@ __acquires(ahcd->lock)
 			&& urb->status == 0) {
 		urb->status = -EREMOTEIO;
 #ifdef ADMHC_VERBOSE_DEBUG
-		urb_print(urb, "SHORT", usb_pipeout (urb->pipe));
+		urb_print(ahcd, urb, "SHORT", usb_pipeout(urb->pipe));
 #endif
 	}
 	spin_unlock(&urb->lock);
@@ -53,7 +53,7 @@ __acquires(ahcd->lock)
 	}
 
 #ifdef ADMHC_VERBOSE_DEBUG
-	urb_print(urb, "RET", usb_pipeout (urb->pipe));
+	urb_print(ahcd, urb, "RET", usb_pipeout (urb->pipe));
 #endif
 
 	/* urb->complete() can reenter this HCD */
@@ -112,7 +112,7 @@ static void periodic_link (struct admhcd *ahcd, struct ed *ed)
 	unsigned	i;
 
 	admhc_vdbg (ahcd, "link %sed %p branch %d [%dus.], interval %d\n",
-		(ed->hwINFO & cpu_to_hc32 (ahcd, ED_ISO)) ? "iso " : "",
+		(ed->hwINFO & cpu_to_hc32(ahcd, ED_ISO)) ? "iso " : "",
 		ed, ed->branch, ed->load, ed->interval);
 
 	for (i = ed->branch; i < NUM_INTS; i += ed->interval) {
@@ -202,7 +202,7 @@ static void periodic_unlink (struct admhcd *ahcd, struct ed *ed)
 
 	admhcd_to_hcd(ahcd)->self.bandwidth_allocated -= ed->load / ed->interval;
 	admhc_vdbg (ahcd, "unlink %sed %p branch %d [%dus.], interval %d\n",
-		(ed->hwINFO & cpu_to_hc32 (ahcd, ED_ISO)) ? "iso " : "",
+		(ed->hwINFO & cpu_to_hc32(ahcd, ED_ISO)) ? "iso " : "",
 		ed, ed->branch, ed->load, ed->interval);
 }
 #endif
@@ -333,7 +333,7 @@ static struct ed *ed_get(struct admhcd *ahcd,	struct usb_host_endpoint *ep,
  */
 static void start_ed_unlink(struct admhcd *ahcd, struct ed *ed)
 {
-	ed->hwINFO |= cpu_to_hc32 (ahcd, ED_DEQUEUE);
+	ed->hwINFO |= cpu_to_hc32(ahcd, ED_DEQUEUE);
 	ed_deschedule(ahcd, ed);
 
 	/* add this ED into the remove list */
@@ -432,9 +432,7 @@ static void td_submit_urb(struct admhcd *ahcd, struct urb *urb)
 	int		cnt = 0;
 	u32		info = 0;
 	int		is_out = usb_pipeout(urb->pipe);
-	int		periodic = 0;
 	u32		toggle = 0;
-	struct td	*td;
 
 	/* OHCI handles the bulk/interrupt data toggles itself.  We just
 	 * use the device toggle bits for resetting, and rely on the fact
@@ -644,15 +642,15 @@ ed_halted(struct admhcd *ahcd, struct td *td, int cc, struct td *rev)
 	struct urb		*urb = td->urb;
 	struct ed		*ed = td->ed;
 	struct list_head	*tmp = td->td_list.next;
-	__hc32			toggle = ed->hwHeadP & cpu_to_hc32 (ahcd, ED_C);
+	__hc32			toggle = ed->hwHeadP & cpu_to_hc32(ahcd, ED_C);
 
 	admhc_dump_ed(ahcd, "ed halted", td->ed, 1);
 	/* clear ed halt; this is the td that caused it, but keep it inactive
 	 * until its urb->complete() has a chance to clean up.
 	 */
-	ed->hwINFO |= cpu_to_hc32 (ahcd, ED_SKIP);
+	ed->hwINFO |= cpu_to_hc32(ahcd, ED_SKIP);
 	wmb();
-	ed->hwHeadP &= ~cpu_to_hc32 (ahcd, ED_H);
+	ed->hwHeadP &= ~cpu_to_hc32(ahcd, ED_H);
 
 	/* put any later tds from this urb onto the donelist, after 'td',
 	 * order won't matter here: no errors, and nothing was transferred.
@@ -677,9 +675,9 @@ ed_halted(struct admhcd *ahcd, struct td *td, int cc, struct td *rev)
 		 */
 		info = next->hwINFO;
 #if 0		/* FIXME */
-		info |= cpu_to_hc32 (ahcd, TD_DONE);
+		info |= cpu_to_hc32(ahcd, TD_DONE);
 #endif
-		info &= ~cpu_to_hc32 (ahcd, TD_CC);
+		info &= ~cpu_to_hc32(ahcd, TD_CC);
 		next->hwINFO = info;
 
 		next->next_dl_td = rev;
@@ -738,7 +736,7 @@ skip_ed:
 				continue;
 			}
 
-			if (!list_empty (&ed->td_list)) {
+			if (!list_empty(&ed->td_list)) {
 				struct td	*td;
 				u32		head;
 
@@ -772,7 +770,7 @@ skip_ed:
 rescan_this:
 		completed = 0;
 		prev = &ed->hwHeadP;
-		list_for_each_safe (entry, tmp, &ed->td_list) {
+		list_for_each_safe(entry, tmp, &ed->td_list) {
 			struct td	*td;
 			struct urb	*urb;
 			struct urb_priv	*urb_priv;
@@ -795,7 +793,7 @@ rescan_this:
 			*prev = td->hwNextTD | savebits;
 
 			/* HC may have partly processed this TD */
-			urb_print(urb, "PARTIAL", 1);
+			urb_print(ahcd, urb, "PARTIAL", 1);
 			td_done(ahcd, urb, td);
 
 			/* if URB is done, clean up */
@@ -804,7 +802,7 @@ rescan_this:
 				finish_urb(ahcd, urb);
 			}
 		}
-		if (completed && !list_empty (&ed->td_list))
+		if (completed && !list_empty(&ed->td_list))
 			goto rescan_this;
 
 		/* ED's now officially unlinked, hc doesn't see */
@@ -812,10 +810,10 @@ rescan_this:
 		ed->hwHeadP &= ~cpu_to_hc32(ahcd, ED_H);
 		ed->hwNextED = 0;
 		wmb ();
-		ed->hwINFO &= ~cpu_to_hc32 (ahcd, ED_SKIP | ED_DEQUEUE);
+		ed->hwINFO &= ~cpu_to_hc32(ahcd, ED_SKIP | ED_DEQUEUE);
 
 		/* but if there's work queued, reschedule */
-		if (!list_empty (&ed->td_list)) {
+		if (!list_empty(&ed->td_list)) {
 			if (HC_IS_RUNNING(admhcd_to_hcd(ahcd)->state))
 				ed_schedule(ahcd, ed);
 		}
@@ -838,9 +836,7 @@ rescan_this:
 static void ed_unhalt(struct admhcd *ahcd, struct ed *ed, struct urb *urb)
 {
 	struct list_head *entry,*tmp;
-	struct urb_priv *urb_priv = urb->hcpriv;
-	__hc32 toggle = ed->hwHeadP & cpu_to_hc32 (ahcd, ED_C);
-
+	__hc32 toggle = ed->hwHeadP & cpu_to_hc32(ahcd, ED_C);
 
 #ifdef ADMHC_VERBOSE_DEBUG
 	admhc_dump_ed(ahcd, "UNHALT", ed, 0);
@@ -848,9 +844,9 @@ static void ed_unhalt(struct admhcd *ahcd, struct ed *ed, struct urb *urb)
 	/* clear ed halt; this is the td that caused it, but keep it inactive
 	 * until its urb->complete() has a chance to clean up.
 	 */
-	ed->hwINFO |= cpu_to_hc32 (ahcd, ED_SKIP);
+	ed->hwINFO |= cpu_to_hc32(ahcd, ED_SKIP);
 	wmb();
-	ed->hwHeadP &= ~cpu_to_hc32 (ahcd, ED_H);
+	ed->hwHeadP &= ~cpu_to_hc32(ahcd, ED_H);
 
 	list_for_each_safe(entry, tmp, &ed->td_list) {
 		struct td *td = list_entry(entry, struct td, td_list);
@@ -913,13 +909,13 @@ static void ed_update(struct admhcd *ahcd, struct ed *ed)
 				start_ed_unlink(ahcd, ed);
 
 		/* ... reenabling halted EDs only after fault cleanup */
-		} else if ((ed->hwINFO & cpu_to_hc32 (ahcd,
+		} else if ((ed->hwINFO & cpu_to_hc32(ahcd,
 						ED_SKIP | ED_DEQUEUE))
-					== cpu_to_hc32 (ahcd, ED_SKIP)) {
+					== cpu_to_hc32(ahcd, ED_SKIP)) {
 			td = list_entry(ed->td_list.next, struct td, td_list);
 #if 0
-			if (!(td->hwINFO & cpu_to_hc32 (ahcd, TD_DONE))) {
-				ed->hwINFO &= ~cpu_to_hc32 (ahcd, ED_SKIP);
+			if (!(td->hwINFO & cpu_to_hc32(ahcd, TD_DONE))) {
+				ed->hwINFO &= ~cpu_to_hc32(ahcd, ED_SKIP);
 				/* ... hc may need waking-up */
 				switch (ed->type) {
 				case PIPE_CONTROL: