static void pnpide_init(int enable) { struct pci_dev *dev = NULL; struct pnp_dev_t *dev_type; if (!isapnp_present()) return; /* Module unload, deactivate all registered devices. */ if (!enable) { int i; for (i = 0; i < pnp_ide_dev_idx; i++) { dev = devices[i].dev; devices[i].dev_type->init_fn(dev, 0); if (dev->deactivate) dev->deactivate(dev); } return; } for (dev_type = idepnp_devices; dev_type->vendor; dev_type++) { while ((dev = isapnp_find_dev(NULL, dev_type->vendor, dev_type->device, dev))) { if (dev->active) continue; if (dev->prepare && dev->prepare(dev) < 0) { printk(KERN_ERR"ide-pnp: %s prepare failed\n", DEV_NAME(dev)); continue; } if (dev->activate && dev->activate(dev) < 0) { printk(KERN_ERR"ide: %s activate failed\n", DEV_NAME(dev)); continue; } /* Call device initialization function */ if (dev_type->init_fn(dev, 1)) { if (dev->deactivate(dev)) dev->deactivate(dev); } else { #ifdef MODULE /* * Register device in the array to * deactivate it on a module unload. */ if (pnp_ide_dev_idx >= NR_PNP_DEVICES) return; devices[pnp_ide_dev_idx].dev = dev; devices[pnp_ide_dev_idx].dev_type = dev_type; pnp_ide_dev_idx++; #endif } } } }
static int __init pnpide_generic_init(struct pci_dev *dev, int enable) { hw_regs_t hw; int index; if (!enable) return 0; if (!(DEV_IO(dev, 0) && DEV_IO(dev, 1) && DEV_IRQ(dev, 0))) return 1; ide_setup_ports(&hw, (ide_ioreg_t) DEV_IO(dev, 0), generic_ide_offsets, (ide_ioreg_t) DEV_IO(dev, 1), 0, NULL, // generic_pnp_ide_iops, DEV_IRQ(dev, 0)); index = ide_register_hw(&hw, NULL); if (index != -1) { printk(KERN_INFO "ide%d: %s IDE interface\n", index, DEV_NAME(dev)); return 0; } return 1; }
static int adc_sam_initialize(struct device *dev) { const struct adc_sam_dev_cfg *dev_cfg = DEV_CFG(dev); struct adc_sam_dev_data *const dev_data = DEV_DATA(dev); /* Initialize semaphores */ k_sem_init(&dev_data->sem_meas, 0, 1); k_sem_init(&dev_data->mutex_thread, 1, 1); /* Configure interrupts */ dev_cfg->irq_config(); /* Enable module's clock */ soc_pmc_peripheral_enable(dev_cfg->periph_id); /* Configure ADC */ adc_sam_configure(dev); /* Enable module interrupt */ irq_enable(dev_cfg->irq_id); SYS_LOG_INF("Device %s initialized", DEV_NAME(dev)); return 0; }
static int i2c_sam_twi_initialize(struct device *dev) { const struct i2c_sam_twi_dev_cfg *const dev_cfg = DEV_CFG(dev); struct i2c_sam_twi_dev_data *const dev_data = DEV_DATA(dev); Twi *const twi = dev_cfg->regs; u32_t bitrate_cfg; int ret; /* Configure interrupts */ dev_cfg->irq_config(); /* Initialize semaphore */ k_sem_init(&dev_data->sem, 0, 1); /* Connect pins to the peripheral */ soc_gpio_list_configure(dev_cfg->pin_list, dev_cfg->pin_list_size); /* Enable module's clock */ soc_pmc_peripheral_enable(dev_cfg->periph_id); /* Reset TWI module */ twi->TWI_CR = TWI_CR_SWRST; bitrate_cfg = _i2c_map_dt_bitrate(dev_cfg->bitrate); ret = i2c_sam_twi_configure(dev, I2C_MODE_MASTER | bitrate_cfg); if (ret < 0) { LOG_ERR("Failed to initialize %s device", DEV_NAME(dev)); return ret; } /* Enable module's IRQ */ irq_enable(dev_cfg->irq_id); LOG_INF("Device %s initialized", DEV_NAME(dev)); return 0; }
static int dw_dma0_initialize(struct device *dev) { const struct dw_dma_dev_cfg *const dev_cfg = DEV_CFG(dev); /* Disable all channels and Channel interrupts */ dw_dma_setup(dev); /* Configure interrupts */ dev_cfg->irq_config(); /* Enable module's IRQ */ irq_enable(dev_cfg->irq_id); SYS_LOG_INF("Device %s initialized", DEV_NAME(dev)); return 0; }
static int sam_xdmac_initialize(struct device *dev) { const struct sam_xdmac_dev_cfg *const dev_cfg = DEV_CFG(dev); Xdmac *const xdmac = dev_cfg->regs; /* Configure interrupts */ dev_cfg->irq_config(); /* Enable module's clock */ soc_pmc_peripheral_enable(dev_cfg->periph_id); /* Disable all channels */ xdmac->XDMAC_GD = UINT32_MAX; /* Disable all channel interrupts */ xdmac->XDMAC_GID = UINT32_MAX; /* Enable module's IRQ */ irq_enable(dev_cfg->irq_id); SYS_LOG_INF("Device %s initialized", DEV_NAME(dev)); return 0; }