static void butterfly_detach(struct parport *p) { struct butterfly *pp; int status; /* FIXME this global is ugly ... but, how to quickly get from * the parport to the "struct butterfly" associated with it? * "old school" driver-internal device lists? */ if (!butterfly || butterfly->port != p) return; pp = butterfly; butterfly = NULL; /* stop() unregisters child devices too */ status = spi_bitbang_stop(&pp->bitbang); /* turn off VCC */ parport_write_data(pp->port, 0); msleep(10); parport_release(pp->pd); parport_unregister_device(pp->pd); (void) spi_master_put(pp->bitbang.master); }
static int __devexit spi_imx_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); struct spi_imx_data *spi_imx = spi_master_get_devdata(master); int i; spi_bitbang_stop(&spi_imx->bitbang); writel(0, spi_imx->base + MXC_CSPICTRL); clk_disable(spi_imx->clk); clk_put(spi_imx->clk); free_irq(spi_imx->irq, spi_imx); iounmap(spi_imx->base); for (i = 0; i < master->num_chipselect; i++) if (spi_imx->chipselect[i] >= 0) gpio_free(spi_imx->chipselect[i]); spi_master_put(master); release_mem_region(res->start, resource_size(res)); platform_set_drvdata(pdev, NULL); return 0; }
/** * davinci_spi_remove - remove function for SPI Master Controller * @dev: platform_device structure which contains plateform specific data * * This function will do the reverse action of davinci_spi_probe function * It will free the IRQ and SPI controller's memory region. * It will also call spi_bitbang_stop to destroy the work queue which was * created by spi_bitbang_start. */ static int __devexit davinci_spi_remove(struct device *d) { struct platform_device *dev = container_of(d, struct platform_device, dev); struct davinci_spi *davinci_spi; struct spi_master *master; struct davinci_spi_platform_data *pdata = dev->dev.platform_data; master = dev_get_drvdata(&(dev)->dev); davinci_spi = spi_master_get_devdata(master); spi_bitbang_stop(&davinci_spi->bitbang); kfree(davinci_spi->dma_channels); clk_disable(pdata->clk_info); clk_put(pdata->clk_info); pdata->clk_info = NULL; spi_master_put(master); kfree(davinci_spi->tmp_buf); free_irq(davinci_spi->irq, davinci_spi); iounmap(davinci_spi->base); release_mem_region(davinci_spi->pbase, davinci_spi->region_size); return 0; }
static int altera_spi_remove(struct platform_device *dev) { struct altera_spi *hw = platform_get_drvdata(dev); struct spi_master *master = hw->bitbang.master; spi_bitbang_stop(&hw->bitbang); spi_master_put(master); return 0; }
static int s3c2410_spigpio_remove(struct platform_device *dev) { struct s3c2410_spigpio *sp = platform_get_drvdata(dev); spi_bitbang_stop(&sp->bitbang); spi_master_put(sp->bitbang.master); return 0; }
static int s3c24xx_spi_remove(struct platform_device *dev) { struct s3c24xx_spi *hw = platform_get_drvdata(dev); spi_bitbang_stop(&hw->bitbang); clk_disable(hw->clk); spi_master_put(hw->master); return 0; }
static int sh_sci_spi_remove(struct platform_device *dev) { struct sh_sci_spi *sp = platform_get_drvdata(dev); iounmap(sp->membase); setbits(sp, PIN_INIT, 0); spi_bitbang_stop(&sp->bitbang); spi_master_put(sp->bitbang.master); return 0; }
static int dspi_remove(struct platform_device *pdev) { struct fsl_dspi *dspi = platform_get_drvdata(pdev); /* Disconnect from the SPI framework */ spi_bitbang_stop(&dspi->bitbang); spi_master_put(dspi->bitbang.master); return 0; }
static int ath79_spi_remove(struct platform_device *pdev) { struct ath79_spi *sp = platform_get_drvdata(pdev); spi_bitbang_stop(&sp->bitbang); ath79_spi_disable(sp); clk_disable(sp->clk); spi_master_put(sp->bitbang.master); return 0; }
static int ar71xx_spi_remove(struct platform_device *pdev) { struct ar71xx_spi *sp = platform_get_drvdata(pdev); spi_bitbang_stop(&sp->bitbang); iounmap(sp->base); platform_set_drvdata(pdev, NULL); spi_master_put(sp->bitbang.master); return 0; }
static void __ath79_spi_remove(struct platform_device *pdev) { struct ath79_spi *sp = platform_get_drvdata(pdev); spi_bitbang_stop(&sp->bitbang); ath79_spi_disable(sp); clk_disable(sp->clk); clk_put(sp->clk); iounmap(sp->base); platform_set_drvdata(pdev, NULL); spi_master_put(sp->bitbang.master); }
static int tiny_spi_remove(struct platform_device *pdev) { struct tiny_spi *hw = platform_get_drvdata(pdev); struct spi_master *master = hw->bitbang.master; unsigned int i; spi_bitbang_stop(&hw->bitbang); for (i = 0; i < hw->gpio_cs_count; i++) gpio_free(hw->gpio_cs[i]); spi_master_put(master); return 0; }
static int dspi_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); struct fsl_dspi *dspi = spi_master_get_devdata(master); /* Disconnect from the SPI framework */ spi_bitbang_stop(&dspi->bitbang); clk_disable_unprepare(dspi->clk); spi_master_put(dspi->bitbang.master); return 0; }
void xilinx_spi_deinit(struct spi_master *master) { struct xilinx_spi *xspi; xspi = spi_master_get_devdata(master); spi_bitbang_stop(&xspi->bitbang); free_irq(xspi->irq, xspi); iounmap(xspi->regs); release_mem_region(xspi->mem.start, resource_size(&xspi->mem)); spi_master_put(xspi->bitbang.master); }
static int spi_gpio_remove(struct platform_device *pdev) { struct spi_gpio *sp; struct spi_gpio_platform_data *pdata; pdata = pdev->dev.platform_data; sp = platform_get_drvdata(pdev); spi_bitbang_stop(&sp->bitbang); spi_master_put(sp->bitbang.master); return 0; }
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 spi_remove(struct platform_device *pdev) { struct ssc_pio_t *pio_info = (struct ssc_pio_t *)pdev->dev.platform_data; struct spi_stm_gpio *sp = platform_get_drvdata(pdev); dgb_print("\n"); spi_bitbang_stop(&sp->bitbang); spi_master_put(sp->bitbang.master); stpio_free_pin(pio_info->clk); stpio_free_pin(pio_info->sdout); stpio_free_pin(pio_info->sdin); return 0; }
static int spi_imx_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); 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_unprepare(spi_imx->clk_ipg); clk_unprepare(spi_imx->clk_per); spi_master_put(master); return 0; }
static int __exit mpc83xx_spi_remove(struct platform_device *dev) { struct mpc83xx_spi *mpc83xx_spi; struct spi_master *master; master = platform_get_drvdata(dev); mpc83xx_spi = spi_master_get_devdata(master); spi_bitbang_stop(&mpc83xx_spi->bitbang); free_irq(mpc83xx_spi->irq, mpc83xx_spi); iounmap(mpc83xx_spi->base); spi_master_put(mpc83xx_spi->bitbang.master); return 0; }
static int __devexit xilinx_spi_remove(struct of_device *ofdev) { struct xilinx_spi *xspi; struct spi_master *master; master = platform_get_drvdata(ofdev); xspi = spi_master_get_devdata(master); spi_bitbang_stop(&xspi->bitbang); free_irq(xspi->irq, xspi); iounmap(xspi->regs); dev_set_drvdata(&ofdev->dev, 0); spi_master_put(xspi->bitbang.master); return 0; }
static int efm32_spi_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); struct efm32_spi_ddata *ddata = spi_master_get_devdata(master); spi_bitbang_stop(&ddata->bitbang); efm32_spi_write32(ddata, 0, REG_IEN); free_irq(ddata->txirq, ddata); free_irq(ddata->rxirq, ddata); clk_disable_unprepare(ddata->clk); spi_master_put(master); return 0; }
static int __devexit spi_gpio_remove(struct platform_device *pdev) { struct spi_gpio *sp; struct spi_gpio_platform_data *pdata; pdata = pdev->dev.platform_data; sp = platform_get_drvdata(pdev); gpio_free(pdata->pin_clk); gpio_free(pdata->pin_mosi); gpio_free(pdata->pin_miso); gpio_free(pdata->pin_cs); spi_bitbang_stop(&sp->bitbang); spi_master_put(sp->bitbang.master); return 0; }
static int xilinx_spi_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); struct xilinx_spi *xspi = spi_master_get_devdata(master); void __iomem *regs_base = xspi->regs; spi_bitbang_stop(&xspi->bitbang); /* Disable all the interrupts just in case */ xspi->write_fn(0, regs_base + XIPIF_V123B_IIER_OFFSET); /* Disable the global IPIF interrupt */ xspi->write_fn(0, regs_base + XIPIF_V123B_DGIER_OFFSET); spi_master_put(xspi->bitbang.master); return 0; }
static int spi_sirfsoc_remove(struct platform_device *pdev) { struct spi_master *master; struct sirfsoc_spi *sspi; int i; master = platform_get_drvdata(pdev); sspi = spi_master_get_devdata(master); spi_bitbang_stop(&sspi->bitbang); for (i = 0; i < master->num_chipselect; i++) { if (sspi->chipselect[i] > 0) gpio_free(sspi->chipselect[i]); } clk_disable_unprepare(sspi->clk); clk_put(sspi->clk); spi_master_put(master); return 0; }
static int __devexit xilinx_spi_remove(struct of_device *ofdev) { struct xilinx_spi *xspi; struct spi_master *master; struct resource r_mem; master = platform_get_drvdata(ofdev); xspi = spi_master_get_devdata(master); spi_bitbang_stop(&xspi->bitbang); free_irq(xspi->irq, xspi); iounmap(xspi->regs); if (!of_address_to_resource(ofdev->node, 0, &r_mem)) release_mem_region(r_mem.start, resource_size(&r_mem)); dev_set_drvdata(&ofdev->dev, 0); spi_master_put(xspi->bitbang.master); return 0; }
static int nuc900_spi_remove(struct platform_device *dev) { struct nuc900_spi *hw = platform_get_drvdata(dev); free_irq(hw->irq, hw); spi_bitbang_stop(&hw->bitbang); clk_disable(hw->clk); clk_put(hw->clk); iounmap(hw->regs); release_mem_region(hw->res->start, resource_size(hw->res)); kfree(hw->ioarea); spi_master_put(hw->master); return 0; }
/** * davinci_spi_remove - remove function for SPI Master Controller * @pdev: platform_device structure which contains plateform specific data * * This function will do the reverse action of davinci_spi_probe function * It will free the IRQ and SPI controller's memory region. * It will also call spi_bitbang_stop to destroy the work queue which was * created by spi_bitbang_start. */ static int __exit davinci_spi_remove(struct platform_device *pdev) { struct davinci_spi *davinci_spi; struct spi_master *master; master = dev_get_drvdata(&pdev->dev); davinci_spi = spi_master_get_devdata(master); spi_bitbang_stop(&davinci_spi->bitbang); clk_disable(davinci_spi->clk); clk_put(davinci_spi->clk); spi_master_put(master); kfree(davinci_spi->tmp_buf); free_irq(davinci_spi->irq, davinci_spi); iounmap(davinci_spi->base); release_mem_region(davinci_spi->pbase, davinci_spi->region_size); return 0; }
static void spi_lm70llp_detach(struct parport *p) { struct spi_lm70llp *pp; if (!lm70llp || lm70llp->port != p) return; pp = lm70llp; spi_bitbang_stop(&pp->bitbang); parport_write_data(pp->port, 0); parport_release(pp->pd); parport_unregister_device(pp->pd); (void) spi_master_put(pp->bitbang.master); lm70llp = NULL; }
static int s3c24xx_spi_remove(struct platform_device *dev) { struct s3c24xx_spi *hw = platform_get_drvdata(dev); spi_bitbang_stop(&hw->bitbang); clk_disable(hw->clk); clk_put(hw->clk); free_irq(hw->irq, hw); iounmap(hw->regs); if (hw->set_cs == s3c24xx_spi_gpiocs) gpio_free(hw->pdata->pin_cs); release_resource(hw->ioarea); kfree(hw->ioarea); spi_master_put(hw->master); return 0; }
static void butterfly_detach(struct parport *p) { struct butterfly *pp; int status; if (!butterfly || butterfly->port != p) return; pp = butterfly; butterfly = NULL; /* stop() unregisters child devices too */ status = spi_bitbang_stop(&pp->bitbang); /* turn off VCC */ parport_write_data(pp->port, 0); msleep(10); parport_release(pp->pd); parport_unregister_device(pp->pd); (void) spi_master_put(pp->bitbang.master); }