Unverified Commit 8c33ebfe authored by Mason Zhang's avatar Mason Zhang Committed by Mark Brown
Browse files

spi: move cs spi_delay to spi_device



As we know, spi core layer has removed spi_set_cs_timing() API.
So this patch moved spi_delay for cs_timing from spi_controller
to spi_device, because cs timing should be set by spi_device but
not controller.

Signed-off-by: default avatarMason Zhang <Mason.Zhang@mediatek.com>
Link: https://lore.kernel.org/r/20210804133716.32040-1-Mason.Zhang@mediatek.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 726e6f31
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -842,9 +842,9 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force)
	if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) ||
	    !spi->controller->set_cs_timing) {
		if (activate)
			spi_delay_exec(&spi->controller->cs_setup, NULL);
			spi_delay_exec(&spi->cs_setup, NULL);
		else
			spi_delay_exec(&spi->controller->cs_hold, NULL);
			spi_delay_exec(&spi->cs_hold, NULL);
	}

	if (spi->mode & SPI_CS_HIGH)
@@ -887,7 +887,7 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force)
	if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) ||
	    !spi->controller->set_cs_timing) {
		if (!activate)
			spi_delay_exec(&spi->controller->cs_inactive, NULL);
			spi_delay_exec(&spi->cs_inactive, NULL);
	}
}

+9 −11
Original line number Diff line number Diff line
@@ -147,7 +147,11 @@ extern int spi_delay_exec(struct spi_delay *_delay, struct spi_transfer *xfer);
 *	not using a GPIO line)
 * @word_delay: delay to be inserted between consecutive
 *	words of a transfer
 *
 * @cs_setup: delay to be introduced by the controller after CS is asserted
 * @cs_hold: delay to be introduced by the controller before CS is deasserted
 * @cs_inactive: delay to be introduced by the controller after CS is
 *	deasserted. If @cs_change_delay is used from @spi_transfer, then the
 *	two delays will be added up.
 * @statistics: statistics for the spi_device
 *
 * A @spi_device is used to interchange data between an SPI slave
@@ -188,6 +192,10 @@ struct spi_device {
	int			cs_gpio;	/* LEGACY: chip select gpio */
	struct gpio_desc	*cs_gpiod;	/* chip select gpio desc */
	struct spi_delay	word_delay; /* inter-word delay */
	/* CS delays */
	struct spi_delay	cs_setup;
	struct spi_delay	cs_hold;
	struct spi_delay	cs_inactive;

	/* the statistics */
	struct spi_statistics	statistics;
@@ -413,11 +421,6 @@ extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
 *	     controller has native support for memory like operations.
 * @unprepare_message: undo any work done by prepare_message().
 * @slave_abort: abort the ongoing transfer request on an SPI slave controller
 * @cs_setup: delay to be introduced by the controller after CS is asserted
 * @cs_hold: delay to be introduced by the controller before CS is deasserted
 * @cs_inactive: delay to be introduced by the controller after CS is
 *	deasserted. If @cs_change_delay is used from @spi_transfer, then the
 *	two delays will be added up.
 * @cs_gpios: LEGACY: array of GPIO descs to use as chip select lines; one per
 *	CS number. Any individual value may be -ENOENT for CS lines that
 *	are not GPIOs (driven by the SPI controller itself). Use the cs_gpiods
@@ -639,11 +642,6 @@ struct spi_controller {
	/* Optimized handlers for SPI memory-like operations. */
	const struct spi_controller_mem_ops *mem_ops;

	/* CS delays */
	struct spi_delay	cs_setup;
	struct spi_delay	cs_hold;
	struct spi_delay	cs_inactive;

	/* gpio chip select */
	int			*cs_gpios;
	struct gpio_desc	**cs_gpiods;