On Thu, Oct 22, 2020 at 06:09:48PM +0200, Takashi Iwai wrote:
On Thu, 22 Oct 2020 17:49:59 +0200, Dan Aloni wrote:
On Thu, Oct 22, 2020 at 02:57:56PM +0200, Takashi Iwai wrote:
Upon plugging or unplugging the headphone, the unitid of 11 matches the unit in `trx40_mobo_connector_map`, although two events are happening - two for plug and two for unplug. There's another event for '7', and changing the second item of `static const struct usbmix_connector_map` from 11 to 7 does not seem to affect it.
Well, then I'm afraid that it has yet another mapping of the units. You'd need to create the whole map from the topology, and rewrite the connector_map as well.
Would be helpful a USB trace from KVM, when running a Windows VM that successfully manages this device following USB redirection? I can produce this given instructions, if you have them handy.
The topology is found in lsusb -v output. It's the connection among units. More importantly, the maps only care about the certain units like input/output terminals and feature unit. You can look at those and correct the corresponding unit ids.
It shows 6 triplelets of input terminal, feature unit, and output terminal, and they are structured like this:
IT[7] -> FU[19] -> OT[13] Line-in USB Streaming IT[8] -> FU[20] -> OT[14] Rear Mic-In USB Streaming IT[9] -> FU[21] -> OT[15] Desktop Mic USB Streaming IT[10] -> FU[22] -> OT[16] Headphone Speaker IT[11] -> FU[23] -> OT[17] USB Streaming Headphone IT[12] -> FU[24] -> OT[18] USB Streaming SPDIF interface
Not sure how to make sense of that to a usbmix_name_map array and/or usbmix_connector_map array combination that works. My trials so far have not yielded a good result.
Could you show the patch you've tried? Fitting the above into two tables should be straightforward.
Well I have almost zero familiarity with the code base, so it's really not trivial to me. I still have gaps. Please explain:
- Maybe I conflated UnitId and TerminalId, when analyzing `lsusb -v`, are these both referring to units? - I assume bSourceId refers to another descriptor UnitId, is that right? - Out of the 18 possible entries in `usbmix_name_map` in this case how it is decided to omit certain input and output terminals? Should all feature units are necessarily described? - What is the purpose of `usbmix_connector_map` array, and how to decide to add entries to this array? Is it done relative to `usbmix_name_map` omissions? - Is there a tool that can better describe the topology based on `lsusb -v` output? - Seems that `mixer_maps.c` compensates for knowledge not obtained from `lsusb -v`, or all of it can be obtained?
Thanks.