ASoC: Intel: Skylake: Remove superfluous chip initialization
authorCezary Rojewski <cezary.rojewski@intel.com>
Thu, 5 Mar 2020 14:53:08 +0000 (15:53 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 10 Mar 2020 17:44:24 +0000 (17:44 +0000)
Skylake driver does the controller init operation twice:
- first during probe (only to stop it just before scheduling probe_work)
- and during said probe_work where the actual correct sequence is
executed

To properly complete boot sequence when iDisp codec is present, bus
initialization has to be called only after _i915_init() finishes.
With additional _reset_list preceding _i915_init(), iDisp codec never
gets the chance to enumerate on the link. Remove the superfluous
initialization to address the issue.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200305145314.32579-2-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl.c

index f755ca2484cff75b87d9eff67d99676ab22cc987..d662315253560d0b05444138cd53a372fae08d2e 100644 (file)
@@ -803,6 +803,9 @@ static void skl_probe_work(struct work_struct *work)
                        return;
        }
 
+       skl_init_pci(skl);
+       skl_dum_set(bus);
+
        err = skl_init_chip(bus, true);
        if (err < 0) {
                dev_err(bus->dev, "Init chip failed with err: %d\n", err);
@@ -918,8 +921,6 @@ static int skl_first_init(struct hdac_bus *bus)
                return -ENXIO;
        }
 
-       snd_hdac_bus_reset_link(bus, true);
-
        snd_hdac_bus_parse_capabilities(bus);
 
        /* check if PPCAP exists */
@@ -967,11 +968,7 @@ static int skl_first_init(struct hdac_bus *bus)
        if (err < 0)
                return err;
 
-       /* initialize chip */
-       skl_init_pci(skl);
-       skl_dum_set(bus);
-
-       return skl_init_chip(bus, true);
+       return 0;
 }
 
 static int skl_probe(struct pci_dev *pci,
@@ -1064,8 +1061,6 @@ static int skl_probe(struct pci_dev *pci,
        if (bus->mlcap)
                snd_hdac_ext_bus_get_ml_capabilities(bus);
 
-       snd_hdac_bus_stop_chip(bus);
-
        /* create device for soc dmic */
        err = skl_dmic_device_register(skl);
        if (err < 0) {