[alsa-devel] [PATCH] ALSA: hda - hdmi: Fix missing ELD change event on plug/unplug

Takashi Iwai tiwai at suse.de
Mon Oct 20 07:58:48 CEST 2014


At Sun, 19 Oct 2014 19:25:19 +0300,
Anssi Hannula wrote:
> 
> The ELD ALSA control change event is sent by hdmi_present_sense() when
> eld_changed is true.
> 
> Currently, it is only true when the ELD buffer contents have been
> modified. However, the user-visible ELD controls also change to a
> zero-length value and back when eld_valid is unset/set, and no event is
> currently sent in such cases (such as when unplugging or replugging a
> sink).
> 
> Fix the code to always set eld_changed if eld_valid value is changed,
> and therefore to always send the change event when the user-visible
> value changes.
> 
> Signed-off-by: Anssi Hannula <anssi.hannula at iki.fi>
> Cc: David Henningsson <david.henningsson at canonical.com>
> Cc: <stable at vger.kernel.org> # 3.9+

Thanks, applied now.


Takashi


> ---
> 
>  sound/pci/hda/patch_hdmi.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index 39862e98551c..9dc9cf8c90e9 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -1583,19 +1583,22 @@ static bool hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
>  		}
>  	}
>  
> -	if (pin_eld->eld_valid && !eld->eld_valid) {
> -		update_eld = true;
> +	if (pin_eld->eld_valid != eld->eld_valid)
>  		eld_changed = true;
> -	}
> +
> +	if (pin_eld->eld_valid && !eld->eld_valid)
> +		update_eld = true;
> +
>  	if (update_eld) {
>  		bool old_eld_valid = pin_eld->eld_valid;
>  		pin_eld->eld_valid = eld->eld_valid;
> -		eld_changed = pin_eld->eld_size != eld->eld_size ||
> +		if (pin_eld->eld_size != eld->eld_size ||
>  			      memcmp(pin_eld->eld_buffer, eld->eld_buffer,
> -				     eld->eld_size) != 0;
> -		if (eld_changed)
> +				     eld->eld_size) != 0) {
>  			memcpy(pin_eld->eld_buffer, eld->eld_buffer,
>  			       eld->eld_size);
> +			eld_changed = true;
> +		}
>  		pin_eld->eld_size = eld->eld_size;
>  		pin_eld->info = eld->info;
>  
> -- 
> 1.8.4.5
> 


More information about the Alsa-devel mailing list