return next - buf->output_buf;
 }
 
+static unsigned output_buf_tds_dir(char *buf, struct ehci_hcd *ehci,
+               struct ehci_qh_hw *hw, struct ehci_qh *qh, unsigned size)
+{
+       u32                     scratch = hc32_to_cpup(ehci, &hw->hw_info1);
+       struct ehci_qtd         *qtd;
+       char                    *type = "";
+       unsigned                temp = 0;
+
+       /* count tds, get ep direction */
+       list_for_each_entry(qtd, &qh->qtd_list, qtd_list) {
+               temp++;
+               switch ((hc32_to_cpu(ehci, qtd->hw_token) >> 8) & 0x03) {
+               case 0:
+                       type = "out";
+                       continue;
+               case 1:
+                       type = "in";
+                       continue;
+               }
+       }
+
+       return scnprintf(buf, size, " (%c%d ep%d%s [%d/%d] q%d p%d)",
+                       speed_char(scratch), scratch & 0x007f,
+                       (scratch >> 8) & 0x000f, type, qh->ps.usecs,
+                       qh->ps.c_usecs, temp, 0x7ff & (scratch >> 16));
+}
+
 #define DBG_SCHED_LIMIT 64
 static ssize_t fill_periodic_buffer(struct debug_buffer *buf)
 {
                                }
                                /* show more info the first time around */
                                if (temp == seen_count) {
-                                       u32     scratch = hc32_to_cpup(ehci,
-                                                       &hw->hw_info1);
-                                       struct ehci_qtd *qtd;
-                                       char            *type = "";
-
-                                       /* count tds, get ep direction */
-                                       temp = 0;
-                                       list_for_each_entry(qtd,
-                                                       &p.qh->qtd_list,
-                                                       qtd_list) {
-                                               temp++;
-                                               switch ((hc32_to_cpu(ehci,
-                                                       qtd->hw_token) >> 8)
-                                                               & 0x03) {
-                                               case 0:
-                                                       type = "out";
-                                                       continue;
-                                               case 1:
-                                                       type = "in";
-                                                       continue;
-                                               }
-                                       }
-
-                                       temp = scnprintf(next, size,
-                                               " (%c%d ep%d%s "
-                                               "[%d/%d] q%d p%d)",
-                                               speed_char (scratch),
-                                               scratch & 0x007f,
-                                               (scratch >> 8) & 0x000f, type,
-                                               p.qh->ps.usecs,
-                                               p.qh->ps.c_usecs,
-                                               temp,
-                                               0x7ff & (scratch >> 16));
+                                       temp = output_buf_tds_dir(next, ehci,
+                                               hw, p.qh, size);
 
                                        if (seen_count < DBG_SCHED_LIMIT)
                                                seen[seen_count++].qh = p.qh;