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

Takashi Iwai tiwai at suse.de
Fri Jan 29 07:38:23 CET 2016


On Fri, 29 Jan 2016 06:59:47 +0100,
Yang, Libin wrote:
> 
> Hi Takashi,
> 
> This patch is for DP MST audio, and for hda-mst branch.

OK, applied now.  Also, I rebased topic/hda-mst branch on top of
4.5-rc1 (so that it's now building cleanly).


thanks,

Takashi

> 
> Regards,
> Libin
> 
> 
> > -----Original Message-----
> > From: libin.yang at linux.intel.com [mailto:libin.yang at linux.intel.com]
> > Sent: Friday, January 29, 2016 1:53 PM
> > To: alsa-devel at alsa-project.org; tiwai at suse.de
> > Cc: Lin, Mengdong; Yang, Libin; Libin Yang
> > Subject: [PATCH] ALSA: hda - hdmi create spdif ctl based on pcm
> > 
> > From: Libin Yang <libin.yang at linux.intel.com>
> > 
> > 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 at linux.intel.com>
> > ---
> >  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
> 


More information about the Alsa-devel mailing list