Commit 50658b66 authored by Linus Walleij's avatar Linus Walleij Committed by Grant Likely

spi/pl022: remove function cannot exit

The remove function in the PL022 driver cannot abort the remove
function any way, so restructure the code so as not to make that
assumption. Remove will now proceed no matter whether it can
stop the transfer queue or not.
Reported-by: default avatarRussell King <linux@arm.linux.org.uk>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent 5f66d2b5
...@@ -2267,17 +2267,13 @@ static int __devexit ...@@ -2267,17 +2267,13 @@ static int __devexit
pl022_remove(struct amba_device *adev) pl022_remove(struct amba_device *adev)
{ {
struct pl022 *pl022 = amba_get_drvdata(adev); struct pl022 *pl022 = amba_get_drvdata(adev);
int status = 0;
if (!pl022) if (!pl022)
return 0; return 0;
/* Remove the queue */ /* Remove the queue */
status = destroy_queue(pl022); if (destroy_queue(pl022) != 0)
if (status != 0) { dev_err(&adev->dev, "queue remove failed\n");
dev_err(&adev->dev,
"queue remove failed (%d)\n", status);
return status;
}
load_ssp_default_config(pl022); load_ssp_default_config(pl022);
pl022_dma_remove(pl022); pl022_dma_remove(pl022);
free_irq(adev->irq[0], pl022); free_irq(adev->irq[0], pl022);
...@@ -2289,7 +2285,6 @@ pl022_remove(struct amba_device *adev) ...@@ -2289,7 +2285,6 @@ pl022_remove(struct amba_device *adev)
spi_unregister_master(pl022->master); spi_unregister_master(pl022->master);
spi_master_put(pl022->master); spi_master_put(pl022->master);
amba_set_drvdata(adev, NULL); amba_set_drvdata(adev, NULL);
dev_dbg(&adev->dev, "remove succeeded\n");
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment