diff options
| author | Yang Yingliang <yangyingliang@huawei.com> | 2021-04-01 22:03:50 +0800 | 
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2021-04-08 15:21:58 +0100 | 
| commit | 5fed9fe5b41aea58e5b32be506dc50c9ab9a0e4d (patch) | |
| tree | 91b16a06f56967e2320b43d1f7c36101620fa5a4 | |
| parent | d570838efb6fb3154cbd08ab1b22d1f6442b1e78 (diff) | |
spi: fsl: add missing iounmap() on error in of_fsl_spi_probe()
Add the missing iounmap() before return from of_fsl_spi_probe()
in the error handling case.
Fixes: 0f0581b24bd0 ("spi: fsl: Convert to use CS GPIO descriptors")
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20210401140350.1677925-1-yangyingliang@huawei.com
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | drivers/spi/spi-fsl-spi.c | 23 | 
1 files changed, 18 insertions, 5 deletions
| diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c index e4a8d203f940..d0e5aa18b7ba 100644 --- a/drivers/spi/spi-fsl-spi.c +++ b/drivers/spi/spi-fsl-spi.c @@ -707,6 +707,11 @@ static int of_fsl_spi_probe(struct platform_device *ofdev)  	struct resource mem;  	int irq, type;  	int ret; +	bool spisel_boot = false; +#if IS_ENABLED(CONFIG_FSL_SOC) +	struct mpc8xxx_spi_probe_info *pinfo = NULL; +#endif +  	ret = of_mpc8xxx_spi_probe(ofdev);  	if (ret) @@ -715,9 +720,8 @@ static int of_fsl_spi_probe(struct platform_device *ofdev)  	type = fsl_spi_get_type(&ofdev->dev);  	if (type == TYPE_FSL) {  		struct fsl_spi_platform_data *pdata = dev_get_platdata(dev); -		bool spisel_boot = false;  #if IS_ENABLED(CONFIG_FSL_SOC) -		struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata); +		pinfo = to_of_pinfo(pdata);  		spisel_boot = of_property_read_bool(np, "fsl,spisel_boot");  		if (spisel_boot) { @@ -746,15 +750,24 @@ static int of_fsl_spi_probe(struct platform_device *ofdev)  	ret = of_address_to_resource(np, 0, &mem);  	if (ret) -		return ret; +		goto unmap_out;  	irq = platform_get_irq(ofdev, 0); -	if (irq < 0) -		return irq; +	if (irq < 0) { +		ret = irq; +		goto unmap_out; +	}  	master = fsl_spi_probe(dev, &mem, irq);  	return PTR_ERR_OR_ZERO(master); + +unmap_out: +#if IS_ENABLED(CONFIG_FSL_SOC) +	if (spisel_boot) +		iounmap(pinfo->immr_spi_cs); +#endif +	return ret;  }  static int of_fsl_spi_remove(struct platform_device *ofdev) | 
