Lines Matching refs:chip

29 static inline int oxygen_uart_input_ready(struct oxygen *chip)  in oxygen_uart_input_ready()  argument
31 return !(oxygen_read8(chip, OXYGEN_MPU401 + 1) & MPU401_RX_EMPTY); in oxygen_uart_input_ready()
34 static void oxygen_read_uart(struct oxygen *chip) in oxygen_read_uart() argument
36 if (unlikely(!oxygen_uart_input_ready(chip))) { in oxygen_read_uart()
38 oxygen_read8(chip, OXYGEN_MPU401); in oxygen_read_uart()
42 u8 data = oxygen_read8(chip, OXYGEN_MPU401); in oxygen_read_uart()
45 if (chip->uart_input_count >= ARRAY_SIZE(chip->uart_input)) in oxygen_read_uart()
46 chip->uart_input_count = 0; in oxygen_read_uart()
47 chip->uart_input[chip->uart_input_count++] = data; in oxygen_read_uart()
48 } while (oxygen_uart_input_ready(chip)); in oxygen_read_uart()
49 if (chip->model.uart_input) in oxygen_read_uart()
50 chip->model.uart_input(chip); in oxygen_read_uart()
55 struct oxygen *chip = dev_id; in oxygen_interrupt() local
58 status = oxygen_read16(chip, OXYGEN_INTERRUPT_STATUS); in oxygen_interrupt()
62 spin_lock(&chip->reg_lock); in oxygen_interrupt()
75 chip->interrupt_mask &= ~OXYGEN_INT_SPDIF_IN_DETECT; in oxygen_interrupt()
76 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, in oxygen_interrupt()
77 chip->interrupt_mask & ~clear); in oxygen_interrupt()
78 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, in oxygen_interrupt()
79 chip->interrupt_mask); in oxygen_interrupt()
82 elapsed_streams = status & chip->pcm_running; in oxygen_interrupt()
84 spin_unlock(&chip->reg_lock); in oxygen_interrupt()
87 if ((elapsed_streams & (1 << i)) && chip->streams[i]) in oxygen_interrupt()
88 snd_pcm_period_elapsed(chip->streams[i]); in oxygen_interrupt()
91 spin_lock(&chip->reg_lock); in oxygen_interrupt()
92 i = oxygen_read32(chip, OXYGEN_SPDIF_CONTROL); in oxygen_interrupt()
96 oxygen_write32(chip, OXYGEN_SPDIF_CONTROL, i); in oxygen_interrupt()
97 schedule_work(&chip->spdif_input_bits_work); in oxygen_interrupt()
99 spin_unlock(&chip->reg_lock); in oxygen_interrupt()
103 schedule_work(&chip->gpio_work); in oxygen_interrupt()
106 if (chip->midi) in oxygen_interrupt()
107 snd_mpu401_uart_interrupt(0, chip->midi->private_data); in oxygen_interrupt()
109 oxygen_read_uart(chip); in oxygen_interrupt()
113 wake_up(&chip->ac97_waitqueue); in oxygen_interrupt()
120 struct oxygen *chip = container_of(work, struct oxygen, in oxygen_spdif_input_bits_changed() local
130 spin_lock_irq(&chip->reg_lock); in oxygen_spdif_input_bits_changed()
131 reg = oxygen_read32(chip, OXYGEN_SPDIF_CONTROL); in oxygen_spdif_input_bits_changed()
140 oxygen_write32(chip, OXYGEN_SPDIF_CONTROL, reg); in oxygen_spdif_input_bits_changed()
141 spin_unlock_irq(&chip->reg_lock); in oxygen_spdif_input_bits_changed()
143 spin_lock_irq(&chip->reg_lock); in oxygen_spdif_input_bits_changed()
144 reg = oxygen_read32(chip, OXYGEN_SPDIF_CONTROL); in oxygen_spdif_input_bits_changed()
157 oxygen_write32(chip, OXYGEN_SPDIF_CONTROL, reg); in oxygen_spdif_input_bits_changed()
161 spin_unlock_irq(&chip->reg_lock); in oxygen_spdif_input_bits_changed()
163 if (chip->controls[CONTROL_SPDIF_INPUT_BITS]) { in oxygen_spdif_input_bits_changed()
164 spin_lock_irq(&chip->reg_lock); in oxygen_spdif_input_bits_changed()
165 chip->interrupt_mask |= OXYGEN_INT_SPDIF_IN_DETECT; in oxygen_spdif_input_bits_changed()
166 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, in oxygen_spdif_input_bits_changed()
167 chip->interrupt_mask); in oxygen_spdif_input_bits_changed()
168 spin_unlock_irq(&chip->reg_lock); in oxygen_spdif_input_bits_changed()
174 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in oxygen_spdif_input_bits_changed()
175 &chip->controls[CONTROL_SPDIF_INPUT_BITS]->id); in oxygen_spdif_input_bits_changed()
181 struct oxygen *chip = container_of(work, struct oxygen, gpio_work); in oxygen_gpio_changed() local
183 if (chip->model.gpio_changed) in oxygen_gpio_changed()
184 chip->model.gpio_changed(chip); in oxygen_gpio_changed()
190 struct oxygen *chip = entry->private_data; in oxygen_proc_read() local
193 switch (oxygen_read8(chip, OXYGEN_REVISION) & OXYGEN_PACKAGE_ID_MASK) { in oxygen_proc_read()
203 snd_iprintf(buffer, " %02x", oxygen_read8(chip, i + j)); in oxygen_proc_read()
206 if (mutex_lock_interruptible(&chip->mutex) < 0) in oxygen_proc_read()
208 if (chip->has_ac97_0) { in oxygen_proc_read()
214 oxygen_read_ac97(chip, 0, i + j)); in oxygen_proc_read()
218 if (chip->has_ac97_1) { in oxygen_proc_read()
224 oxygen_read_ac97(chip, 1, i + j)); in oxygen_proc_read()
228 mutex_unlock(&chip->mutex); in oxygen_proc_read()
229 if (chip->model.dump_registers) in oxygen_proc_read()
230 chip->model.dump_registers(chip, buffer); in oxygen_proc_read()
233 static void oxygen_proc_init(struct oxygen *chip) in oxygen_proc_init() argument
235 snd_card_ro_proc_new(chip->card, "oxygen", chip, oxygen_proc_read); in oxygen_proc_init()
239 oxygen_search_pci_id(struct oxygen *chip, const struct pci_device_id ids[]) in oxygen_search_pci_id() argument
247 oxygen_clear_bits8(chip, OXYGEN_FUNCTION, in oxygen_search_pci_id()
253 subdevice = oxygen_read_eeprom(chip, 2); in oxygen_search_pci_id()
255 if (subdevice == 0xffff && oxygen_read_eeprom(chip, 1) == 0xffff) in oxygen_search_pci_id()
269 static void oxygen_restore_eeprom(struct oxygen *chip, in oxygen_restore_eeprom() argument
274 eeprom_id = oxygen_read_eeprom(chip, 0); in oxygen_restore_eeprom()
285 oxygen_write_eeprom(chip, 1, id->subvendor); in oxygen_restore_eeprom()
286 oxygen_write_eeprom(chip, 0, OXYGEN_EEPROM_ID); in oxygen_restore_eeprom()
288 oxygen_set_bits8(chip, OXYGEN_MISC, in oxygen_restore_eeprom()
290 pci_write_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, in oxygen_restore_eeprom()
292 pci_write_config_word(chip->pci, PCI_SUBSYSTEM_ID, in oxygen_restore_eeprom()
294 oxygen_clear_bits8(chip, OXYGEN_MISC, in oxygen_restore_eeprom()
297 dev_info(chip->card->dev, "EEPROM ID restored\n"); in oxygen_restore_eeprom()
353 static void oxygen_init(struct oxygen *chip) in oxygen_init() argument
357 chip->dac_routing = 1; in oxygen_init()
359 chip->dac_volume[i] = chip->model.dac_volume_min; in oxygen_init()
360 chip->dac_mute = 1; in oxygen_init()
361 chip->spdif_playback_enable = 0; in oxygen_init()
362 chip->spdif_bits = OXYGEN_SPDIF_C | OXYGEN_SPDIF_ORIGINAL | in oxygen_init()
364 chip->spdif_pcm_bits = chip->spdif_bits; in oxygen_init()
366 if (!(oxygen_read8(chip, OXYGEN_REVISION) & OXYGEN_REVISION_2)) in oxygen_init()
367 oxygen_set_bits8(chip, OXYGEN_MISC, in oxygen_init()
370 i = oxygen_read16(chip, OXYGEN_AC97_CONTROL); in oxygen_init()
371 chip->has_ac97_0 = (i & OXYGEN_AC97_CODEC_0) != 0; in oxygen_init()
372 chip->has_ac97_1 = (i & OXYGEN_AC97_CODEC_1) != 0; in oxygen_init()
374 oxygen_write8_masked(chip, OXYGEN_FUNCTION, in oxygen_init()
376 chip->model.function_flags, in oxygen_init()
380 oxygen_write8(chip, OXYGEN_DMA_STATUS, 0); in oxygen_init()
381 oxygen_write8(chip, OXYGEN_DMA_PAUSE, 0); in oxygen_init()
382 oxygen_write8(chip, OXYGEN_PLAY_CHANNELS, in oxygen_init()
386 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0); in oxygen_init()
387 oxygen_write8_masked(chip, OXYGEN_MISC, in oxygen_init()
388 chip->model.misc_flags, in oxygen_init()
394 oxygen_write8(chip, OXYGEN_REC_FORMAT, in oxygen_init()
398 oxygen_write8(chip, OXYGEN_PLAY_FORMAT, in oxygen_init()
401 oxygen_write8(chip, OXYGEN_REC_CHANNELS, OXYGEN_REC_CHANNELS_2_2_2); in oxygen_init()
402 oxygen_write16(chip, OXYGEN_I2S_MULTICH_FORMAT, in oxygen_init()
404 chip->model.dac_i2s_format | in oxygen_init()
405 OXYGEN_I2S_MCLK(chip->model.dac_mclks) | in oxygen_init()
409 if (chip->model.device_config & CAPTURE_0_FROM_I2S_1) in oxygen_init()
410 oxygen_write16(chip, OXYGEN_I2S_A_FORMAT, in oxygen_init()
412 chip->model.adc_i2s_format | in oxygen_init()
413 OXYGEN_I2S_MCLK(chip->model.adc_mclks) | in oxygen_init()
418 oxygen_write16(chip, OXYGEN_I2S_A_FORMAT, in oxygen_init()
421 if (chip->model.device_config & (CAPTURE_0_FROM_I2S_2 | in oxygen_init()
423 oxygen_write16(chip, OXYGEN_I2S_B_FORMAT, in oxygen_init()
425 chip->model.adc_i2s_format | in oxygen_init()
426 OXYGEN_I2S_MCLK(chip->model.adc_mclks) | in oxygen_init()
431 oxygen_write16(chip, OXYGEN_I2S_B_FORMAT, in oxygen_init()
434 if (chip->model.device_config & CAPTURE_3_FROM_I2S_3) in oxygen_init()
435 oxygen_write16(chip, OXYGEN_I2S_C_FORMAT, in oxygen_init()
437 chip->model.adc_i2s_format | in oxygen_init()
438 OXYGEN_I2S_MCLK(chip->model.adc_mclks) | in oxygen_init()
443 oxygen_write16(chip, OXYGEN_I2S_C_FORMAT, in oxygen_init()
446 oxygen_clear_bits32(chip, OXYGEN_SPDIF_CONTROL, in oxygen_init()
449 if (chip->model.device_config & CAPTURE_1_FROM_SPDIF) in oxygen_init()
450 oxygen_write32_masked(chip, OXYGEN_SPDIF_CONTROL, in oxygen_init()
463 oxygen_clear_bits32(chip, OXYGEN_SPDIF_CONTROL, in oxygen_init()
467 oxygen_write32(chip, OXYGEN_SPDIF_OUTPUT_BITS, chip->spdif_bits); in oxygen_init()
468 oxygen_write16(chip, OXYGEN_2WIRE_BUS_STATUS, in oxygen_init()
472 oxygen_clear_bits8(chip, OXYGEN_MPU401_CONTROL, OXYGEN_MPU401_LOOPBACK); in oxygen_init()
473 oxygen_write8(chip, OXYGEN_GPI_INTERRUPT_MASK, 0); in oxygen_init()
474 oxygen_write16(chip, OXYGEN_GPIO_INTERRUPT_MASK, 0); in oxygen_init()
475 oxygen_write16(chip, OXYGEN_PLAY_ROUTING, in oxygen_init()
482 oxygen_write8(chip, OXYGEN_REC_ROUTING, in oxygen_init()
486 oxygen_write8(chip, OXYGEN_ADC_MONITOR, 0); in oxygen_init()
487 oxygen_write8(chip, OXYGEN_A_MONITOR_ROUTING, in oxygen_init()
493 if (chip->has_ac97_0 | chip->has_ac97_1) in oxygen_init()
494 oxygen_write8(chip, OXYGEN_AC97_INTERRUPT_MASK, in oxygen_init()
498 oxygen_write8(chip, OXYGEN_AC97_INTERRUPT_MASK, 0); in oxygen_init()
499 oxygen_write32(chip, OXYGEN_AC97_OUT_CONFIG, 0); in oxygen_init()
500 oxygen_write32(chip, OXYGEN_AC97_IN_CONFIG, 0); in oxygen_init()
501 if (!(chip->has_ac97_0 | chip->has_ac97_1)) in oxygen_init()
502 oxygen_set_bits16(chip, OXYGEN_AC97_CONTROL, in oxygen_init()
504 if (!chip->has_ac97_0) { in oxygen_init()
505 oxygen_set_bits16(chip, OXYGEN_AC97_CONTROL, in oxygen_init()
508 oxygen_write_ac97(chip, 0, AC97_RESET, 0); in oxygen_init()
510 oxygen_ac97_set_bits(chip, 0, CM9780_GPIO_SETUP, in oxygen_init()
512 oxygen_ac97_set_bits(chip, 0, CM9780_MIXER, in oxygen_init()
515 oxygen_ac97_set_bits(chip, 0, CM9780_JACK, in oxygen_init()
519 oxygen_write_ac97(chip, 0, AC97_MASTER, 0x0000); in oxygen_init()
520 oxygen_write_ac97(chip, 0, AC97_PC_BEEP, 0x8000); in oxygen_init()
521 oxygen_write_ac97(chip, 0, AC97_MIC, 0x8808); in oxygen_init()
522 oxygen_write_ac97(chip, 0, AC97_LINE, 0x0808); in oxygen_init()
523 oxygen_write_ac97(chip, 0, AC97_CD, 0x8808); in oxygen_init()
524 oxygen_write_ac97(chip, 0, AC97_VIDEO, 0x8808); in oxygen_init()
525 oxygen_write_ac97(chip, 0, AC97_AUX, 0x8808); in oxygen_init()
526 oxygen_write_ac97(chip, 0, AC97_REC_GAIN, 0x8000); in oxygen_init()
527 oxygen_write_ac97(chip, 0, AC97_CENTER_LFE_MASTER, 0x8080); in oxygen_init()
528 oxygen_write_ac97(chip, 0, AC97_SURROUND_MASTER, 0x8080); in oxygen_init()
529 oxygen_ac97_clear_bits(chip, 0, CM9780_GPIO_STATUS, in oxygen_init()
532 oxygen_ac97_set_bits(chip, 0, AC97_POWERDOWN, in oxygen_init()
534 oxygen_ac97_set_bits(chip, 0, AC97_EXTENDED_STATUS, in oxygen_init()
537 if (chip->has_ac97_1) { in oxygen_init()
538 oxygen_set_bits32(chip, OXYGEN_AC97_OUT_CONFIG, in oxygen_init()
541 oxygen_write_ac97(chip, 1, AC97_RESET, 0); in oxygen_init()
543 oxygen_write_ac97(chip, 1, AC97_MASTER, 0x0000); in oxygen_init()
544 oxygen_write_ac97(chip, 1, AC97_HEADPHONE, 0x8000); in oxygen_init()
545 oxygen_write_ac97(chip, 1, AC97_PC_BEEP, 0x8000); in oxygen_init()
546 oxygen_write_ac97(chip, 1, AC97_MIC, 0x8808); in oxygen_init()
547 oxygen_write_ac97(chip, 1, AC97_LINE, 0x8808); in oxygen_init()
548 oxygen_write_ac97(chip, 1, AC97_CD, 0x8808); in oxygen_init()
549 oxygen_write_ac97(chip, 1, AC97_VIDEO, 0x8808); in oxygen_init()
550 oxygen_write_ac97(chip, 1, AC97_AUX, 0x8808); in oxygen_init()
551 oxygen_write_ac97(chip, 1, AC97_PCM, 0x0808); in oxygen_init()
552 oxygen_write_ac97(chip, 1, AC97_REC_SEL, 0x0000); in oxygen_init()
553 oxygen_write_ac97(chip, 1, AC97_REC_GAIN, 0x0000); in oxygen_init()
554 oxygen_ac97_set_bits(chip, 1, 0x6a, 0x0040); in oxygen_init()
558 static void oxygen_shutdown(struct oxygen *chip) in oxygen_shutdown() argument
560 spin_lock_irq(&chip->reg_lock); in oxygen_shutdown()
561 chip->interrupt_mask = 0; in oxygen_shutdown()
562 chip->pcm_running = 0; in oxygen_shutdown()
563 oxygen_write16(chip, OXYGEN_DMA_STATUS, 0); in oxygen_shutdown()
564 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0); in oxygen_shutdown()
565 spin_unlock_irq(&chip->reg_lock); in oxygen_shutdown()
570 struct oxygen *chip = card->private_data; in oxygen_card_free() local
572 oxygen_shutdown(chip); in oxygen_card_free()
573 flush_work(&chip->spdif_input_bits_work); in oxygen_card_free()
574 flush_work(&chip->gpio_work); in oxygen_card_free()
575 chip->model.cleanup(chip); in oxygen_card_free()
576 mutex_destroy(&chip->mutex); in oxygen_card_free()
582 int (*get_model)(struct oxygen *chip, in __oxygen_pci_probe() argument
588 struct oxygen *chip; in __oxygen_pci_probe() local
593 sizeof(*chip), &card); in __oxygen_pci_probe()
597 chip = card->private_data; in __oxygen_pci_probe()
598 chip->card = card; in __oxygen_pci_probe()
599 chip->pci = pci; in __oxygen_pci_probe()
600 chip->irq = -1; in __oxygen_pci_probe()
601 spin_lock_init(&chip->reg_lock); in __oxygen_pci_probe()
602 mutex_init(&chip->mutex); in __oxygen_pci_probe()
603 INIT_WORK(&chip->spdif_input_bits_work, in __oxygen_pci_probe()
605 INIT_WORK(&chip->gpio_work, oxygen_gpio_changed); in __oxygen_pci_probe()
606 init_waitqueue_head(&chip->ac97_waitqueue); in __oxygen_pci_probe()
623 chip->addr = pci_resource_start(pci, 0); in __oxygen_pci_probe()
625 pci_id = oxygen_search_pci_id(chip, ids); in __oxygen_pci_probe()
629 oxygen_restore_eeprom(chip, pci_id); in __oxygen_pci_probe()
630 err = get_model(chip, pci_id); in __oxygen_pci_probe()
634 if (chip->model.model_data_size) { in __oxygen_pci_probe()
635 chip->model_data = devm_kzalloc(&pci->dev, in __oxygen_pci_probe()
636 chip->model.model_data_size, in __oxygen_pci_probe()
638 if (!chip->model_data) in __oxygen_pci_probe()
646 oxygen_init(chip); in __oxygen_pci_probe()
647 chip->model.init(chip); in __oxygen_pci_probe()
650 IRQF_SHARED, KBUILD_MODNAME, chip); in __oxygen_pci_probe()
655 chip->irq = pci->irq; in __oxygen_pci_probe()
656 card->sync_irq = chip->irq; in __oxygen_pci_probe()
658 strcpy(card->driver, chip->model.chip); in __oxygen_pci_probe()
659 strcpy(card->shortname, chip->model.shortname); in __oxygen_pci_probe()
661 chip->model.longname, chip->addr, chip->irq); in __oxygen_pci_probe()
662 strcpy(card->mixername, chip->model.chip); in __oxygen_pci_probe()
663 snd_component_add(card, chip->model.chip); in __oxygen_pci_probe()
665 err = oxygen_pcm_init(chip); in __oxygen_pci_probe()
669 err = oxygen_mixer_init(chip); in __oxygen_pci_probe()
673 if (chip->model.device_config & (MIDI_OUTPUT | MIDI_INPUT)) { in __oxygen_pci_probe()
676 if (chip->model.device_config & MIDI_OUTPUT) in __oxygen_pci_probe()
678 if (chip->model.device_config & MIDI_INPUT) in __oxygen_pci_probe()
681 chip->addr + OXYGEN_MPU401, in __oxygen_pci_probe()
682 info_flags, -1, &chip->midi); in __oxygen_pci_probe()
687 oxygen_proc_init(chip); in __oxygen_pci_probe()
689 spin_lock_irq(&chip->reg_lock); in __oxygen_pci_probe()
690 if (chip->model.device_config & CAPTURE_1_FROM_SPDIF) in __oxygen_pci_probe()
691 chip->interrupt_mask |= OXYGEN_INT_SPDIF_IN_DETECT; in __oxygen_pci_probe()
692 if (chip->has_ac97_0 | chip->has_ac97_1) in __oxygen_pci_probe()
693 chip->interrupt_mask |= OXYGEN_INT_AC97; in __oxygen_pci_probe()
694 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, chip->interrupt_mask); in __oxygen_pci_probe()
695 spin_unlock_irq(&chip->reg_lock); in __oxygen_pci_probe()
708 int (*get_model)(struct oxygen *chip, in oxygen_pci_probe() argument
720 struct oxygen *chip = card->private_data; in oxygen_pci_suspend() local
725 if (chip->model.suspend) in oxygen_pci_suspend()
726 chip->model.suspend(chip); in oxygen_pci_suspend()
728 spin_lock_irq(&chip->reg_lock); in oxygen_pci_suspend()
729 saved_interrupt_mask = chip->interrupt_mask; in oxygen_pci_suspend()
730 chip->interrupt_mask = 0; in oxygen_pci_suspend()
731 oxygen_write16(chip, OXYGEN_DMA_STATUS, 0); in oxygen_pci_suspend()
732 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0); in oxygen_pci_suspend()
733 spin_unlock_irq(&chip->reg_lock); in oxygen_pci_suspend()
735 flush_work(&chip->spdif_input_bits_work); in oxygen_pci_suspend()
736 flush_work(&chip->gpio_work); in oxygen_pci_suspend()
737 chip->interrupt_mask = saved_interrupt_mask; in oxygen_pci_suspend()
755 static void oxygen_restore_ac97(struct oxygen *chip, unsigned int codec) in oxygen_restore_ac97() argument
759 oxygen_write_ac97(chip, codec, AC97_RESET, 0); in oxygen_restore_ac97()
763 oxygen_write_ac97(chip, codec, i * 2, in oxygen_restore_ac97()
764 chip->saved_ac97_registers[codec][i]); in oxygen_restore_ac97()
770 struct oxygen *chip = card->private_data; in oxygen_pci_resume() local
773 oxygen_write16(chip, OXYGEN_DMA_STATUS, 0); in oxygen_pci_resume()
774 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0); in oxygen_pci_resume()
777 oxygen_write8(chip, i, chip->saved_registers._8[i]); in oxygen_pci_resume()
778 if (chip->has_ac97_0) in oxygen_pci_resume()
779 oxygen_restore_ac97(chip, 0); in oxygen_pci_resume()
780 if (chip->has_ac97_1) in oxygen_pci_resume()
781 oxygen_restore_ac97(chip, 1); in oxygen_pci_resume()
783 if (chip->model.resume) in oxygen_pci_resume()
784 chip->model.resume(chip); in oxygen_pci_resume()
786 oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, chip->interrupt_mask); in oxygen_pci_resume()
799 struct oxygen *chip = card->private_data; in oxygen_pci_shutdown() local
801 oxygen_shutdown(chip); in oxygen_pci_shutdown()
802 chip->model.cleanup(chip); in oxygen_pci_shutdown()