Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

spi: bitbang: Make setup_transfer() callback optional

Some controller drivers have no need of this callback (spi-altera even
causes a NULL pointer dereference because it doesn't register the callback,
falsely assuming that it is already optional).

Fixes: 30af9b558a56 ("spi/bitbang: Drop empty setup() functions")
Signed-off-by: Pelle Nilsson <per.nilsson@xelmo.com>
Reviewed-by: Ezequiel Garcia <ezequiel.garcia@vanguardiasur.com.ar>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Pelle Nilsson and committed by
Mark Brown
7d0ec8b6 c517d838

+10 -7
+10 -7
drivers/spi/spi-bitbang.c
··· 180 180 { 181 181 struct spi_bitbang_cs *cs = spi->controller_state; 182 182 struct spi_bitbang *bitbang; 183 - int retval; 184 183 unsigned long flags; 185 184 186 185 bitbang = spi_master_get_devdata(spi->master); ··· 196 197 if (!cs->txrx_word) 197 198 return -EINVAL; 198 199 199 - retval = bitbang->setup_transfer(spi, NULL); 200 - if (retval < 0) 201 - return retval; 200 + if (bitbang->setup_transfer) { 201 + int retval = bitbang->setup_transfer(spi, NULL); 202 + if (retval < 0) 203 + return retval; 204 + } 202 205 203 206 dev_dbg(&spi->dev, "%s, %u nsec/bit\n", __func__, 2 * cs->nsecs); 204 207 ··· 296 295 297 296 /* init (-1) or override (1) transfer params */ 298 297 if (do_setup != 0) { 299 - status = bitbang->setup_transfer(spi, t); 300 - if (status < 0) 301 - break; 298 + if (bitbang->setup_transfer) { 299 + status = bitbang->setup_transfer(spi, t); 300 + if (status < 0) 301 + break; 302 + } 302 303 if (do_setup == -1) 303 304 do_setup = 0; 304 305 }