ALSA: hda/cs8409: Support new Odin Variants
Odin Variants have the internal mic connected directly to the CPU rather than codec. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> Link: https://lore.kernel.org/r/20220511100207.1268321-2-sbinding@opensource.cirrus.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
ec6a8aaafb
commit
22bb82264c
@ -76,6 +76,13 @@ const struct hda_pintbl cs8409_cs42l42_pincfgs[] = {
|
||||
{} /* terminator */
|
||||
};
|
||||
|
||||
const struct hda_pintbl cs8409_cs42l42_pincfgs_no_dmic[] = {
|
||||
{ CS8409_PIN_ASP1_TRANSMITTER_A, 0x042120f0 }, /* ASP-1-TX */
|
||||
{ CS8409_PIN_ASP1_RECEIVER_A, 0x04a12050 }, /* ASP-1-RX */
|
||||
{ CS8409_PIN_ASP2_TRANSMITTER_A, 0x901000f0 }, /* ASP-2-TX */
|
||||
{} /* terminator */
|
||||
};
|
||||
|
||||
/* Vendor specific HW configuration for CS42L42 */
|
||||
static const struct cs8409_i2c_param cs42l42_init_reg_seq[] = {
|
||||
{ CS42L42_I2C_TIMEOUT, 0xB0 },
|
||||
@ -518,6 +525,11 @@ const struct snd_pci_quirk cs8409_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x0B95, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),
|
||||
SND_PCI_QUIRK(0x1028, 0x0B96, "Warlock MLK", CS8409_WARLOCK_MLK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0B97, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BA5, "Odin", CS8409_ODIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BA6, "Odin", CS8409_ODIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BA8, "Odin", CS8409_ODIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BAA, "Odin", CS8409_ODIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BAE, "Odin", CS8409_ODIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BB2, "Warlock MLK", CS8409_WARLOCK_MLK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BB3, "Warlock MLK", CS8409_WARLOCK_MLK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0BB4, "Warlock MLK", CS8409_WARLOCK_MLK),
|
||||
@ -545,6 +557,7 @@ const struct hda_model_fixup cs8409_models[] = {
|
||||
{ .id = CS8409_WARLOCK_MLK_DUAL_MIC, .name = "warlock mlk dual mic" },
|
||||
{ .id = CS8409_CYBORG, .name = "cyborg" },
|
||||
{ .id = CS8409_DOLPHIN, .name = "dolphin" },
|
||||
{ .id = CS8409_ODIN, .name = "odin" },
|
||||
{}
|
||||
};
|
||||
|
||||
@ -593,4 +606,10 @@ const struct hda_fixup cs8409_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = dolphin_fixups,
|
||||
},
|
||||
[CS8409_ODIN] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = cs8409_cs42l42_pincfgs_no_dmic,
|
||||
.chained = true,
|
||||
.chain_id = CS8409_FIXUPS,
|
||||
},
|
||||
};
|
||||
|
@ -1027,6 +1027,10 @@ static void cs8409_cs42l42_hw_init(struct hda_codec *codec)
|
||||
/* DMIC1_MO=00b, DMIC1/2_SR=1 */
|
||||
cs8409_vendor_coef_set(codec, CS8409_DMIC_CFG, 0x0003);
|
||||
break;
|
||||
case CS8409_ODIN:
|
||||
/* ASP1/2_xxx_EN=1, ASP1/2_MCLK_EN=0, DMIC1_SCL_EN=0 */
|
||||
cs8409_vendor_coef_set(codec, CS8409_PAD_CFG_SLW_RATE_CTRL, 0xfc00);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1116,6 +1120,7 @@ void cs8409_cs42l42_fixups(struct hda_codec *codec, const struct hda_fixup *fix,
|
||||
|
||||
/* Set HSBIAS_SENSE_EN and Full Scale volume for some variants. */
|
||||
switch (codec->fixup_id) {
|
||||
case CS8409_ODIN:
|
||||
case CS8409_WARLOCK_MLK:
|
||||
case CS8409_WARLOCK_MLK_DUAL_MIC:
|
||||
spec->scodecs[CS8409_CODEC0]->hsbias_hiz = 0x0020;
|
||||
@ -1136,9 +1141,10 @@ void cs8409_cs42l42_fixups(struct hda_codec *codec, const struct hda_fixup *fix,
|
||||
/* add hooks */
|
||||
spec->gen.pcm_playback_hook = cs42l42_playback_pcm_hook;
|
||||
spec->gen.pcm_capture_hook = cs42l42_capture_pcm_hook;
|
||||
/* Set initial DMIC volume to -26 dB */
|
||||
snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,
|
||||
HDA_INPUT, 0, 0xff, 0x19);
|
||||
if (codec->fixup_id != CS8409_ODIN)
|
||||
/* Set initial DMIC volume to -26 dB */
|
||||
snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,
|
||||
HDA_INPUT, 0, 0xff, 0x19);
|
||||
snd_hda_gen_add_kctl(&spec->gen, "Headphone Playback Volume",
|
||||
&cs42l42_dac_volume_mixer);
|
||||
snd_hda_gen_add_kctl(&spec->gen, "Mic Capture Volume",
|
||||
|
@ -267,6 +267,7 @@ enum {
|
||||
CS8409_FIXUPS,
|
||||
CS8409_DOLPHIN,
|
||||
CS8409_DOLPHIN_FIXUPS,
|
||||
CS8409_ODIN,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
Loading…
Reference in New Issue
Block a user