[PATCH v4 1/2] spi: implemented driver for Cirrus EP93xx SPI controller
H Hartley Sweeten
hartleys at visionengravers.com
Tue Apr 20 13:24:26 EDT 2010
On Tuesday, April 20, 2010 8:12 AM, Mika Westerberg wrote:
> This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found
> in EP93xx chips (EP9301, EP9302, EP9307, EP9312 and EP9315).
>
> Signed-off-by: Mika Westerberg <mika.westerberg at iki.fi>
Mika,
I'm still looking this over but I have one quick comment.
> +/**
> + * ep93xx_spi_select_device() - select given SPI device
> + * @espi: ep93xx SPI controller struct
> + * @spi: SPI device to select
> + *
> + * Function asserts chipselect line as specified in @spi->chip_select in board
> + * specific manner.
> + *
> + * Note that this function is called from a thread context and can sleep.
> + */
> +static inline void ep93xx_spi_select_device(const struct ep93xx_spi *espi,
> + struct spi_device *spi)
> +{
> + if (espi->cs_control)
> + espi->cs_control(spi, !!(spi->mode & SPI_CS_HIGH));
> +}
> +
> +/**
> + * ep93xx_spi_deselect_device() - deselects given SPI device
> + * @espi: ep93xx SPI controller struct
> + * @spi: SPI device to deselect
> + *
> + * Function deasserts chipselect line as specified in @spi->chip_select in board
> + * specific manner.
> + *
> + * Note that this function is called from a thread context and can sleep.
> + */
> +static inline void ep93xx_spi_deselect_device(const struct ep93xx_spi *espi,
> + struct spi_device *spi)
> +{
> + if (espi->cs_control)
> + espi->cs_control(spi, !(spi->mode & SPI_CS_HIGH));
> +}
These two functions can be combined.
/**
* ep93xx_spi_chip_select() - select/deselect a given SPI device
* @espi: ep93xx SPI controller struct
* @spi: SPI device to select
* @assert: flag to assert the chip select line
*
* Note that this function is called from a thread context and can sleep.
*/
static void ep93xx_spi_chip_select(const struct ep93xx_spi *espi,
struct spi_device *spi, int assert)
{
int value = (spi->mode & SPI_CS_HIGH) ? !!assert : !assert;
if (espi->cs_control)
espi->cs_control(spi, value);
}
Then just do:
ep93xx_spi_select_device(espi, msg->spi, 1); /* assert the spi chip select */
ep93xx_spi_select_device(espi, msg->spi, 0); /* deassert the spi chip select */
Regards,
Hartley
More information about the linux-arm-kernel
mailing list