]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: hda - Expand pin_match function to match upcoming new tbls
authorHui Wang <hui.wang@canonical.com>
Fri, 16 Aug 2019 06:27:39 +0000 (14:27 +0800)
committerTakashi Iwai <tiwai@suse.de>
Fri, 16 Aug 2019 09:59:30 +0000 (11:59 +0200)
With the existing pintbl, we already have many entries in it. it is
better to figure out a new way to reduce the size of the pintbl.

We plan to define a new tbl which will match more machines with a
single tbl, To do that, this function doesn't need to match all valid
pins between machine and tbl, it just needs to match all pins defined
in the tbl with the machine.

And the plan is to move some tbls from pin_fixup_tbl to
fallback_pin_fixup_tbl gradually.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_auto_parser.c
sound/pci/hda/hda_local.h
sound/pci/hda/patch_realtek.c

index 92390d457567effa041306600d1bc6c5962cad05..8a134f750baebd6daf952387a14502e35dd009a1 100644 (file)
@@ -884,7 +884,8 @@ EXPORT_SYMBOL_GPL(snd_hda_apply_fixup);
 #define IGNORE_SEQ_ASSOC (~(AC_DEFCFG_SEQUENCE | AC_DEFCFG_DEF_ASSOC))
 
 static bool pin_config_match(struct hda_codec *codec,
-                            const struct hda_pintbl *pins)
+                            const struct hda_pintbl *pins,
+                            bool match_all_pins)
 {
        const struct hda_pincfg *pin;
        int i;
@@ -908,7 +909,8 @@ static bool pin_config_match(struct hda_codec *codec,
                                        return false;
                        }
                }
-               if (!found && (cfg & 0xf0000000) != 0x40000000)
+               if (match_all_pins &&
+                   !found && (cfg & 0xf0000000) != 0x40000000)
                        return false;
        }
 
@@ -920,10 +922,12 @@ static bool pin_config_match(struct hda_codec *codec,
  * @codec: the HDA codec
  * @pin_quirk: zero-terminated pin quirk list
  * @fixlist: the fixup list
+ * @match_all_pins: all valid pins must match with the table entries
  */
 void snd_hda_pick_pin_fixup(struct hda_codec *codec,
                            const struct snd_hda_pin_quirk *pin_quirk,
-                           const struct hda_fixup *fixlist)
+                           const struct hda_fixup *fixlist,
+                           bool match_all_pins)
 {
        const struct snd_hda_pin_quirk *pq;
 
@@ -935,7 +939,7 @@ void snd_hda_pick_pin_fixup(struct hda_codec *codec,
                        continue;
                if (codec->core.vendor_id != pq->codec)
                        continue;
-               if (pin_config_match(codec, pq->pins)) {
+               if (pin_config_match(codec, pq->pins, match_all_pins)) {
                        codec->fixup_id = pq->value;
 #ifdef CONFIG_SND_DEBUG_VERBOSE
                        codec->fixup_name = pq->name;
index 349a8312d06a6c55dc525465b273996a7ce1e02c..3942e1b528d89db1cdbef28210bfc812f01aeb25 100644 (file)
@@ -361,7 +361,8 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
                        const struct hda_fixup *fixlist);
 void snd_hda_pick_pin_fixup(struct hda_codec *codec,
                            const struct snd_hda_pin_quirk *pin_quirk,
-                           const struct hda_fixup *fixlist);
+                           const struct hda_fixup *fixlist,
+                           bool match_all_pins);
 
 /* helper macros to retrieve pin default-config values */
 #define get_defcfg_connect(cfg) \
index cb7baa65b298c99e3026262e88323153a74b5058..9562045c49c6edb61673baa76ccaeccd6e6a49a6 100644 (file)
@@ -7958,7 +7958,7 @@ static int patch_alc269(struct hda_codec *codec)
 
        snd_hda_pick_fixup(codec, alc269_fixup_models,
                       alc269_fixup_tbl, alc269_fixups);
-       snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups);
+       snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups, true);
        snd_hda_pick_fixup(codec, NULL, alc269_fixup_vendor_tbl,
                           alc269_fixups);
        snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
@@ -8943,7 +8943,7 @@ static int patch_alc662(struct hda_codec *codec)
 
        snd_hda_pick_fixup(codec, alc662_fixup_models,
                       alc662_fixup_tbl, alc662_fixups);
-       snd_hda_pick_pin_fixup(codec, alc662_pin_fixup_tbl, alc662_fixups);
+       snd_hda_pick_pin_fixup(codec, alc662_pin_fixup_tbl, alc662_fixups, true);
        snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
 
        alc_auto_parse_customize_define(codec);