ALSA: hda/realtek: Add CS35L41 support for Thinkpad laptops
Add support for two CS35L41 using I2C bus and the component binding method [ Fix the entries to be sorted order by tiwai ] Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com> Link: https://lore.kernel.org/r/20211217115708.882525-11-tanureal@opensource.cirrus.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
d3dca02637
Коммит
ae7abe36e3
|
@ -6580,6 +6580,37 @@ static void comp_generic_playback_hook(struct hda_pcm_stream *hinfo, struct hda_
|
|||
}
|
||||
}
|
||||
|
||||
static void cs35l41_generic_fixup(struct hda_codec *cdc, int action, const char *bus,
|
||||
const char *hid, int count)
|
||||
{
|
||||
struct device *dev = hda_codec_dev(cdc);
|
||||
struct alc_spec *spec = cdc->spec;
|
||||
char *name;
|
||||
int ret, i;
|
||||
|
||||
switch (action) {
|
||||
case HDA_FIXUP_ACT_PRE_PROBE:
|
||||
for (i = 0; i < count; i++) {
|
||||
name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"%s-%s:00-cs35l41-hda.%d", bus, hid, i);
|
||||
if (!name)
|
||||
return;
|
||||
component_match_add(dev, &spec->match, comp_match_dev_name, name);
|
||||
}
|
||||
ret = component_master_add_with_match(dev, &comp_master_ops, spec->match);
|
||||
if (ret)
|
||||
codec_err(cdc, "Fail to register component aggregator %d\n", ret);
|
||||
else
|
||||
spec->gen.pcm_playback_hook = comp_generic_playback_hook;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void cs35l41_fixup_i2c_two(struct hda_codec *cdc, const struct hda_fixup *fix, int action)
|
||||
{
|
||||
cs35l41_generic_fixup(cdc, action, "i2c", "CSC3551", 2);
|
||||
}
|
||||
|
||||
static void alc287_legion_16achg6_playback_hook(struct hda_pcm_stream *hinfo, struct hda_codec *cdc,
|
||||
struct snd_pcm_substream *sub, int action)
|
||||
{
|
||||
|
@ -6916,6 +6947,7 @@ enum {
|
|||
ALC285_FIXUP_LEGION_Y9000X_SPEAKERS,
|
||||
ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE,
|
||||
ALC287_FIXUP_LEGION_16ACHG6,
|
||||
ALC287_FIXUP_CS35L41_I2C_2,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
|
@ -8662,6 +8694,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc287_fixup_legion_16achg6_speakers,
|
||||
},
|
||||
[ALC287_FIXUP_CS35L41_I2C_2] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = cs35l41_fixup_i2c_two,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
|
@ -9059,6 +9095,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x22be, "Thinkpad X1 Carbon 8th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22c1, "Thinkpad P1 Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22c2, "Thinkpad X1 Extreme Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||
|
|
Загрузка…
Ссылка в новой задаче