Re: [PATCH] ALSA: hda - hdmi create spdif ctl based on pcm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Takashi,

This patch is for DP MST audio, and for hda-mst branch.

Regards,
Libin


> -----Original Message-----
> From: libin.yang@xxxxxxxxxxxxxxx [mailto:libin.yang@xxxxxxxxxxxxxxx]
> Sent: Friday, January 29, 2016 1:53 PM
> To: alsa-devel@xxxxxxxxxxxxxxxx; tiwai@xxxxxxx
> Cc: Lin, Mengdong; Yang, Libin; Libin Yang
> Subject: [PATCH] ALSA: hda - hdmi create spdif ctl based on pcm
> 
> From: Libin Yang <libin.yang@xxxxxxxxxxxxxxx>
> 
> SPDIF ctl should be based on pcm. Each spdif ctl controls
> one pcm state.
> 
> This patch creates spdif based on pcm and no longer
> based on pin.
> 
> Signed-off-by: Libin Yang <libin.yang@xxxxxxxxxxxxxxx>
> ---
>  sound/pci/hda/patch_hdmi.c | 27 ++++++++++++++++++---------
>  1 file changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index dfb7c26..2f949fb 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -2255,6 +2255,7 @@ static int hdmi_pcm_close(struct
> hda_pcm_stream *hinfo,
>  		hinfo->nid = 0;
> 
>  		mutex_lock(&spec->pcm_lock);
> +		snd_hda_spdif_ctls_unassign(codec, pcm_idx);
>  		clear_bit(pcm_idx, &spec->pcm_in_use);
>  		pin_idx = hinfo_to_pin_index(codec, hinfo);
>  		if (spec->dyn_pcm_assign && pin_idx < 0) {
> @@ -2276,8 +2277,6 @@ static int hdmi_pcm_close(struct
> hda_pcm_stream *hinfo,
>  					    pinctl & ~PIN_OUT);
>  		}
> 
> -		snd_hda_spdif_ctls_unassign(codec, pcm_idx);
> -
>  		mutex_lock(&per_pin->lock);
>  		per_pin->chmap_set = false;
>  		memset(per_pin->chmap, 0, sizeof(per_pin->chmap));
> @@ -2560,19 +2559,29 @@ static int
> generic_hdmi_build_controls(struct hda_codec *codec)
>  		err = generic_hdmi_build_jack(codec, pcm_idx);
>  		if (err < 0)
>  			return err;
> -	}
> 
> -	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
> -		struct hdmi_spec_per_pin *per_pin = get_pin(spec,
> pin_idx);
> -
> -		err = snd_hda_create_dig_out_ctls(codec,
> +		/* create the spdif for each pcm
> +		 * pin will be bound when monitor is connected
> +		 */
> +		if (spec->dyn_pcm_assign)
> +			err = snd_hda_create_dig_out_ctls(codec,
> +					  0, spec->cvt_nids[0],
> +					  HDA_PCM_TYPE_HDMI);
> +		else {
> +			struct hdmi_spec_per_pin *per_pin =
> +				get_pin(spec, pcm_idx);
> +			err = snd_hda_create_dig_out_ctls(codec,
>  						  per_pin->pin_nid,
>  						  per_pin->mux_nids[0],
> 
> HDA_PCM_TYPE_HDMI);
> +		}
>  		if (err < 0)
>  			return err;
> -		/* pin number is the same with pcm number so far */
> -		snd_hda_spdif_ctls_unassign(codec, pin_idx);
> +		snd_hda_spdif_ctls_unassign(codec, pcm_idx);
> +	}
> +
> +	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
> +		struct hdmi_spec_per_pin *per_pin = get_pin(spec,
> pin_idx);
> 
>  		/* add control for ELD Bytes */
>  		err = hdmi_create_eld_ctl(codec, pin_idx,
> --
> 1.9.1

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux