mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-02 02:34:05 +08:00
ALSA: hda - Remove loop from simple_hdmi*()
The simple_hdmi stuff is designed only for a single pin and a single converter (thus a single PCM stream), and no need for loops. Let's flatten the code. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
8b8d654b55
commit
8ceb332df4
@ -1364,26 +1364,22 @@ static int simple_playback_build_pcms(struct hda_codec *codec)
|
|||||||
{
|
{
|
||||||
struct hdmi_spec *spec = codec->spec;
|
struct hdmi_spec *spec = codec->spec;
|
||||||
struct hda_pcm *info = spec->pcm_rec;
|
struct hda_pcm *info = spec->pcm_rec;
|
||||||
int i;
|
unsigned int chans;
|
||||||
|
struct hda_pcm_stream *pstr;
|
||||||
|
|
||||||
codec->num_pcms = spec->num_cvts;
|
codec->num_pcms = 1;
|
||||||
codec->pcm_info = info;
|
codec->pcm_info = info;
|
||||||
|
|
||||||
for (i = 0; i < codec->num_pcms; i++, info++) {
|
chans = get_wcaps(codec, spec->cvts[0].cvt_nid);
|
||||||
unsigned int chans;
|
chans = get_wcaps_channels(chans);
|
||||||
struct hda_pcm_stream *pstr;
|
|
||||||
|
|
||||||
chans = get_wcaps(codec, spec->cvts[i].cvt_nid);
|
info->name = get_hdmi_pcm_name(0);
|
||||||
chans = get_wcaps_channels(chans);
|
info->pcm_type = HDA_PCM_TYPE_HDMI;
|
||||||
|
pstr = &info->stream[SNDRV_PCM_STREAM_PLAYBACK];
|
||||||
info->name = get_hdmi_pcm_name(i);
|
*pstr = spec->pcm_playback;
|
||||||
info->pcm_type = HDA_PCM_TYPE_HDMI;
|
pstr->nid = spec->cvts[0].cvt_nid;
|
||||||
pstr = &info->stream[SNDRV_PCM_STREAM_PLAYBACK];
|
if (pstr->channels_max <= 2 && chans && chans <= 16)
|
||||||
*pstr = spec->pcm_playback;
|
pstr->channels_max = chans;
|
||||||
pstr->nid = spec->cvts[i].cvt_nid;
|
|
||||||
if (pstr->channels_max <= 2 && chans && chans <= 16)
|
|
||||||
pstr->channels_max = chans;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1405,38 +1401,27 @@ static int simple_playback_build_controls(struct hda_codec *codec)
|
|||||||
{
|
{
|
||||||
struct hdmi_spec *spec = codec->spec;
|
struct hdmi_spec *spec = codec->spec;
|
||||||
int err;
|
int err;
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < codec->num_pcms; i++) {
|
err = snd_hda_create_spdif_out_ctls(codec,
|
||||||
err = snd_hda_create_spdif_out_ctls(codec,
|
spec->cvts[0].cvt_nid,
|
||||||
spec->cvts[i].cvt_nid,
|
spec->cvts[0].cvt_nid);
|
||||||
spec->cvts[i].cvt_nid);
|
if (err < 0)
|
||||||
if (err < 0)
|
return err;
|
||||||
return err;
|
return simple_hdmi_build_jack(codec, 0);
|
||||||
err = simple_hdmi_build_jack(codec, i);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int simple_playback_init(struct hda_codec *codec)
|
static int simple_playback_init(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct hdmi_spec *spec = codec->spec;
|
struct hdmi_spec *spec = codec->spec;
|
||||||
int i;
|
hda_nid_t pin = spec->pins[0].pin_nid;
|
||||||
|
|
||||||
for (i = 0; i < spec->num_pins; i++) {
|
snd_hda_codec_write(codec, pin, 0,
|
||||||
hda_nid_t pin = spec->pins[i].pin_nid;
|
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
|
||||||
snd_hda_codec_write(codec, pin, 0,
|
/* some codecs require to unmute the pin */
|
||||||
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
|
if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP)
|
||||||
/* some codecs require to unmute the pin */
|
snd_hda_codec_write(codec, pin, 0, AC_VERB_SET_AMP_GAIN_MUTE,
|
||||||
if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP)
|
AMP_OUT_UNMUTE);
|
||||||
snd_hda_codec_write(codec, pin, 0,
|
snd_hda_jack_detect_enable(codec, pin, pin);
|
||||||
AC_VERB_SET_AMP_GAIN_MUTE,
|
|
||||||
AMP_OUT_UNMUTE);
|
|
||||||
snd_hda_jack_detect_enable(codec, pin, pin);
|
|
||||||
}
|
|
||||||
snd_hda_jack_report_sync(codec);
|
snd_hda_jack_report_sync(codec);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user