spi: Enable controllers to extend the SPI protocol with MOSI idle configuration
authorMarcelo Schmitt <marcelo.schmitt@analog.com>
Fri, 12 Jul 2024 19:20:36 +0000 (16:20 -0300)
committerMark Brown <broonie@kernel.org>
Mon, 29 Jul 2024 00:19:51 +0000 (01:19 +0100)
commitf58872f45c36ded048bccc22701b0986019c24d8
tree1e2057d2e84e9610908c84f55082df11d7a535a6
parent8400291e289ee6b2bf9779ff1c83a291501f017b
spi: Enable controllers to extend the SPI protocol with MOSI idle configuration

The behavior of an SPI controller data output line (SDO or MOSI or COPI
(Controller Output Peripheral Input) for disambiguation) is usually not
specified when the controller is not clocking out data on SCLK edges.
However, there do exist SPI peripherals that require specific MOSI line
state when data is not being clocked out of the controller.

Conventional SPI controllers may set the MOSI line on SCLK edges then bring
it low when no data is going out or leave the line the state of the last
transfer bit. More elaborated controllers are capable to set the MOSI idle
state according to different configurable levels and thus are more suitable
for interfacing with demanding peripherals.

Add SPI mode bits to allow peripherals to request explicit MOSI idle state
when needed.

When supporting a particular MOSI idle configuration, the data output line
state is expected to remain at the configured level when the controller is
not clocking out data. When a device that needs a specific MOSI idle state
is identified, its driver should request the MOSI idle configuration by
setting the proper SPI mode bit.

Acked-by: Nuno Sa <nuno.sa@analog.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Tested-by: David Lechner <dlechner@baylibre.com>
Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
Link: https://patch.msgid.link/9802160b5e5baed7f83ee43ac819cb757a19be55.1720810545.git.marcelo.schmitt@analog.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Documentation/spi/spi-summary.rst
drivers/spi/spi.c
include/uapi/linux/spi/spi.h