May I ask what the status of isochronous transfer support is
in the lantiq hcd driver? It was working in Attitude Adjustment
(at least my usb sound card worked anyway).
But a lot of changes were made to the driver between AA and BB,
including new code related to isosynchronous transfers, which are
now disabled by default (CONFIG_USB_HOST_IFX_WITH_ISO=n).
Someone else has filed a bug about this:

https://dev.openwrt.org/ticket/15364

I tried building a BB image with isochronous transfers enabled,
but ifxhcd_intr.c failed to compile. The errors look like the
sorts of careless syntax errors which most people make when
writing a first version of a new piece of code, and my guess is
that this bit of code has have never in fact been compiled, let
alone tested. I have managed to get it to compile by making
various plausible corrections, but I don't yet have any sound.
Before I investigate further can you tell me whether it is
supposed to be working?

(Below, for reference, are the corrections I have made. But this
is just an initial attempt, certainly not a patch to be merged.)

Many thanks,

Ben Mulvihill

--- a/package/kernel/lantiq/ltq-hcd/src/ifxhcd_intr.c   2014-11-10 
00:31:52.744641266 +0100
+++ b/package/kernel/lantiq/ltq-hcd/src/ifxhcd_intr.c   2014-11-10 
00:25:03.321242453 +0100
@@ -103,6 +103,10 @@
                ifxusb_mreg(&((_hc_regs_)->hcintmsk),0, hcintmsk.d32); \
        } while (0)
 
+
+static
+void init_hc(ifxhcd_epqh_t *_epqh);
+
 /*
  * Save the starting data toggle for the next transfer. The data toggle is
  * saved in the QH for non-control transfers and it's saved in the QTD for
@@ -4089,13 +4093,13 @@ void init_hc(ifxhcd_epqh_t *_epqh)
                                ifxhc->isoc_xact_pos = 
IFXUSB_HCSPLIT_XACTPOS_ALL;
                        #endif
 
-                       _epqh->isoc_frame_index=0;
+                       urbd->isoc_frame_index=0;
                        _epqh->isoc_now=0;
                        _epqh->isoc_start_frame=0;
-                       if(_urb->transfer_flags && URB_ISO_ASAP)
+                       if(urb->transfer_flags && URB_ISO_ASAP)
                                _epqh->isoc_now=1;
                        else
-                               _epqh->isoc_start_frame=_urb->start_frame;
+                               _epqh->isoc_start_frame=urb->start_frame;
                        #ifdef __EN_ISOC_SPLIT__
                                _epqh->isoc_split_pos   =0;
                                _epqh->isoc_split_offset=0;
@@ -4296,8 +4300,8 @@ void select_eps_sub(ifxhcd_hcd_t *_ifxhc
                                                                
list_add_tail(&epqh->ql, &_ifxhcd->epqh_list_isoc);
                                                                init_hc(epqh);
                                                                
epqh->phase=EPQH_ACTIVE;
-                                                               
urbd->phase==URBD_ACTIVE;
-                                                               
epqh->hc.phase=HC_WAITING;
+                                                               
urbd->phase=URBD_ACTIVE;
+                                                               
epqh->hc->phase=HC_WAITING;
                                                                
ifxhcd_hc_start(_ifxhcd, epqh->hc);
                                                        }
                                                        break;
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to