• Takashi Iwai's avatar
    ALSA: hda - Support advanced power state controls · e6feb5d0
    Takashi Iwai authored
    This patch enables the finer power state control of each widget
    depending on the jack plug state and streaming state in addition to
    the existing power_down_unused power optimization.  The new feature is
    enabled only when codec->power_mgmt flag is set.
    
    Two new flags, pin_enabled and stream_enabled, are introduced in
    nid_path struct for marking the two individual power states: the pin
    plug/unplug and DAC/ADC stream, respectively.  They can be set
    statically in case they are static routes (e.g. some mixer paths),
    too.
    
    The power up and down events for each pin are triggered via the
    standard hda_jack table.  The call order is hard-coded, relying on the
    current implementation of jack event chain (a la FILO/stack order).
    
    One point to be dealt carefully is that DAC/ADC cannot be powered
    on/off while streaming.  They are pinned as long as the stream is
    running.  For controlling the power of DAC/ADC, a new patch_ops is
    added.  The generic parser provides the default callback for that.
    
    As of this patch, only IDT/Sigmatel codec driver enables the flag.
    The support on other codecs will follow.
    
    An assumption we made in this code is that the widget state (e.g. amp,
    pinctl, connections) remains after the widget power transition (not
    about FG power transition).  This is true for IDT codecs, at least.
    But if the widget state is lost at widget power transition, we'd need
    to implement additional code to sync the cached amp/verbs for the
    specific NID.
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    e6feb5d0
patch_sigmatel.c 136 KB