diff options
author | Tobias Jordan <Tobias.Jordan@elektrobit.com> | 2018-04-30 17:30:06 +0300 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2018-11-20 21:04:51 +0300 |
commit | 9960e579def38fc0846467db403ae587a3706c5c (patch) | |
tree | 5e15b4a07213d96dbb2980d55232441408edcd3b /drivers/spi/spi-pxa2xx.c | |
parent | 0dfb4c0eb22ca420703a0ff2a2524c0c66d43657 (diff) | |
download | linux-9960e579def38fc0846467db403ae587a3706c5c.tar.xz |
spi: pxa2xx: check clk_prepare_enable() return value
commit 62bbc864d1946c715063bd481bff3641fd1324e2 upstream.
clk_prepare_enable() can fail, so its return value should be checked and
acted upon.
Found by Linux Driver Verification project (linuxtesting.org).
Fixes: 3343b7a6d2cd ("spi/pxa2xx: convert to the common clk framework")
Signed-off-by: Tobias Jordan <Tobias.Jordan@elektrobit.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'drivers/spi/spi-pxa2xx.c')
-rw-r--r-- | drivers/spi/spi-pxa2xx.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index 4d7668c72ffc..5faf1bc87881 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c @@ -1182,7 +1182,9 @@ static int pxa2xx_spi_probe(struct platform_device *pdev) } /* Enable SOC clock */ - clk_prepare_enable(ssp->clk); + status = clk_prepare_enable(ssp->clk); + if (status) + goto out_error_dma_irq_alloc; drv_data->max_clk_rate = clk_get_rate(ssp->clk); @@ -1221,6 +1223,8 @@ static int pxa2xx_spi_probe(struct platform_device *pdev) out_error_clock_enabled: clk_disable_unprepare(ssp->clk); + +out_error_dma_irq_alloc: pxa2xx_spi_dma_release(drv_data); free_irq(ssp->irq, drv_data); @@ -1296,8 +1300,11 @@ static int pxa2xx_spi_resume(struct device *dev) pxa2xx_spi_dma_resume(drv_data); /* Enable the SSP clock */ - if (!pm_runtime_suspended(dev)) - clk_prepare_enable(ssp->clk); + if (!pm_runtime_suspended(dev)) { + status = clk_prepare_enable(ssp->clk); + if (status) + return status; + } /* Restore LPSS private register bits */ lpss_ssp_setup(drv_data); @@ -1325,9 +1332,10 @@ static int pxa2xx_spi_runtime_suspend(struct device *dev) static int pxa2xx_spi_runtime_resume(struct device *dev) { struct driver_data *drv_data = dev_get_drvdata(dev); + int status; - clk_prepare_enable(drv_data->ssp->clk); - return 0; + status = clk_prepare_enable(drv_data->ssp->clk); + return status; } #endif |