static int spi_imx_remove(struct vmm_device *dev) { struct spi_master *master = vmm_devdrv_get_data(dev); struct spi_imx_data *spi_imx = spi_master_get_devdata(master); spi_bitbang_stop(&spi_imx->bitbang); writel(0, spi_imx->base + MXC_CSPICTRL); clk_disable_unprepare(spi_imx->clk_ipg); clk_disable_unprepare(spi_imx->clk_per); spi_master_put(master); return 0; }
static int sram_remove(struct vmm_device *dev) { struct sram_dev *sram = vmm_devdrv_get_data(dev); if (gen_pool_avail(sram->pool) < gen_pool_size(sram->pool)) vmm_printf("%s: removed while SRAM allocated\n", dev->name); gen_pool_destroy(sram->pool); if (sram->clk) clk_disable_unprepare(sram->clk); return 0; }
static int amba_kmi_driver_remove(struct vmm_device *dev) { struct amba_kmi_port *kmi = (struct amba_kmi_port *)vmm_devdrv_get_data(dev); vmm_devdrv_set_data(dev, NULL); serio_unregister_port(kmi->io); clk_put(kmi->clk); vmm_devtree_regunmap_release(dev->node, (virtual_addr_t)kmi->base, 0); kfree(kmi); return VMM_OK; }