linux/drivers/spi
Serge Semin 9aea644ca1
spi: dw: Fix native CS being unset
Commit 6e0a32d6f3 ("spi: dw: Fix default polarity of native
chipselect") attempted to fix the problem when GPIO active-high
chip-select is utilized to communicate with some SPI slave. It fixed
the problem, but broke the normal native CS support. At the same time
the reversion commit ada9e3fcc1 ("spi: dw: Correct handling of native
chipselect") didn't solve the problem either, since it just inverted
the set_cs() polarity perception without taking into account that
CS-high might be applicable. Here is what is done to finally fix the
problem.

DW SPI controller demands any native CS being set in order to proceed
with data transfer. So in order to activate the SPI communications we
must set any bit in the Slave Select DW SPI controller register no
matter whether the platform requests the GPIO- or native CS. Preferably
it should be the bit corresponding to the SPI slave CS number. But
currently the dw_spi_set_cs() method activates the chip-select
only if the second argument is false. Since the second argument of the
set_cs callback is expected to be a boolean with "is-high" semantics
(actual chip-select pin state value), the bit in the DW SPI Slave
Select register will be set only if SPI core requests the driver
to set the CS in the low state. So this will work for active-low
GPIO-based CS case, and won't work for active-high CS setting
the bit when SPI core actually needs to deactivate the CS.

This commit fixes the problem for all described cases. So no matter
whether an SPI slave needs GPIO- or native-based CS with active-high
or low signal the corresponding bit will be set in SER.

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Fixes: ada9e3fcc1 ("spi: dw: Correct handling of native chipselect")
Fixes: 6e0a32d6f3 ("spi: dw: Fix default polarity of native chipselect")
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>

Link: https://lore.kernel.org/r/20200515104758.6934-5-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Mark Brown <broonie@kernel.org>
2020-05-15 18:29:15 +01:00
..
atmel-quadspi.c spi: atmel-quadspi: Add verbose debug facilities to monitor register accesses 2020-03-20 13:03:38 +00:00
internals.h
Kconfig spi: uniphier: Depend on HAS_IOMEM 2020-05-11 18:17:51 +01:00
Makefile spi: spi-amd: Add AMD SPI controller driver support 2020-04-27 16:38:32 +01:00
spi-altera.c
spi-amd.c spi: amd: Drop superfluous member from struct amd_spi 2020-05-04 17:18:49 +01:00
spi-ar934x.c
spi-armada-3700.c spi: a3700: make a3700_spi_init() return void 2020-05-06 15:55:13 +01:00
spi-at91-usart.c
spi-ath79.c
spi-atmel.c spi: atmel: Add missing annotation for atmel_spi_next_xfer_dma_submit() 2020-04-30 15:35:25 +01:00
spi-au1550.c
spi-axi-spi-engine.c spi: spi-axi-spi-engine: Access register after clock initialization 2020-04-09 18:46:53 +01:00
spi-bcm63xx-hsspi.c
spi-bcm63xx.c
spi-bcm2835.c spi: bcm2835: Fix error return code in bcm2835_dma_init() 2020-05-06 15:55:14 +01:00
spi-bcm2835aux.c
spi-bcm-qspi.c Merge branch 'for-5.7' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-5.8 2020-05-05 11:48:25 +01:00
spi-bcm-qspi.h
spi-bitbang-txrx.h
spi-bitbang.c
spi-brcmstb-qspi.c
spi-butterfly.c
spi-cadence.c
spi-cavium-octeon.c
spi-cavium-thunderx.c
spi-cavium.c
spi-cavium.h
spi-clps711x.c
spi-coldfire-qspi.c
spi-davinci.c
spi-dln2.c
spi-dw-mid.c spi: dw: Get rid of dma_inited flag 2020-05-07 13:43:00 +01:00
spi-dw-mmio.c spi: dw: Drop duplicate error message when remap resource 2020-05-12 17:35:34 +01:00
spi-dw-pci.c spi: dw: Add Elkhart Lake PSE DMA support 2020-05-06 18:11:36 +01:00
spi-dw.c spi: dw: Fix native CS being unset 2020-05-15 18:29:15 +01:00
spi-dw.h spi: dw: Get rid of dma_inited flag 2020-05-07 13:43:00 +01:00
spi-efm32.c spi: efm32: Convert to use GPIO descriptors 2020-03-27 15:52:23 +00:00
spi-ep93xx.c spi: spi-ep93xx: fix wrong SPI mode selection 2020-04-03 14:55:55 +01:00
spi-falcon.c
spi-fsi.c spi: Add FSI-attached SPI controller driver 2020-03-10 14:11:57 +00:00
spi-fsl-cpm.c
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: Adding shutdown hook 2020-04-24 13:56:38 +01:00
spi-fsl-espi.c
spi-fsl-lib.c
spi-fsl-lib.h
spi-fsl-lpspi.c spi: spi-fsl-lpspi: Fix indentation and open brace should be on the previous line 2020-04-14 18:36:28 +01:00
spi-fsl-qspi.c spi: spi-fsl-qspi: Fix return value check of devm_ioremap() in probe 2020-04-22 14:07:46 +01:00
spi-fsl-spi.c spi: spi-fsl-spi: Fix checkpatch error "foo * bar" should be "foo *bar" 2020-04-14 18:36:30 +01:00
spi-fsl-spi.h
spi-geni-qcom.c
spi-gpio.c
spi-hisi-sfc-v3xx.c spi: hisi-sfc-v3xx: add error check after per operation 2020-04-17 14:21:00 +01:00
spi-img-spfi.c
spi-imx.c
spi-iproc-qspi.c
spi-jcore.c
spi-lantiq-ssc.c
spi-lm70llp.c
spi-loopback-test.c
spi-lp8841-rtc.c
spi-mem.c spi: spi-mem: Fix Dual/Quad modes on Octal-capable devices 2020-04-23 16:35:27 +01:00
spi-meson-spicc.c spi: meson-spicc: add support for Amlogic G12A 2020-03-12 17:22:55 +00:00
spi-meson-spifc.c
spi-mpc52xx-psc.c
spi-mpc52xx.c
spi-mpc512x-psc.c
spi-mt65xx.c
spi-mt7621.c
spi-mtk-nor.c spi: spi-mtk-nor: make mtk_nor_exec_op() statuc 2020-04-14 18:36:33 +01:00
spi-mux.c
spi-mxic.c
spi-mxs.c spi: mxs: Drop GPIO includes 2020-03-17 13:20:16 +00:00
spi-npcm-fiu.c
spi-npcm-pspi.c
spi-nxp-fspi.c spi: spi-nxp-fspi: Fix a NULL vs IS_ERR() check in probe 2020-03-12 15:09:58 +00:00
spi-oc-tiny.c
spi-omap2-mcspi.c
spi-omap-100k.c
spi-omap-uwire.c
spi-orion.c spi: orion: Convert to use GPIO descriptors 2020-04-21 19:48:05 +01:00
spi-pic32-sqi.c
spi-pic32.c
spi-pl022.c
spi-ppc4xx.c
spi-pxa2xx-dma.c
spi-pxa2xx-pci.c
spi-pxa2xx.c spi: pxa2xx: Apply CS clk quirk to BXT 2020-04-30 15:22:58 +01:00
spi-pxa2xx.h
spi-qcom-qspi.c
spi-qup.c
spi-rb4xx.c
spi-rockchip.c spi: rockchip: add compatible string for px30 rk3308 rk3328 2020-03-10 14:30:56 +00:00
spi-rspi.c spi: rspi: Add support for active-high chip selects 2020-03-10 14:30:56 +00:00
spi-s3c24xx-fiq.h
spi-s3c24xx-fiq.S
spi-s3c24xx.c spi: spi-s3c24xx: Replace zero-length array with flexible-array member 2020-03-23 18:37:06 +00:00
spi-s3c64xx.c
spi-sc18is602.c spi: sc18is602: Fix a typo in MODULE_DESCRIPTION 2020-04-14 12:39:37 +01:00
spi-sh-hspi.c
spi-sh-msiof.c spi: spi-sh-msiof: Fix checkpatch error Complex macros should use () 2020-04-14 18:36:34 +01:00
spi-sh-sci.c
spi-sh.c
spi-sifive.c
spi-sirf.c
spi-slave-mt27xx.c
spi-slave-system-control.c
spi-slave-time.c
spi-sprd-adi.c spi: sprd: adi: Use IS_ENABLED() to validate configs 2020-04-14 18:36:32 +01:00
spi-sprd.c
spi-st-ssc4.c
spi-stm32-qspi.c spi: stm32-qspi: Fix unbalanced pm_runtime_enable issue 2020-04-29 18:52:16 +01:00
spi-stm32.c spi: stm32: Fix comments compilation warnings 2020-03-20 21:01:40 +00:00
spi-sun4i.c
spi-sun6i.c spi: sun6i: Add support for GPIO chip select lines 2020-05-11 18:17:53 +01:00
spi-synquacer.c
spi-tegra20-sflash.c
spi-tegra20-slink.c
spi-tegra114.c
spi-test.h
spi-ti-qspi.c
spi-tle62x0.c
spi-topcliff-pch.c
spi-txx9.c
spi-uniphier.c spi: uniphier: Use devm_platform_get_and_ioremap_resource() to simplify code 2020-05-11 18:17:52 +01:00
spi-xcomm.c
spi-xilinx.c
spi-xlp.c
spi-xtensa-xtfpga.c
spi-zynq-qspi.c
spi-zynqmp-gqspi.c
spi.c Merge branch 'for-5.7' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-5.8 2020-05-05 11:48:25 +01:00
spidev.c spi: spidev: Add support for Octal mode data transfers 2020-04-16 13:54:44 +01:00