diff mbox series

on-board sound on ASUS TRX-40

Message ID 20201022081746.GA1118484@gmail.com
State New, archived
Headers show
Series on-board sound on ASUS TRX-40 | expand

Commit Message

Dan Aloni Oct. 22, 2020, 8:17 a.m. UTC
Hi,

The on-board earphone jack does not seem to work on an ASUS TRX-40
board. Here's the alsa-info.sh output:

http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c

Tried coding up the patch below, but it _does not_ fix the problem. It
does shows the earphone as 'plugged' though. Verified that it's not an
hardware issue via Windows.

Please instruct on how to debug this further.

Thanks!

Comments

Dan Aloni Oct. 22, 2020, 10:18 a.m. UTC | #1
On Thu, Oct 22, 2020 at 11:14:03AM +0200, Takashi Iwai wrote:
> On Thu, 22 Oct 2020 10:17:46 +0200,
> Dan Aloni wrote:
> > 
> > Hi,
> > 
> > The on-board earphone jack does not seem to work on an ASUS TRX-40
> > board. Here's the alsa-info.sh output:
> > 
> > http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c
> > 
> > Tried coding up the patch below, but it _does not_ fix the problem. It
> > does shows the earphone as 'plugged' though. Verified that it's not an
> > hardware issue via Windows.
> > 
> > Please instruct on how to debug this further.
> 
> Did you try to add connector_map, too?

Yes, and it did not help. Anything else I can try?
Takashi Iwai Oct. 22, 2020, 10:24 a.m. UTC | #2
On Thu, 22 Oct 2020 12:18:52 +0200,
Dan Aloni wrote:
> 
> On Thu, Oct 22, 2020 at 11:14:03AM +0200, Takashi Iwai wrote:
> > On Thu, 22 Oct 2020 10:17:46 +0200,
> > Dan Aloni wrote:
> > > 
> > > Hi,
> > > 
> > > The on-board earphone jack does not seem to work on an ASUS TRX-40
> > > board. Here's the alsa-info.sh output:
> > > 
> > > http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c
> > > 
> > > Tried coding up the patch below, but it _does not_ fix the problem. It
> > > does shows the earphone as 'plugged' though. Verified that it's not an
> > > hardware issue via Windows.
> > > 
> > > Please instruct on how to debug this further.
> > 
> > Did you try to add connector_map, too?
> 
> Yes, and it did not help. Anything else I can try?

Well, you need to figure out via trial and error.
It should receive some event processed in
snd_usb_mixer_interrupt_v2(), and you can check which widget is
involved, at least.


Takashi
Dan Aloni Oct. 22, 2020, 12:33 p.m. UTC | #3
On Thu, Oct 22, 2020 at 12:24:31PM +0200, Takashi Iwai wrote:
> On Thu, 22 Oct 2020 12:18:52 +0200,
> Dan Aloni wrote:
> > 
> > On Thu, Oct 22, 2020 at 11:14:03AM +0200, Takashi Iwai wrote:
> > > On Thu, 22 Oct 2020 10:17:46 +0200,
> > > Dan Aloni wrote:
> > > > 
> > > > Hi,
> > > > 
> > > > The on-board earphone jack does not seem to work on an ASUS TRX-40
> > > > board. Here's the alsa-info.sh output:
> > > > 
> > > > http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c
> > > > 
> > > > Tried coding up the patch below, but it _does not_ fix the problem. It
> > > > does shows the earphone as 'plugged' though. Verified that it's not an
> > > > hardware issue via Windows.
> > > > 
> > > > Please instruct on how to debug this further.
> > > 
> > > Did you try to add connector_map, too?
> > 
> > Yes, and it did not help. Anything else I can try?
> 
> Well, you need to figure out via trial and error.
> It should receive some event processed in
> snd_usb_mixer_interrupt_v2(), and you can check which widget is
> involved, at least.

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.

[12204.873896] snd_usb_mixer_interrupt, ustatus = 0
[12204.873908] snd_usb_mixer_interrupt_v2: attribute=1 unitid=7, control=2, channel=2
[12204.889894] snd_usb_mixer_interrupt, ustatus = 0
[12204.889902] snd_usb_mixer_interrupt_v2: attribute=1 unitid=11, control=2, channel=2
[12206.233879] snd_usb_mixer_interrupt, ustatus = 0
[12206.233889] snd_usb_mixer_interrupt_v2: attribute=1 unitid=7, control=2, channel=2
[12206.249877] snd_usb_mixer_interrupt, ustatus = 0
[12206.249885] snd_usb_mixer_interrupt_v2: attribute=1 unitid=11, control=2, channel=2
Takashi Iwai Oct. 22, 2020, 12:36 p.m. UTC | #4
On Thu, 22 Oct 2020 14:33:47 +0200,
Dan Aloni wrote:
> 
> On Thu, Oct 22, 2020 at 12:24:31PM +0200, Takashi Iwai wrote:
> > On Thu, 22 Oct 2020 12:18:52 +0200,
> > Dan Aloni wrote:
> > > 
> > > On Thu, Oct 22, 2020 at 11:14:03AM +0200, Takashi Iwai wrote:
> > > > On Thu, 22 Oct 2020 10:17:46 +0200,
> > > > Dan Aloni wrote:
> > > > > 
> > > > > Hi,
> > > > > 
> > > > > The on-board earphone jack does not seem to work on an ASUS TRX-40
> > > > > board. Here's the alsa-info.sh output:
> > > > > 
> > > > > http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c
> > > > > 
> > > > > Tried coding up the patch below, but it _does not_ fix the problem. It
> > > > > does shows the earphone as 'plugged' though. Verified that it's not an
> > > > > hardware issue via Windows.
> > > > > 
> > > > > Please instruct on how to debug this further.
> > > > 
> > > > Did you try to add connector_map, too?
> > > 
> > > Yes, and it did not help. Anything else I can try?
> > 
> > Well, you need to figure out via trial and error.
> > It should receive some event processed in
> > snd_usb_mixer_interrupt_v2(), and you can check which widget is
> > involved, at least.
> 
> 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.


Takashi
Dan Aloni Oct. 22, 2020, 12:51 p.m. UTC | #5
On Thu, Oct 22, 2020 at 02:36:16PM +0200, Takashi Iwai wrote:
> On Thu, 22 Oct 2020 14:33:47 +0200,
> Dan Aloni wrote:
> > 
> > On Thu, Oct 22, 2020 at 12:24:31PM +0200, Takashi Iwai wrote:
> > > On Thu, 22 Oct 2020 12:18:52 +0200,
> > > Dan Aloni wrote:
> > > > 
> > > > On Thu, Oct 22, 2020 at 11:14:03AM +0200, Takashi Iwai wrote:
> > > > > On Thu, 22 Oct 2020 10:17:46 +0200,
> > > > > Dan Aloni wrote:
> > > > > > 
> > > > > > Hi,
> > > > > > 
> > > > > > The on-board earphone jack does not seem to work on an ASUS TRX-40
> > > > > > board. Here's the alsa-info.sh output:
> > > > > > 
> > > > > > http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c
> > > > > > 
> > > > > > Tried coding up the patch below, but it _does not_ fix the problem. It
> > > > > > does shows the earphone as 'plugged' though. Verified that it's not an
> > > > > > hardware issue via Windows.
> > > > > > 
> > > > > > Please instruct on how to debug this further.
> > > > > 
> > > > > Did you try to add connector_map, too?
> > > > 
> > > > Yes, and it did not help. Anything else I can try?
> > > 
> > > Well, you need to figure out via trial and error.
> > > It should receive some event processed in
> > > snd_usb_mixer_interrupt_v2(), and you can check which widget is
> > > involved, at least.
> > 
> > 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.
Takashi Iwai Oct. 22, 2020, 12:57 p.m. UTC | #6
On Thu, 22 Oct 2020 14:51:00 +0200,
Dan Aloni wrote:
> 
> On Thu, Oct 22, 2020 at 02:36:16PM +0200, Takashi Iwai wrote:
> > On Thu, 22 Oct 2020 14:33:47 +0200,
> > Dan Aloni wrote:
> > > 
> > > On Thu, Oct 22, 2020 at 12:24:31PM +0200, Takashi Iwai wrote:
> > > > On Thu, 22 Oct 2020 12:18:52 +0200,
> > > > Dan Aloni wrote:
> > > > > 
> > > > > On Thu, Oct 22, 2020 at 11:14:03AM +0200, Takashi Iwai wrote:
> > > > > > On Thu, 22 Oct 2020 10:17:46 +0200,
> > > > > > Dan Aloni wrote:
> > > > > > > 
> > > > > > > Hi,
> > > > > > > 
> > > > > > > The on-board earphone jack does not seem to work on an ASUS TRX-40
> > > > > > > board. Here's the alsa-info.sh output:
> > > > > > > 
> > > > > > > http://alsa-project.org/db/?f=7a94c1b1eec4b2e623c75770364ec43c33d6c95c
> > > > > > > 
> > > > > > > Tried coding up the patch below, but it _does not_ fix the problem. It
> > > > > > > does shows the earphone as 'plugged' though. Verified that it's not an
> > > > > > > hardware issue via Windows.
> > > > > > > 
> > > > > > > Please instruct on how to debug this further.
> > > > > > 
> > > > > > Did you try to add connector_map, too?
> > > > > 
> > > > > Yes, and it did not help. Anything else I can try?
> > > > 
> > > > Well, you need to figure out via trial and error.
> > > > It should receive some event processed in
> > > > snd_usb_mixer_interrupt_v2(), and you can check which widget is
> > > > involved, at least.
> > > 
> > > 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.


Takashi
Dan Aloni Oct. 22, 2020, 3:49 p.m. UTC | #7
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.
Takashi Iwai Oct. 22, 2020, 4:09 p.m. UTC | #8
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.


thanks,

Takashi
Dan Aloni Oct. 22, 2020, 6:08 p.m. UTC | #9
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.
diff mbox series

Patch

diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
index 9af7aa93f6fa..ab0f036f385e 100644
--- a/sound/usb/mixer_maps.c
+++ b/sound/usb/mixer_maps.c
@@ -568,6 +568,10 @@  static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
                .map = trx40_mobo_map,
                .connector_map = trx40_mobo_connector_map,
        },
+       {       /* ASUS TRX40-PRO */
+               .id = USB_ID(0x0b05, 0x1918),
+               .map = trx40_mobo_map,
+       },
        {       /* Asrock TRX40 Creator */
                .id = USB_ID(0x26ce, 0x0a01),
                .map = trx40_mobo_map,