Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea3065df authored by Sascha Hauer's avatar Sascha Hauer Committed by Grant Likely
Browse files

spi/bitbang: check for setup_transfer during initialization



setup_transfer is mandatory if spi_bitbang_transfer is used, so
check for it during initialization and not each time during runtime.

Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent 1974eba6
Loading
Loading
Loading
Loading
+4 −9
Original line number Original line Diff line number Diff line
@@ -259,10 +259,6 @@ static void bitbang_work(struct work_struct *work)
	struct spi_bitbang	*bitbang =
	struct spi_bitbang	*bitbang =
		container_of(work, struct spi_bitbang, work);
		container_of(work, struct spi_bitbang, work);
	unsigned long		flags;
	unsigned long		flags;
	int			(*setup_transfer)(struct spi_device *,
					struct spi_transfer *);

	setup_transfer = bitbang->setup_transfer;


	spin_lock_irqsave(&bitbang->lock, flags);
	spin_lock_irqsave(&bitbang->lock, flags);
	bitbang->busy = 1;
	bitbang->busy = 1;
@@ -300,11 +296,7 @@ static void bitbang_work(struct work_struct *work)


			/* init (-1) or override (1) transfer params */
			/* init (-1) or override (1) transfer params */
			if (do_setup != 0) {
			if (do_setup != 0) {
				if (!setup_transfer) {
				status = bitbang->setup_transfer(spi, t);
					status = -ENOPROTOOPT;
					break;
				}
				status = setup_transfer(spi, t);
				if (status < 0)
				if (status < 0)
					break;
					break;
				if (do_setup == -1)
				if (do_setup == -1)
@@ -465,6 +457,9 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
		}
		}
	} else if (!bitbang->master->setup)
	} else if (!bitbang->master->setup)
		return -EINVAL;
		return -EINVAL;
	if (bitbang->master->transfer == spi_bitbang_transfer &&
			!bitbang->setup_transfer)
		return -EINVAL;


	/* this task is the only thing to touch the SPI bits */
	/* this task is the only thing to touch the SPI bits */
	bitbang->busy = 0;
	bitbang->busy = 0;