mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-06-29 23:43:21 -04:00
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: Mason Zhang <Mason.Zhang@mediatek.com> Link: https://lore.kernel.org/r/20210804133716.32040-1-Mason.Zhang@mediatek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
726e6f31b1
commit
8c33ebfeeb
2 changed files with 12 additions and 14 deletions
|
@ -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)
|
||||||
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);
|
||||||
* 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 {
|
||||||
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
|
||||||
* 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 {
|
||||||
/* 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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue