diff options
-rw-r--r-- | sound/soc/intel/skylake/skl.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c index df36b8fe6d5e..41a084b3d48f 100644 --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c | |||
@@ -916,6 +916,21 @@ static int skl_first_init(struct hdac_bus *bus) | |||
916 | unsigned short gcap; | 916 | unsigned short gcap; |
917 | int cp_streams, pb_streams, start_idx; | 917 | int cp_streams, pb_streams, start_idx; |
918 | 918 | ||
919 | /* | ||
920 | * detect DSP by checking class/subclass/prog-id information | ||
921 | * class=04 subclass 03 prog-if 00: no DSP, legacy driver needs to be used | ||
922 | * class=04 subclass 01 prog-if 00: DSP is present (and may be required e.g. for DMIC or SSP support) | ||
923 | * class=04 subclass 03 prog-if 80: either of DSP or legacy mode can be used | ||
924 | */ | ||
925 | if (pci->class == 0x040300) { | ||
926 | dev_err(bus->dev, "The DSP is not enabled on this platform, aborting probe\n"); | ||
927 | return -ENODEV; | ||
928 | } else if (pci->class != 0x040100 && pci->class != 0x040380) { | ||
929 | dev_err(bus->dev, "Unknown PCI class/subclass/prog-if information (0x%06x) found, aborting probe\n", pci->class); | ||
930 | return -ENODEV; | ||
931 | } | ||
932 | dev_info(bus->dev, "DSP detected with PCI class/subclass/prog-if info 0x%06x\n", pci->class); | ||
933 | |||
919 | err = pci_request_regions(pci, "Skylake HD audio"); | 934 | err = pci_request_regions(pci, "Skylake HD audio"); |
920 | if (err < 0) | 935 | if (err < 0) |
921 | return err; | 936 | return err; |