diff options
| author | Greg Kroah-Hartman <[email protected]> | 2021-06-14 07:14:43 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2021-06-14 07:14:43 +0000 |
| commit | 99289bf1a76c0aea6ac0f77335b8c9bdca16aac7 (patch) | |
| tree | 69b9484abfd6014154b925fdc0733438ffdf923f /drivers/spi/spi-bitbang.c | |
| parent | vt: vt_kern.h, remove the repeated declaration (diff) | |
| parent | Linux 5.13-rc6 (diff) | |
| download | kernel-99289bf1a76c0aea6ac0f77335b8c9bdca16aac7.tar.gz kernel-99289bf1a76c0aea6ac0f77335b8c9bdca16aac7.zip | |
Merge tag 'v5.13-rc6' into tty-next
We want the tty fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'drivers/spi/spi-bitbang.c')
| -rw-r--r-- | drivers/spi/spi-bitbang.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c index 6a6af85aebfd..27d0087f8688 100644 --- a/drivers/spi/spi-bitbang.c +++ b/drivers/spi/spi-bitbang.c @@ -184,6 +184,8 @@ int spi_bitbang_setup(struct spi_device *spi) { struct spi_bitbang_cs *cs = spi->controller_state; struct spi_bitbang *bitbang; + bool initial_setup = false; + int retval; bitbang = spi_master_get_devdata(spi->master); @@ -192,22 +194,30 @@ int spi_bitbang_setup(struct spi_device *spi) if (!cs) return -ENOMEM; spi->controller_state = cs; + initial_setup = true; } /* per-word shift register access, in hardware or bitbanging */ cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL|SPI_CPHA)]; - if (!cs->txrx_word) - return -EINVAL; + if (!cs->txrx_word) { + retval = -EINVAL; + goto err_free; + } if (bitbang->setup_transfer) { - int retval = bitbang->setup_transfer(spi, NULL); + retval = bitbang->setup_transfer(spi, NULL); if (retval < 0) - return retval; + goto err_free; } dev_dbg(&spi->dev, "%s, %u nsec/bit\n", __func__, 2 * cs->nsecs); return 0; + +err_free: + if (initial_setup) + kfree(cs); + return retval; } EXPORT_SYMBOL_GPL(spi_bitbang_setup); |
