From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH 1/2] ALSA: hda - Refactor quirk picking and change quirk priority Date: Tue, 22 Jul 2014 14:30:19 +0200 Message-ID: References: <1406030975-10499-1-git-send-email-david.henningsson@canonical.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 0C514265761 for ; Tue, 22 Jul 2014 14:30:20 +0200 (CEST) In-Reply-To: <1406030975-10499-1-git-send-email-david.henningsson@canonical.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: David Henningsson Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org At Tue, 22 Jul 2014 14:09:34 +0200, David Henningsson wrote: > > Previously, calling one quirk function first and another later > would make the latter one take priority, this is now changed > to make the former take priority. > > By adding two special values for fixup_id we can also get rid of the > fixup_forced flag. Applied both patches. Thanks. Takashi > > Signed-off-by: David Henningsson > --- > sound/pci/hda/hda_auto_parser.c | 15 ++++++++------- > sound/pci/hda/hda_codec.c | 1 + > sound/pci/hda/hda_codec.h | 1 - > sound/pci/hda/hda_local.h | 2 ++ > sound/pci/hda/patch_cirrus.c | 4 +++- > sound/pci/hda/patch_sigmatel.c | 4 +++- > 6 files changed, 17 insertions(+), 10 deletions(-) > > diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c > index a979019..51dea49 100644 > --- a/sound/pci/hda/hda_auto_parser.c > +++ b/sound/pci/hda/hda_auto_parser.c > @@ -854,7 +854,7 @@ void snd_hda_pick_pin_fixup(struct hda_codec *codec, > { > const struct snd_hda_pin_quirk *pq; > > - if (codec->fixup_forced) > + if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) > return; > > for (pq = pin_quirk; pq->subvendor; pq++) { > @@ -880,14 +880,17 @@ void snd_hda_pick_fixup(struct hda_codec *codec, > const struct hda_fixup *fixlist) > { > const struct snd_pci_quirk *q; > - int id = -1; > + int id = HDA_FIXUP_ID_NOT_SET; > const char *name = NULL; > > + if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) > + return; > + > /* when model=nofixup is given, don't pick up any fixups */ > if (codec->modelname && !strcmp(codec->modelname, "nofixup")) { > codec->fixup_list = NULL; > - codec->fixup_id = -1; > - codec->fixup_forced = 1; > + codec->fixup_name = NULL; > + codec->fixup_id = HDA_FIXUP_ID_NO_FIXUP; > return; > } > > @@ -897,13 +900,12 @@ void snd_hda_pick_fixup(struct hda_codec *codec, > codec->fixup_id = models->id; > codec->fixup_name = models->name; > codec->fixup_list = fixlist; > - codec->fixup_forced = 1; > return; > } > models++; > } > } > - if (id < 0 && quirk) { > + if (quirk) { > q = snd_pci_quirk_lookup(codec->bus->pci, quirk); > if (q) { > id = q->value; > @@ -927,7 +929,6 @@ void snd_hda_pick_fixup(struct hda_codec *codec, > } > } > > - codec->fixup_forced = 0; > codec->fixup_id = id; > if (id >= 0) { > codec->fixup_list = fixlist; > diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c > index 47a6177..ec6a7d0 100644 > --- a/sound/pci/hda/hda_codec.c > +++ b/sound/pci/hda/hda_codec.c > @@ -1476,6 +1476,7 @@ int snd_hda_codec_new(struct hda_bus *bus, > > INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work); > codec->depop_delay = -1; > + codec->fixup_id = HDA_FIXUP_ID_NOT_SET; > > #ifdef CONFIG_PM > spin_lock_init(&codec->power_lock); > diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h > index f84a40e..bbc5a13 100644 > --- a/sound/pci/hda/hda_codec.h > +++ b/sound/pci/hda/hda_codec.h > @@ -402,7 +402,6 @@ struct hda_codec { > > /* fix-up list */ > int fixup_id; > - unsigned int fixup_forced:1; /* fixup explicitly set by user */ > const struct hda_fixup *fixup_list; > const char *fixup_name; > > diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h > index aa374ad..364bb41 100644 > --- a/sound/pci/hda/hda_local.h > +++ b/sound/pci/hda/hda_local.h > @@ -438,6 +438,8 @@ struct snd_hda_pin_quirk { > > #endif > > +#define HDA_FIXUP_ID_NOT_SET -1 > +#define HDA_FIXUP_ID_NO_FIXUP -2 > > /* fixup types */ > enum { > diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c > index 387f0b5..3db724e 100644 > --- a/sound/pci/hda/patch_cirrus.c > +++ b/sound/pci/hda/patch_cirrus.c > @@ -657,8 +657,10 @@ static void cs4208_fixup_mac(struct hda_codec *codec, > { > if (action != HDA_FIXUP_ACT_PRE_PROBE) > return; > + > + codec->fixup_id = HDA_FIXUP_ID_NOT_SET; > snd_hda_pick_fixup(codec, NULL, cs4208_mac_fixup_tbl, cs4208_fixups); > - if (codec->fixup_id < 0 || codec->fixup_id == CS4208_MAC_AUTO) > + if (codec->fixup_id == HDA_FIXUP_ID_NOT_SET) > codec->fixup_id = CS4208_GPIO0; /* default fixup */ > snd_hda_apply_fixup(codec, action); > } > diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c > index 946ae40..8dc6815 100644 > --- a/sound/pci/hda/patch_sigmatel.c > +++ b/sound/pci/hda/patch_sigmatel.c > @@ -3449,9 +3449,11 @@ static void stac922x_fixup_intel_mac_auto(struct hda_codec *codec, > { > if (action != HDA_FIXUP_ACT_PRE_PROBE) > return; > + > + codec->fixup_id = HDA_FIXUP_ID_NOT_SET; > snd_hda_pick_fixup(codec, NULL, stac922x_intel_mac_fixup_tbl, > stac922x_fixups); > - if (codec->fixup_id != STAC_INTEL_MAC_AUTO) > + if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) > snd_hda_apply_fixup(codec, action); > } > > -- > 1.9.1 >