iabdalkader - 2015-03-28

It seems the wrong ep_offset is set, I narrowed down this to:

static u32 musb_flat_ep_offset(u8 epnum, u16 offset)
{
     return 0x100 + (0x10 * epnum) + offset;
}

It should be

return (USB_OFFSET(USB_EP_NI0_TXMAXP) + (0x40 * (epnum)) + (offset));

I can set ep_offset in musb_platform_ops but it gets overwritten in musb_init_controller:

/* At least tusb6010 has it's own offsets.. */
if (musb->ops->ep_offset)
    musb->io.ep_offset = musb->ops->ep_offset;
if (musb->ops->ep_select)
    musb->io.ep_select = musb->ops->ep_select;

/* ..and some devices use indexed offset or flat offset */
if (musb->io.quirks & MUSB_INDEXED_EP) {
    musb->io.ep_offset = musb_indexed_ep_offset;
    musb->io.ep_select = musb_indexed_ep_select;
} else {
    musb->io.ep_offset = musb_flat_ep_offset;
    musb->io.ep_select = musb_flat_ep_select;
}

Any advice ?

 

Last edit: iabdalkader 2015-03-28