On Tue, Jan 15, 2019 at 06:10:05PM +0800, Guan Yung Tseng wrote: > +/* > + * NI Serial devices incorrectly identify themselves > + * PCI_CLASS_COMMUNICATION_OTHER, instead of what > + * they really are: PCI_CLASS_COMMUNICATION_MULTISERIAL > + */ > +static int pci_ni_probe(struct pci_dev *dev) > +{ > + dev->class = PCI_CLASS_COMMUNICATION_MULTISERIAL << 8 | > + (dev->class & 0xff); > + return 0; > +} This looks odd. dev->class should just contain the class code read from config space. I think you need to work around this in the places that check the classcode instead and add a quirk for these devices.