static void rtcan_ems_pci_del_chan(struct rtcan_device *dev, int init_step) { struct rtcan_ems_pci *board; if (!dev) return; board = (struct rtcan_ems_pci *)dev->board_priv; switch (init_step) { case 0: /* Full cleanup */ RTCAN_DBG("Removing %s %s device %s\n", ems_pci_board_name, dev->ctrl_name, dev->name); rtcan_sja1000_unregister(dev); case 5: case 4: iounmap((void *)board->base_addr); case 3: if (board->channel != EMS_PCI_SLAVE) iounmap((void *)board->conf_addr); case 2: rtcan_dev_free(dev); case 1: break; } }
static void rtcan_ixxat_pci_del_chan(struct rtcan_device *dev) { struct rtcan_ixxat_pci *board; u8 intcsr; if (!dev) return; board = (struct rtcan_ixxat_pci *)dev->board_priv; printk("Removing %s %s device %s\n", ixxat_pci_board_name, dev->ctrl_name, dev->name); rtcan_sja1000_unregister(dev); /* Disable PCI interrupts */ intcsr = inb(board->conf_addr + IXXAT_INTCSR_OFFSET); if (board->slave_dev) { intcsr &= ~IXXAT_INTCSR_MASTER; outb(intcsr, board->conf_addr + IXXAT_INTCSR_OFFSET); writeb(0x1, board->base_addr + CHANNEL_MASTER_RESET); iounmap(board->base_addr); } else { intcsr &= ~IXXAT_INTCSR_SLAVE; outb(intcsr, board->conf_addr + IXXAT_INTCSR_OFFSET); writeb(0x1, board->base_addr + CHANNEL_SLAVE_RESET ); } rtcan_dev_free(dev); }
void rtcan_peak_dng_exit_one(struct rtcan_device *dev) { struct rtcan_peak_dng *dng = (struct rtcan_peak_dng *)dev->board_priv; rtcan_sja1000_unregister(dev); rtcan_peak_dng_disable(dev); if (dng->type == DONGLE_TYPE_EPP) release_region(dng->ecr, ECR_PORT_SIZE); release_region(dng->ioport, DNG_PORT_SIZE); rtcan_dev_free(dev); }
/** Cleanup module */ static void rtcan_isa_exit(void) { int i; struct rtcan_device *dev; for (i = 0; i < RTCAN_ISA_MAX_DEV; i++) { dev = rtcan_isa_devs[i]; if (!dev) continue; rtcan_sja1000_unregister(dev); release_region(io[i], RTCAN_ISA_PORT_SIZE); rtcan_dev_free(dev); } }
static void rtcan_adv_pci_del_chan(struct pci_dev *pdev, struct rtcan_device *dev) { struct rtcan_adv_pci *board; if (!dev) return; board = (struct rtcan_adv_pci *)dev->board_priv; rtcan_sja1000_unregister(dev); pci_iounmap(pdev, board->base_addr); rtcan_dev_free(dev); }
static void rtcan_peak_pci_del_chan(struct rtcan_device *dev, int init_step) { struct rtcan_peak_pci *board; u16 pita_icr_high; if (!dev) return; board = (struct rtcan_peak_pci *)dev->board_priv; switch (init_step) { case 0: /* Full cleanup */ printk("Removing %s %s device %s\n", peak_pci_board_name, dev->ctrl_name, dev->name); rtcan_sja1000_unregister(dev); case 5: pita_icr_high = readw(board->conf_addr + PITA_ICR + 2); if (board->channel == CHANNEL_SLAVE) { pita_icr_high &= ~0x0001; } else { pita_icr_high &= ~0x0002; } writew(pita_icr_high, board->conf_addr + PITA_ICR + 2); case 4: iounmap((void *)board->base_addr); case 3: if (board->channel != CHANNEL_SLAVE) iounmap((void *)board->conf_addr); case 2: rtcan_dev_free(dev); case 1: break; } }