Re: [Line6linux-devel] POD HD500x working
Status: Pre-Alpha
Brought to you by:
mgrabner
From: Hans P. M. <hm...@gm...> - 2017-06-10 03:05:35
|
Hi Andrej, I made the tests, - Removing LINE6_CAP_CONTROL disable playback in the unit, I can still capture but no sound come out of the unit. The "receive length failed (error -11)" disappear. Since Initialization is required for playback, the .ctrl_if is needed and thus the simple patch will only work in Kernel 4.9 and above. -Removing LINE6_CAP_IN_NEEDS_OUT has no effect, so it's not needed. We still have the "receive length failed (error -11)" error, any other ideas of how to solve it? Or is not necessary? Just of curiosity, is there any difference in the usb_device_id podhd_id_table[] if I use { LINE6_DEVICE(0x4159), .driver_info = LINE6_PODHD500X }, instead of: { LINE6_IF_NUM(0x4159, 0), .driver_info = LINE6_PODHD500X }, The current table is: /* table of devices that work with this driver */ static const struct usb_device_id podhd_id_table[] = { /* TODO: no need to alloc data interfaces when only audio is used */ { LINE6_DEVICE(0x5057), .driver_info = LINE6_PODHD300 }, { LINE6_DEVICE(0x5058), .driver_info = LINE6_PODHD400 }, { LINE6_IF_NUM(0x414D, 0), .driver_info = LINE6_PODHD500_0 }, { LINE6_IF_NUM(0x414D, 1), .driver_info = LINE6_PODHD500_1 }, { LINE6_IF_NUM(0x414A, 0), .driver_info = LINE6_PODX3 }, { LINE6_IF_NUM(0x414B, 0), .driver_info = LINE6_PODX3LIVE }, { LINE6_IF_NUM(0x4159, 0), .driver_info = LINE6_PODHD500X }, {} }; On Fri, Jun 9, 2017 at 11:50 AM, Andrej Kruták <de...@an...> wrote: > Ah yes, that one patch... I already forgot about it (and of course > didn't check the sources at the time of merge in 4.12 :)) Ok, but you > shouldn't need the ctrl_if thing if you only use the audio stuff. > > Regarding the maxpacket error, my prints the same - Line6 apparently > violates the USB specification (AFAIR bulk endpoints on HS USB 64 is > invalid maxsize (aka only valid for FullSpeed USB)...). In any case, > nothing to worry about... > > > -- > Greetings, > > Andrej > > > On Fri, Jun 9, 2017 at 4:42 PM, Hans Peter Möller <hm...@gm...> > wrote: > > Hi, > > I will thest droping those things and see what happened. > > What about the " config 1 interface 1 altsetting 0 bulk endpoint 0x1 has > > invalid maxpacket 64" ??? It has appear since the first time I plug my > pod > > with the stock kernel 4.4. > > > > in your kernel 4.12 the if_ctrl doesn't appear? How did they implemented > the > > x3 then? > > > > here is the podhd.c that come in my kernel > > https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/ > linux/+git/xenial/tree/sound/usb/line6/podhd.c?h=hwe-edge > > and this is the one from torvalds > > https://github.com/torvalds/linux/blob/master/sound/usb/line6/podhd.c > > > > both have the x3 implementation with the ctr_if (and mention you). > > > > > > > > On Fri, Jun 9, 2017 at 1:51 AM, Andrej Kruták <de...@an...> wrote: > >> > >> Hey, > >> > >> On Fri, Jun 9, 2017 at 5:35 AM, Hans Peter Möller <hm...@gm...> > >> wrote: > >> > Hi Andrej, > >> > good news!! > >> > I can capture and listen from my pod. > >> > > >> > >> Perfect! > >> > >> > >> > I compare the lsusb from de x3 and I found that it has the same > >> > alternative > >> > setting issue than the hd500x, which is different from hd300 (I > couldn't > >> > get > >> > one from h400 nor from h500). In x3 and 500x the altsetting is > different > >> > for > >> > audio than for data. > >> > Since X3 is included in kernel 4.9, I decided to go over kernel 4.9 > and > >> > use > >> > that code which also appear to be more updated than the one here. > >> > > >> > In podhd.c I copy the same configuration used for X3. The .ctr_if=1 is > >> > the > >> > difference from the others and it make the difference. This are the > >> > modifications I made: > >> > > >> > enum { > >> > LINE6_PODHD300, > >> > LINE6_PODHD400, > >> > LINE6_PODHD500_0, > >> > LINE6_PODHD500_1, > >> > LINE6_PODX3, > >> > LINE6_PODX3LIVE, > >> > LINE6_PODHD500X > >> > }; > >> > > >> > /* table of devices that work with this driver */ > >> > static const struct usb_device_id podhd_id_table[] = { > >> > /* TODO: no need to alloc data interfaces when only audio is used > */ > >> > { LINE6_DEVICE(0x5057), .driver_info = LINE6_PODHD300 }, > >> > { LINE6_DEVICE(0x5058), .driver_info = LINE6_PODHD400 }, > >> > { LINE6_IF_NUM(0x414D, 0), .driver_info = LINE6_PODHD500_0 }, > >> > { LINE6_IF_NUM(0x414D, 1), .driver_info = LINE6_PODHD500_1 }, > >> > { LINE6_IF_NUM(0x414A, 0), .driver_info = LINE6_PODX3 }, > >> > { LINE6_IF_NUM(0x414B, 0), .driver_info = LINE6_PODX3LIVE }, > >> > { LINE6_IF_NUM(0x4159, 0), .driver_info = LINE6_PODHD500X }, > >> > {} > >> > }; > >> > > >> > > >> > > >> > > >> > [LINE6_PODHD500X] = { > >> > .id = "PODHD500X", > >> > .name = "POD HD500x", > >> > .capabilities = LINE6_CAP_CONTROL > >> > | LINE6_CAP_PCM | LINE6_CAP_HWMON | > >> > LINE6_CAP_IN_NEEDS_OUT, > >> > .altsetting = 1, > >> > .ep_ctrl_r = 0x81, > >> > .ep_ctrl_w = 0x01, > >> > .ctrl_if = 1, > >> > .ep_audio_r = 0x86, > >> > .ep_audio_w = 0x02, > >> > }, > >> > > >> > > >> > I still get some errors/warning in dmesg, the maxpacket are the data > ep > >> > so > >> > that is data. The "receive length failed (error -11)" don't know what > it > >> > is, > >> > maybe initialization? Because it only appear this two times. > >> > > >> > Here is dmesg output: > >> > > >> > [ 4001.944114] usb 1-3: new high-speed USB device number 11 using > >> > ehci-pci > >> > [ 4002.063668] usb 1-3: config 1 interface 1 altsetting 0 bulk > endpoint > >> > 0x1 > >> > has invalid maxpacket 64 > >> > [ 4002.063677] usb 1-3: config 1 interface 1 altsetting 0 bulk > endpoint > >> > 0x81 > >> > has invalid maxpacket 64 > >> > [ 4002.064779] usb 1-3: New USB device found, idVendor=0e41, > >> > idProduct=4159 > >> > [ 4002.064785] usb 1-3: New USB device strings: Mfr=1, Product=2, > >> > SerialNumber=0 > >> > [ 4002.064790] usb 1-3: Product: POD HD500X > >> > [ 4002.064794] usb 1-3: Manufacturer: Line 6 > >> > [ 4002.067896] snd_usb_podhd 1-3:1.0: Line 6 POD HD500x found > >> > [ 4002.069846] snd_usb_podhd 1-3:1.0: Line 6 POD HD500x now attached > >> > [ 4002.577334] snd_usb_podhd 1-3:1.0: receive length failed (error > -11) > >> > [ 4002.579660] snd_usb_podhd 1-3:1.0: receive length failed (error > -11) > >> > > >> > >> I think this is caused by the device having different initial setup > >> requirements. But it also (most likely) means that it doesn't need any > >> setup. Thus drop the LIBE6_CAP_CONTROL thing, see if it still works. > >> > >> In addition, can you try also dropping LINE6_CAP_IN_NEEDS_OUT - and > >> check whether the stand-alone recording works? > >> > >> Lastly, I don't see any ctrl_if in the structure? Not in 4.0 ... > >> 4.12-rc kernels at least... > >> > >> > >> > I believe this should be added to the podhd.c delivered in the kernel > >> > but I > >> > dont know how to do that. > >> > > >> > >> Check linux/Documentation/process/submitting-patches.rst. In short - > >> just get inspired in the commit history of sound/usb/line6, create a > >> similar patch (git format-patch) and send it to alsa-devel > >> mailinglist. > >> > >> Alternatively, once you test the above, I can submit the patch on your > >> behalf too. > >> > >> > >> -- > >> Best regards, > >> > >> Andrej > > > > > |