forked from Minki/linux
ALSA: hda - Unify PCM assignments in patch_via.c
Unify PCM streams for all codecs by assigning the NID dynamically. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
57307bf24a
commit
9af7421091
@ -1222,6 +1222,17 @@ static int via_playback_pcm_open(struct hda_pcm_stream *hinfo,
|
|||||||
hinfo);
|
hinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int via_playback_pcm_close(struct hda_pcm_stream *hinfo,
|
||||||
|
struct hda_codec *codec,
|
||||||
|
struct snd_pcm_substream *substream)
|
||||||
|
{
|
||||||
|
int idle = substream->pstr->substream_opened == 1
|
||||||
|
&& substream->ref_count == 0;
|
||||||
|
|
||||||
|
analog_low_current_mode(codec, idle);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void playback_multi_pcm_prep_0(struct hda_codec *codec,
|
static void playback_multi_pcm_prep_0(struct hda_codec *codec,
|
||||||
unsigned int stream_tag,
|
unsigned int stream_tag,
|
||||||
unsigned int format,
|
unsigned int format,
|
||||||
@ -1419,23 +1430,24 @@ static int via_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708_pcm_analog_playback = {
|
static const struct hda_pcm_stream via_pcm_analog_playback = {
|
||||||
.substreams = 2,
|
.substreams = 2, /* will be changed in via_build_pcms() */
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 8,
|
.channels_max = 8,
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
/* NID is set in via_build_pcms */
|
||||||
.ops = {
|
.ops = {
|
||||||
.open = via_playback_pcm_open,
|
.open = via_playback_pcm_open,
|
||||||
|
.close = via_playback_pcm_close,
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
.prepare = via_playback_multi_pcm_prepare,
|
||||||
.cleanup = via_playback_multi_pcm_cleanup
|
.cleanup = via_playback_multi_pcm_cleanup
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708_pcm_analog_s16_playback = {
|
static const struct hda_pcm_stream vt1708_pcm_analog_s16_playback = {
|
||||||
.substreams = 2,
|
.substreams = 2, /* will be changed in via_build_pcms() */
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 8,
|
.channels_max = 8,
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
/* NID is set in via_build_pcms */
|
||||||
/* We got noisy outputs on the right channel on VT1708 when
|
/* We got noisy outputs on the right channel on VT1708 when
|
||||||
* 24bit samples are used. Until any workaround is found,
|
* 24bit samples are used. Until any workaround is found,
|
||||||
* disable the 24bit format, so far.
|
* disable the 24bit format, so far.
|
||||||
@ -1443,23 +1455,26 @@ static const struct hda_pcm_stream vt1708_pcm_analog_s16_playback = {
|
|||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.ops = {
|
.ops = {
|
||||||
.open = via_playback_pcm_open,
|
.open = via_playback_pcm_open,
|
||||||
|
.close = via_playback_pcm_close,
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
.prepare = via_playback_multi_pcm_prepare,
|
||||||
.cleanup = via_playback_multi_pcm_cleanup
|
.cleanup = via_playback_multi_pcm_cleanup
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708_pcm_analog_capture = {
|
static const struct hda_pcm_stream via_pcm_analog_capture = {
|
||||||
.substreams = 2,
|
.substreams = 2, /* will be changed in via_build_pcms() */
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.nid = 0x15, /* NID to query formats and rates */
|
/* NID is set in via_build_pcms */
|
||||||
.ops = {
|
.ops = {
|
||||||
|
.open = via_playback_pcm_open,
|
||||||
|
.close = via_playback_pcm_close,
|
||||||
.prepare = via_capture_pcm_prepare,
|
.prepare = via_capture_pcm_prepare,
|
||||||
.cleanup = via_capture_pcm_cleanup
|
.cleanup = via_capture_pcm_cleanup
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708_pcm_digital_playback = {
|
static const struct hda_pcm_stream via_pcm_digital_playback = {
|
||||||
.substreams = 1,
|
.substreams = 1,
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
@ -1472,7 +1487,7 @@ static const struct hda_pcm_stream vt1708_pcm_digital_playback = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708_pcm_digital_capture = {
|
static const struct hda_pcm_stream via_pcm_digital_capture = {
|
||||||
.substreams = 1,
|
.substreams = 1,
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
@ -1553,17 +1568,25 @@ static int via_build_pcms(struct hda_codec *codec)
|
|||||||
snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog),
|
snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog),
|
||||||
"%s Analog", codec->chip_name);
|
"%s Analog", codec->chip_name);
|
||||||
info->name = spec->stream_name_analog;
|
info->name = spec->stream_name_analog;
|
||||||
|
|
||||||
|
if (!spec->stream_analog_playback)
|
||||||
|
spec->stream_analog_playback = &via_pcm_analog_playback;
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
|
||||||
*(spec->stream_analog_playback);
|
*spec->stream_analog_playback;
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
|
||||||
spec->multiout.dac_nids[0];
|
spec->multiout.dac_nids[0];
|
||||||
if (!spec->multiout.hp_nid)
|
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams = 1;
|
|
||||||
info->stream[SNDRV_PCM_STREAM_CAPTURE] = *(spec->stream_analog_capture);
|
|
||||||
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
|
|
||||||
|
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
|
||||||
spec->multiout.max_channels;
|
spec->multiout.max_channels;
|
||||||
|
if (!spec->multiout.hp_nid)
|
||||||
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams = 1;
|
||||||
|
|
||||||
|
if (!spec->stream_analog_capture)
|
||||||
|
spec->stream_analog_capture = &via_pcm_analog_capture;
|
||||||
|
info->stream[SNDRV_PCM_STREAM_CAPTURE] =
|
||||||
|
*spec->stream_analog_capture;
|
||||||
|
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
|
||||||
|
info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
|
||||||
|
spec->num_adc_nids;
|
||||||
|
|
||||||
if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
|
if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
|
||||||
codec->num_pcms++;
|
codec->num_pcms++;
|
||||||
@ -1574,14 +1597,20 @@ static int via_build_pcms(struct hda_codec *codec)
|
|||||||
info->name = spec->stream_name_digital;
|
info->name = spec->stream_name_digital;
|
||||||
info->pcm_type = HDA_PCM_TYPE_SPDIF;
|
info->pcm_type = HDA_PCM_TYPE_SPDIF;
|
||||||
if (spec->multiout.dig_out_nid) {
|
if (spec->multiout.dig_out_nid) {
|
||||||
|
if (!spec->stream_digital_playback)
|
||||||
|
spec->stream_digital_playback =
|
||||||
|
&via_pcm_digital_playback;
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
|
||||||
*(spec->stream_digital_playback);
|
*spec->stream_digital_playback;
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
|
||||||
spec->multiout.dig_out_nid;
|
spec->multiout.dig_out_nid;
|
||||||
}
|
}
|
||||||
if (spec->dig_in_nid) {
|
if (spec->dig_in_nid) {
|
||||||
|
if (!spec->stream_digital_capture)
|
||||||
|
spec->stream_digital_capture =
|
||||||
|
&via_pcm_digital_capture;
|
||||||
info->stream[SNDRV_PCM_STREAM_CAPTURE] =
|
info->stream[SNDRV_PCM_STREAM_CAPTURE] =
|
||||||
*(spec->stream_digital_capture);
|
*spec->stream_digital_capture;
|
||||||
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
|
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
|
||||||
spec->dig_in_nid;
|
spec->dig_in_nid;
|
||||||
}
|
}
|
||||||
@ -2357,14 +2386,9 @@ static int patch_vt1708(struct hda_codec *codec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1708_pcm_analog_playback;
|
|
||||||
/* disable 32bit format on VT1708 */
|
/* disable 32bit format on VT1708 */
|
||||||
if (codec->vendor_id == 0x11061708)
|
if (codec->vendor_id == 0x11061708)
|
||||||
spec->stream_analog_playback = &vt1708_pcm_analog_s16_playback;
|
spec->stream_analog_playback = &vt1708_pcm_analog_s16_playback;
|
||||||
spec->stream_analog_capture = &vt1708_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1708_pcm_digital_playback;
|
|
||||||
spec->stream_digital_capture = &vt1708_pcm_digital_capture;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
spec->mixers[spec->num_mixers] = vt1708_capture_mixer;
|
spec->mixers[spec->num_mixers] = vt1708_capture_mixer;
|
||||||
@ -2453,58 +2477,6 @@ static const struct hda_verb vt1709_10ch_volume_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1709_10ch_pcm_analog_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 10,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1709_6ch_pcm_analog_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 6,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1709_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x14, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1709_pcm_digital_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1709_pcm_digital_capture = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt1709_parse_auto_config(struct hda_codec *codec)
|
static int vt1709_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -2586,12 +2558,6 @@ static int patch_vt1709_10ch(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1709_10ch_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1709_10ch_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1709_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1709_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1709_10ch_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1709_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1709_pcm_digital_playback;
|
|
||||||
spec->stream_digital_capture = &vt1709_pcm_digital_capture;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
spec->mixers[spec->num_mixers] = vt1709_capture_mixer;
|
spec->mixers[spec->num_mixers] = vt1709_capture_mixer;
|
||||||
spec->num_mixers++;
|
spec->num_mixers++;
|
||||||
@ -2674,12 +2640,6 @@ static int patch_vt1709_6ch(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1709_6ch_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1709_6ch_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1709_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1709_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1709_6ch_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1709_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1709_pcm_digital_playback;
|
|
||||||
spec->stream_digital_capture = &vt1709_pcm_digital_capture;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
spec->mixers[spec->num_mixers] = vt1709_capture_mixer;
|
spec->mixers[spec->num_mixers] = vt1709_capture_mixer;
|
||||||
spec->num_mixers++;
|
spec->num_mixers++;
|
||||||
@ -2801,74 +2761,6 @@ static const struct hda_verb vt1708B_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static int via_pcm_open_close(struct hda_pcm_stream *hinfo,
|
|
||||||
struct hda_codec *codec,
|
|
||||||
struct snd_pcm_substream *substream)
|
|
||||||
{
|
|
||||||
int idle = substream->pstr->substream_opened == 1
|
|
||||||
&& substream->ref_count == 0;
|
|
||||||
|
|
||||||
analog_low_current_mode(codec, idle);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708B_8ch_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 8,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708B_4ch_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 4,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708B_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x13, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708B_pcm_digital_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708B_pcm_digital_capture = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt1708B_parse_auto_config(struct hda_codec *codec)
|
static int vt1708B_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -3034,12 +2926,6 @@ static int patch_vt1708B_8ch(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1708B_8ch_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1708B_8ch_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1708B_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1708B_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1708B_8ch_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1708B_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1708B_pcm_digital_playback;
|
|
||||||
spec->stream_digital_capture = &vt1708B_pcm_digital_capture;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
spec->mixers[spec->num_mixers] = vt1708B_capture_mixer;
|
spec->mixers[spec->num_mixers] = vt1708B_capture_mixer;
|
||||||
spec->num_mixers++;
|
spec->num_mixers++;
|
||||||
@ -3081,12 +2967,6 @@ static int patch_vt1708B_4ch(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1708B_4ch_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1708B_4ch_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1708B_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1708B_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1708B_4ch_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1708B_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1708B_pcm_digital_playback;
|
|
||||||
spec->stream_digital_capture = &vt1708B_pcm_digital_capture;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
spec->mixers[spec->num_mixers] = vt1708B_capture_mixer;
|
spec->mixers[spec->num_mixers] = vt1708B_capture_mixer;
|
||||||
spec->num_mixers++;
|
spec->num_mixers++;
|
||||||
@ -3182,58 +3062,6 @@ static const struct hda_verb vt1705_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708S_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 8,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1705_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 6,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708S_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x13, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1708S_pcm_digital_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
/* fill out digital output widgets; one for master and one for slave outputs */
|
/* fill out digital output widgets; one for master and one for slave outputs */
|
||||||
static void fill_dig_outs(struct hda_codec *codec)
|
static void fill_dig_outs(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
@ -3352,14 +3180,6 @@ static int patch_vt1708S(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] =
|
spec->init_verbs[spec->num_iverbs++] =
|
||||||
vt1708S_uniwill_init_verbs;
|
vt1708S_uniwill_init_verbs;
|
||||||
|
|
||||||
if (codec->vendor_id == 0x11064397)
|
|
||||||
spec->stream_analog_playback = &vt1705_pcm_analog_playback;
|
|
||||||
else
|
|
||||||
spec->stream_analog_playback = &vt1708S_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1708S_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1708S_pcm_digital_playback;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
override_mic_boost(codec, 0x1a, 0, 3, 40);
|
override_mic_boost(codec, 0x1a, 0, 3, 40);
|
||||||
override_mic_boost(codec, 0x1e, 0, 3, 40);
|
override_mic_boost(codec, 0x1e, 0, 3, 40);
|
||||||
@ -3463,45 +3283,6 @@ static const struct hda_verb vt1702_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1702_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1702_pcm_analog_capture = {
|
|
||||||
.substreams = 3,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x12, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1702_pcm_digital_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt1702_parse_auto_config(struct hda_codec *codec)
|
static int vt1702_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -3613,11 +3394,6 @@ static int patch_vt1702(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1702_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1702_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1702_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1702_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1702_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1702_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1702_pcm_digital_playback;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
spec->mixers[spec->num_mixers] = vt1702_capture_mixer;
|
spec->mixers[spec->num_mixers] = vt1702_capture_mixer;
|
||||||
spec->num_mixers++;
|
spec->num_mixers++;
|
||||||
@ -3721,51 +3497,6 @@ static const struct hda_verb vt1718S_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1718S_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 10,
|
|
||||||
.nid = 0x8, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1718S_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1718S_pcm_digital_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1718S_pcm_digital_capture = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt1718S_parse_auto_config(struct hda_codec *codec)
|
static int vt1718S_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -3914,13 +3645,6 @@ static int patch_vt1718S(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1718S_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1718S_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1718S_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1718S_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1718S_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1718S_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1718S_pcm_digital_playback;
|
|
||||||
if (codec->vendor_id == 0x11060428 || codec->vendor_id == 0x11060441)
|
|
||||||
spec->stream_digital_capture = &vt1718S_pcm_digital_capture;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
override_mic_boost(codec, 0x2b, 0, 3, 40);
|
override_mic_boost(codec, 0x2b, 0, 3, 40);
|
||||||
override_mic_boost(codec, 0x29, 0, 3, 40);
|
override_mic_boost(codec, 0x29, 0, 3, 40);
|
||||||
@ -4085,45 +3809,6 @@ static const struct hda_verb vt1716S_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1716S_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 6,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1716S_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x13, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1716S_pcm_digital_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt1716S_parse_auto_config(struct hda_codec *codec)
|
static int vt1716S_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -4295,11 +3980,6 @@ static int patch_vt1716S(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1716S_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1716S_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1716S_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1716S_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1716S_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1716S_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1716S_pcm_digital_playback;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
override_mic_boost(codec, 0x1a, 0, 3, 40);
|
override_mic_boost(codec, 0x1a, 0, 3, 40);
|
||||||
override_mic_boost(codec, 0x1e, 0, 3, 40);
|
override_mic_boost(codec, 0x1e, 0, 3, 40);
|
||||||
@ -4480,45 +4160,6 @@ static const struct hda_verb vt1802_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt2002P_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x8, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt2002P_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt2002P_pcm_digital_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt2002P_parse_auto_config(struct hda_codec *codec)
|
static int vt2002P_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -4718,11 +4359,6 @@ static int patch_vt2002P(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] =
|
spec->init_verbs[spec->num_iverbs++] =
|
||||||
vt2002P_uniwill_init_verbs;
|
vt2002P_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt2002P_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt2002P_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt2002P_pcm_digital_playback;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
override_mic_boost(codec, 0x2b, 0, 3, 40);
|
override_mic_boost(codec, 0x2b, 0, 3, 40);
|
||||||
override_mic_boost(codec, 0x29, 0, 3, 40);
|
override_mic_boost(codec, 0x29, 0, 3, 40);
|
||||||
@ -4833,45 +4469,6 @@ static const struct hda_verb vt1812_uniwill_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1812_pcm_analog_playback = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x8, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_playback_pcm_open,
|
|
||||||
.prepare = via_playback_multi_pcm_prepare,
|
|
||||||
.cleanup = via_playback_multi_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1812_pcm_analog_capture = {
|
|
||||||
.substreams = 2,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
.nid = 0x10, /* NID to query formats and rates */
|
|
||||||
.ops = {
|
|
||||||
.open = via_pcm_open_close,
|
|
||||||
.prepare = via_capture_pcm_prepare,
|
|
||||||
.cleanup = via_capture_pcm_cleanup,
|
|
||||||
.close = via_pcm_open_close,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct hda_pcm_stream vt1812_pcm_digital_playback = {
|
|
||||||
.substreams = 1,
|
|
||||||
.channels_min = 2,
|
|
||||||
.channels_max = 2,
|
|
||||||
/* NID is set in via_build_pcms */
|
|
||||||
.ops = {
|
|
||||||
.open = via_dig_playback_pcm_open,
|
|
||||||
.close = via_dig_playback_pcm_close,
|
|
||||||
.prepare = via_dig_playback_pcm_prepare,
|
|
||||||
.cleanup = via_dig_playback_pcm_cleanup
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static int vt1812_parse_auto_config(struct hda_codec *codec)
|
static int vt1812_parse_auto_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct via_spec *spec = codec->spec;
|
struct via_spec *spec = codec->spec;
|
||||||
@ -5042,11 +4639,6 @@ static int patch_vt1812(struct hda_codec *codec)
|
|||||||
spec->init_verbs[spec->num_iverbs++] = vt1812_volume_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1812_volume_init_verbs;
|
||||||
spec->init_verbs[spec->num_iverbs++] = vt1812_uniwill_init_verbs;
|
spec->init_verbs[spec->num_iverbs++] = vt1812_uniwill_init_verbs;
|
||||||
|
|
||||||
spec->stream_analog_playback = &vt1812_pcm_analog_playback;
|
|
||||||
spec->stream_analog_capture = &vt1812_pcm_analog_capture;
|
|
||||||
|
|
||||||
spec->stream_digital_playback = &vt1812_pcm_digital_playback;
|
|
||||||
|
|
||||||
if (spec->adc_nids && spec->input_mux) {
|
if (spec->adc_nids && spec->input_mux) {
|
||||||
override_mic_boost(codec, 0x2b, 0, 3, 40);
|
override_mic_boost(codec, 0x2b, 0, 3, 40);
|
||||||
override_mic_boost(codec, 0x29, 0, 3, 40);
|
override_mic_boost(codec, 0x29, 0, 3, 40);
|
||||||
|
Loading…
Reference in New Issue
Block a user