Skip to content
  • Takashi Iwai's avatar
    ALSA: hda - Add dock speaker support for ASUS TX300 · 7bba2157
    Takashi Iwai authored
    ASUS TX300 has a built-in speaker in the tablet part and in the dock
    part, and the tablet speaker is supposed to be unused while the
    machine is docked.  The current HD-audio driver, however, doesn't
    support the dock speaker, partly because BIOS doesn't set up the pin
    for the corresponding output.
    
    But, not only the missing pin config, also the missing unsol event
    handling is another issue.  Otherwise the automatic switching via
    dock/undock won't work.
    
    Through debugging sessions, we found out that the dock speaker pin is
    NID 0x1b, and it generates an unsol event at docking/undocking, the
    docking state can be inquired via the normal pin detection verb.
    Also, it's turned out that GPIO 2 is needed as an amp.  So, all
    materials are ready to cook.
    
    This patch provides the basic dock speaker support with TX300:
    - The dock speaker is turned on/off via "Dock Speaker" mixer mute.
    - The dock speaker is automatically muted when docked.  This is
      independently from the mixer mute switch, just like the headphone
      auto-mute function.
    
    The implementation is a bit tricky.  Since we want to handle it as a
    secondary speaker, we set it up a pin as a speaker with a jack
    detection.  Then, the fixup function registers the own unsol callback
    for this pin because the standard automute can't handle the thing like
    a "speaker jack".  In the own automute hook, we apply the mute of the
    tablet speaker in addition by checking the dock state.
    
    Also, the speaker control names are slightly shuffled because the
    generic parser doesn't give good names but blindly assumes a bass
    speaker as a secondary speaker.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=59791
    
    
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    7bba2157