Thanks.
The board runs on Alsa 1.0.25 and a 3.4 kernel with the old endpoint
streaming model,
I'll try to bring it up with the current release.

2016-02-14 12:26 GMT+01:00 Clemens Ladisch <cladi...@googlemail.com>:

> I wrote:
> > P Z wrote:
> >> The distortion characteristics on arm changed slightly, which points to
> a firmware issue.
> >
> > I suspect that the DMA of the frequency feedback data is not handled
> correctly.
>
> Please try the patch below.
>
>
> Regards,
> Clemens
>
>
> --- a/sound/usb/card.h
> +++ b/sound/usb/card.h
> @@ -76,8 +76,6 @@ struct snd_usb_endpoint {
>         unsigned int nurbs;             /* # urbs */
>         unsigned long active_mask;      /* bitmask of active urbs */
>         unsigned long unlink_mask;      /* bitmask of unlinked urbs */
> -       char *syncbuf;                  /* sync buffer for all sync URBs */
> -       dma_addr_t sync_dma;            /* DMA address of syncbuf */
>
>         unsigned int pipe;              /* the data i/o pipe */
>         unsigned int freqn;             /* nominal sampling rate in fs/fps
> in Q16.16 format */
> diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
> index 7b1cb36..c9817ca 100644
> --- a/sound/usb/endpoint.c
> +++ b/sound/usb/endpoint.c
> @@ -593,11 +593,6 @@ static void release_urbs(struct snd_usb_endpoint *ep,
> int force)
>         for (i = 0; i < ep->nurbs; i++)
>                 release_urb_ctx(&ep->urb[i]);
>
> -       if (ep->syncbuf)
> -               usb_free_coherent(ep->chip->dev, SYNC_URBS * 4,
> -                                 ep->syncbuf, ep->sync_dma);
> -
> -       ep->syncbuf = NULL;
>         ep->nurbs = 0;
>  }
>
> @@ -789,22 +784,21 @@ static int sync_ep_set_params(struct
> snd_usb_endpoint *ep)
>  {
>         int i;
>
> -       ep->syncbuf = usb_alloc_coherent(ep->chip->dev, SYNC_URBS * 4,
> -                                        GFP_KERNEL, &ep->sync_dma);
> -       if (!ep->syncbuf)
> -               return -ENOMEM;
> -
>         for (i = 0; i < SYNC_URBS; i++) {
>                 struct snd_urb_ctx *u = &ep->urb[i];
>                 u->index = i;
>                 u->ep = ep;
>                 u->packets = 1;
> +               u->buffer_size = 4;
>                 u->urb = usb_alloc_urb(1, GFP_KERNEL);
>                 if (!u->urb)
>                         goto out_of_memory;
> -               u->urb->transfer_buffer = ep->syncbuf + i * 4;
> -               u->urb->transfer_dma = ep->sync_dma + i * 4;
> -               u->urb->transfer_buffer_length = 4;
> +               u->urb->transfer_buffer =
> +                       usb_alloc_coherent(ep->chip->dev, u->buffer_size,
> +                                          GFP_KERNEL,
> &u->urb->transfer_dma);
> +               if (!u->urb->transfer_buffer)
> +                       goto out_of_memory;
> +               u->urb->transfer_buffer_length = u->buffer_size;
>                 u->urb->pipe = ep->pipe;
>                 u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
>                 u->urb->number_of_packets = 1;
>
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to