Hi, On Mon, 20 Jun 2022, Takashi Iwai wrote: > So this looks like a bug due to the use of pci_get_class(). > Since there is no pci_get_base_class(), we likely need to open-code > the search, e.g. something like below. yes, this indeed seems to be the case. > diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c > index 3f35972e1cf7..161a9711cd63 100644 > --- a/sound/hda/hdac_i915.c > +++ b/sound/hda/hdac_i915.c > @@ -119,21 +119,18 @@ static int i915_component_master_match(struct device *dev, int subcomponent, [...] > - do { > - display_dev = pci_get_class(class, display_dev); > - > - if (display_dev && display_dev->vendor == PCI_VENDOR_ID_INTEL && > + for_each_pci_dev(display_dev) { > + if (display_dev->vendor == PCI_VENDOR_ID_INTEL && > + (display_dev->class >> 16) == PCI_BASE_CLASS_DISPLAY && > connectivity_check(display_dev, hdac_pci)) { > pci_dev_put(display_dev); > - match = true; > + return true; > } > - } while (!match && display_dev); > + } To open code a bit less, I was first thinking: --cut-- --- a/sound/hda/hdac_i915.c +++ b/sound/hda/hdac_i915.c @@ -124,9 +124,9 @@ static int i915_gfx_present(struct pci_dev *hdac_pci) bool match = false; do { - display_dev = pci_get_class(class, display_dev); + display_dev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, display_dev); - if (display_dev && display_dev->vendor == PCI_VENDOR_ID_INTEL && + if (display_dev && (display_dev->class >> 16) == PCI_BASE_CLASS_DISPLAY && connectivity_check(display_dev, hdac_pci)) { --cut-- But it's a marginal difference, so for your version: Reviewed-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx> Br, Kai