• Takashi Iwai's avatar
    ALSA: hda/hdmi: Fix keep_power assignment for non-component devices · c2c3657f
    Takashi Iwai authored
    It's been reported that, when neither nouveau nor Nvidia graphics
    driver is used, the screen starts flickering.  And, after comparing
    between the working case (stable 4.4.x) and the broken case, it turned
    out that the problem comes from the audio component binding.  The
    Nvidia and AMD audio binding code clears the bus->keep_power flag
    whenever snd_hdac_acomp_init() succeeds.  But this doesn't mean that
    the component is actually bound, but it merely indicates that it's
    ready for binding.  So, when both nouveau and Nvidia are blacklisted
    or not ready, the driver keeps running without the audio component but
    also with bus->keep_power = false.  This made the driver runtime PM
    kicked in and powering down when unused, which results in flickering
    in the graphics side, as it seems.
    
    For fixing the bug, this patch moves the bus->keep_power flag change
    into generic_acomp_notifier_set() that is the function called from the
    master_bind callback of component ops; i.e. it's guaranteed that the
    binding succeeded.
    
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=208609
    Fixes: 5a858e79 ("ALSA: hda - Disable audio component for legacy Nvidia HDMI codecs")
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20200728082033.23933-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    c2c3657f
patch_hdmi.c 113 KB