lkml.org 
[lkml]   [2021]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 10/10] ALSA: hda/realtek: Add CS35L41 support for Thinkpad laptops
    Date
    From: Stefan Binding <sbinding@opensource.cirrus.com>

    Add support for two CS35L41 using I2C bus and the component
    binding method

    Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
    Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
    ---
    sound/pci/hda/patch_realtek.c | 37 +++++++++++++++++++++++++++++++++++
    1 file changed, 37 insertions(+)

    diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
    index 7299e6388900..af9f8d70dbce 100644
    --- a/sound/pci/hda/patch_realtek.c
    +++ b/sound/pci/hda/patch_realtek.c
    @@ -6552,6 +6552,35 @@ 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);
    + 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)
    {
    @@ -6868,6 +6897,7 @@ enum {
    ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
    ALC233_FIXUP_NO_AUDIO_JACK,
    ALC287_FIXUP_LEGION_16ACHG6,
    + ALC287_FIXUP_CS35L41_I2C_2,
    };

    static const struct hda_fixup alc269_fixups[] = {
    @@ -8596,6 +8626,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[] = {
    @@ -9006,6 +9040,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
    SND_PCI_QUIRK(0x17aa, 0x3843, "Yoga 9i", ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP),
    SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
    SND_PCI_QUIRK(0x17aa, 0x3847, "Legion 7 16ACHG6", ALC287_FIXUP_LEGION_16ACHG6),
    + 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, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
    SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
    SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL", ALC287_FIXUP_13S_GEN2_SPEAKERS),
    --
    2.34.1
    \
     
     \ /
      Last update: 2021-12-16 12:46    [W:2.565 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site