svn commit: r298273 - head/sys/dev/xilinx
Ruslan Bukin
br at FreeBSD.org
Tue Apr 19 15:36:19 UTC 2016
Author: br
Date: Tue Apr 19 15:36:18 2016
New Revision: 298273
URL: https://svnweb.freebsd.org/changeset/base/298273
Log:
Assert CS for single transfers.
Modified:
head/sys/dev/xilinx/axi_quad_spi.c
Modified: head/sys/dev/xilinx/axi_quad_spi.c
==============================================================================
--- head/sys/dev/xilinx/axi_quad_spi.c Tue Apr 19 15:18:31 2016 (r298272)
+++ head/sys/dev/xilinx/axi_quad_spi.c Tue Apr 19 15:36:18 2016 (r298273)
@@ -123,33 +123,6 @@ spi_probe(device_t dev)
}
static int
-spi_chip_select(device_t dev, device_t child)
-{
- struct spi_softc *sc;
- uint32_t cs;
-
- sc = device_get_softc(dev);
-
- spibus_get_cs(child, &cs);
-
- WRITE4(sc, SPI_SSR, ~(1 << cs));
-
- return (0);
-}
-
-static int
-spi_chip_deselect(device_t dev, device_t child)
-{
- struct spi_softc *sc;
-
- sc = device_get_softc(dev);
-
- WRITE4(sc, SPI_SSR, ~0);
-
- return (0);
-}
-
-static int
spi_attach(device_t dev)
{
struct spi_softc *sc;
@@ -207,6 +180,7 @@ static int
spi_transfer(device_t dev, device_t child, struct spi_command *cmd)
{
struct spi_softc *sc;
+ uint32_t reg;
uint32_t cs;
sc = device_get_softc(dev);
@@ -219,12 +193,22 @@ spi_transfer(device_t dev, device_t chil
/* get the proper chip select */
spibus_get_cs(child, &cs);
+ /* Assert CS */
+ reg = READ4(sc, SPI_SSR);
+ reg &= ~(1 << cs);
+ WRITE4(sc, SPI_SSR, reg);
+
/* Command */
spi_txrx(sc, cmd->tx_cmd, cmd->rx_cmd, cmd->tx_cmd_sz, cs);
/* Data */
spi_txrx(sc, cmd->tx_data, cmd->rx_data, cmd->tx_data_sz, cs);
+ /* Deassert CS */
+ reg = READ4(sc, SPI_SSR);
+ reg |= (1 << cs);
+ WRITE4(sc, SPI_SSR, reg);
+
return (0);
}
@@ -235,9 +219,6 @@ static device_method_t spi_methods[] = {
/* SPI interface */
DEVMETHOD(spibus_transfer, spi_transfer),
- DEVMETHOD(spibus_chip_select, spi_chip_select),
- DEVMETHOD(spibus_chip_deselect, spi_chip_deselect),
-
DEVMETHOD_END
};
More information about the svn-src-head
mailing list