spi: dw: explicitly free IRQ handler in dw_spi_remove_host()
[cascardo/linux.git] / drivers / spi / spi-dw.c
index a730c35..221ff97 100644 (file)
@@ -486,8 +486,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
        dws->dma_addr = (dma_addr_t)(dws->paddr + 0x60);
        snprintf(dws->name, sizeof(dws->name), "dw_spi%d", dws->bus_num);
 
-       ret = devm_request_irq(dev, dws->irq, dw_spi_irq, IRQF_SHARED,
-                       dws->name, master);
+       ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dws->name, master);
        if (ret < 0) {
                dev_err(dev, "can not get IRQ\n");
                goto err_free_master;
@@ -532,6 +531,7 @@ err_dma_exit:
        if (dws->dma_ops && dws->dma_ops->dma_exit)
                dws->dma_ops->dma_exit(dws);
        spi_enable_chip(dws, 0);
+       free_irq(dws->irq, master);
 err_free_master:
        spi_master_put(master);
        return ret;
@@ -548,6 +548,8 @@ void dw_spi_remove_host(struct dw_spi *dws)
                dws->dma_ops->dma_exit(dws);
 
        spi_shutdown_chip(dws);
+
+       free_irq(dws->irq, dws->master);
 }
 EXPORT_SYMBOL_GPL(dw_spi_remove_host);