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

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.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 726e6f31
...@@ -842,9 +842,9 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force) ...@@ -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) || if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) ||
!spi->controller->set_cs_timing) { !spi->controller->set_cs_timing) {
if (activate) if (activate)
spi_delay_exec(&spi->controller->cs_setup, NULL); spi_delay_exec(&spi->cs_setup, NULL);
else else
spi_delay_exec(&spi->controller->cs_hold, NULL); spi_delay_exec(&spi->cs_hold, NULL);
} }
if (spi->mode & SPI_CS_HIGH) if (spi->mode & SPI_CS_HIGH)
...@@ -887,7 +887,7 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force) ...@@ -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) || if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) ||
!spi->controller->set_cs_timing) { !spi->controller->set_cs_timing) {
if (!activate) if (!activate)
spi_delay_exec(&spi->controller->cs_inactive, NULL); spi_delay_exec(&spi->cs_inactive, NULL);
} }
} }
......
...@@ -147,7 +147,11 @@ extern int spi_delay_exec(struct spi_delay *_delay, struct spi_transfer *xfer); ...@@ -147,7 +147,11 @@ extern int spi_delay_exec(struct spi_delay *_delay, struct spi_transfer *xfer);
* not using a GPIO line) * not using a GPIO line)
* @word_delay: delay to be inserted between consecutive * @word_delay: delay to be inserted between consecutive
* words of a transfer * 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 * @statistics: statistics for the spi_device
* *
* A @spi_device is used to interchange data between an SPI slave * A @spi_device is used to interchange data between an SPI slave
...@@ -188,6 +192,10 @@ struct spi_device { ...@@ -188,6 +192,10 @@ struct spi_device {
int cs_gpio; /* LEGACY: chip select gpio */ int cs_gpio; /* LEGACY: chip select gpio */
struct gpio_desc *cs_gpiod; /* chip select gpio desc */ struct gpio_desc *cs_gpiod; /* chip select gpio desc */
struct spi_delay word_delay; /* inter-word delay */ 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 */ /* the statistics */
struct spi_statistics statistics; struct spi_statistics statistics;
...@@ -413,11 +421,6 @@ extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch ...@@ -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. * controller has native support for memory like operations.
* @unprepare_message: undo any work done by prepare_message(). * @unprepare_message: undo any work done by prepare_message().
* @slave_abort: abort the ongoing transfer request on an SPI slave controller * @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_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 * 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 * are not GPIOs (driven by the SPI controller itself). Use the cs_gpiods
...@@ -639,11 +642,6 @@ struct spi_controller { ...@@ -639,11 +642,6 @@ struct spi_controller {
/* Optimized handlers for SPI memory-like operations. */ /* Optimized handlers for SPI memory-like operations. */
const struct spi_controller_mem_ops *mem_ops; 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 */ /* gpio chip select */
int *cs_gpios; int *cs_gpios;
struct gpio_desc **cs_gpiods; struct gpio_desc **cs_gpiods;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment