提交 8ceb332d 编写于 作者: T Takashi Iwai

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: NTakashi Iwai <tiwai@suse.de>
上级 8b8d654b
...@@ -1364,26 +1364,22 @@ static int simple_playback_build_pcms(struct hda_codec *codec) ...@@ -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) ...@@ -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,
spec->cvts[i].cvt_nid,
spec->cvts[i].cvt_nid);
if (err < 0)
return err;
err = simple_hdmi_build_jack(codec, i);
if (err < 0)
return err;
}
return 0; err = snd_hda_create_spdif_out_ctls(codec,
spec->cvts[0].cvt_nid,
spec->cvts[0].cvt_nid);
if (err < 0)
return err;
return simple_hdmi_build_jack(codec, 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;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册