static void oxygen_restore_eeprom(struct oxygen *chip, const struct pci_device_id *id) { u16 eeprom_id; eeprom_id = oxygen_read_eeprom(chip, 0); if (eeprom_id != OXYGEN_EEPROM_ID && (eeprom_id != 0xffff || id->subdevice != 0x8788)) { /* * This function gets called only when a known card model has * been detected, i.e., we know there is a valid subsystem * product ID at index 2 in the EEPROM. Therefore, we have * been able to deduce the correct subsystem vendor ID, and * this is enough information to restore the original EEPROM * contents. */ oxygen_write_eeprom(chip, 1, id->subvendor); oxygen_write_eeprom(chip, 0, OXYGEN_EEPROM_ID); oxygen_set_bits8(chip, OXYGEN_MISC, OXYGEN_MISC_WRITE_PCI_SUBID); pci_write_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, id->subvendor); pci_write_config_word(chip->pci, PCI_SUBSYSTEM_ID, id->subdevice); oxygen_clear_bits8(chip, OXYGEN_MISC, OXYGEN_MISC_WRITE_PCI_SUBID); dev_info(chip->card->dev, "EEPROM ID restored\n"); } }
static void oxygen_restore_eeprom(struct oxygen *chip, const struct pci_device_id *id) { u16 eeprom_id; eeprom_id = oxygen_read_eeprom(chip, 0); if (eeprom_id != OXYGEN_EEPROM_ID && (eeprom_id != 0xffff || id->subdevice != 0x8788)) { oxygen_write_eeprom(chip, 1, id->subvendor); oxygen_write_eeprom(chip, 0, OXYGEN_EEPROM_ID); oxygen_set_bits8(chip, OXYGEN_MISC, OXYGEN_MISC_WRITE_PCI_SUBID); pci_write_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, id->subvendor); pci_write_config_word(chip->pci, PCI_SUBSYSTEM_ID, id->subdevice); oxygen_clear_bits8(chip, OXYGEN_MISC, OXYGEN_MISC_WRITE_PCI_SUBID); snd_printk(KERN_INFO "EEPROM ID restored\n"); } }