static int davinci_spi_setup(struct spi_device *spi) { int retval; struct davinci_spi *davinci_spi; struct davinci_spi_dma *davinci_spi_dma; davinci_spi = spi_master_get_devdata(spi->master); /* if bits per word length is zero then set it default 8 */ if (!spi->bits_per_word) spi->bits_per_word = 8; davinci_spi->slave[spi->chip_select].cmd_to_write = 0; if (use_dma && davinci_spi->dma_channels) { davinci_spi_dma = &davinci_spi->dma_channels[spi->chip_select]; if ((davinci_spi_dma->dma_rx_channel == -1) || (davinci_spi_dma->dma_tx_channel == -1)) { retval = davinci_spi_request_dma(spi); if (retval < 0) return retval; } } retval = davinci_spi_setup_transfer(spi, NULL); return retval; }
static int davinci_spi_setup(struct spi_device *spi) { int retval; struct davinci_spi *davinci_spi; struct davinci_spi_dma *davinci_spi_dma; struct device *sdev; davinci_spi = spi_master_get_devdata(spi->master); sdev = davinci_spi->bitbang.master->dev.parent; /* if bits per word length is zero then set it default 8 */ if (!spi->bits_per_word) spi->bits_per_word = 8; davinci_spi->slave[spi->chip_select].cmd_to_write = 0; if (use_dma && davinci_spi->dma_channels) { davinci_spi_dma = &davinci_spi->dma_channels[spi->chip_select]; if ((davinci_spi_dma->dma_rx_channel == -1) || (davinci_spi_dma->dma_tx_channel == -1)) { retval = davinci_spi_request_dma(spi); if (retval < 0) return retval; } } /* * SPI in DaVinci and DA8xx operate between * 600 KHz and 50 MHz */ if (spi->max_speed_hz < 600000 || spi->max_speed_hz > 50000000) { dev_dbg(sdev, "Operating frequency is not in acceptable " "range\n"); return -EINVAL; } /* * Set up SPIFMTn register, unique to this chipselect. * * NOTE: we could do all of these with one write. Also, some * of the "version 2" features are found in chips that don't * support all of them... */ if (spi->mode & SPI_LSB_FIRST) set_fmt_bits(davinci_spi->base, SPIFMT_SHIFTDIR_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_SHIFTDIR_MASK, spi->chip_select); if (spi->mode & SPI_CPOL) set_fmt_bits(davinci_spi->base, SPIFMT_POLARITY_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_POLARITY_MASK, spi->chip_select); if (!(spi->mode & SPI_CPHA)) set_fmt_bits(davinci_spi->base, SPIFMT_PHASE_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_PHASE_MASK, spi->chip_select); /* * Version 1 hardware supports two basic SPI modes: * - Standard SPI mode uses 4 pins, with chipselect * - 3 pin SPI is a 4 pin variant without CS (SPI_NO_CS) * (distinct from SPI_3WIRE, with just one data wire; * or similar variants without MOSI or without MISO) * * Version 2 hardware supports an optional handshaking signal, * so it can support two more modes: * - 5 pin SPI variant is standard SPI plus SPI_READY * - 4 pin with enable is (SPI_READY | SPI_NO_CS) */ if (davinci_spi->version == SPI_VERSION_2) { clear_fmt_bits(davinci_spi->base, SPIFMT_WDELAY_MASK, spi->chip_select); set_fmt_bits(davinci_spi->base, (davinci_spi->pdata->wdelay << SPIFMT_WDELAY_SHIFT) & SPIFMT_WDELAY_MASK, spi->chip_select); if (davinci_spi->pdata->odd_parity) set_fmt_bits(davinci_spi->base, SPIFMT_ODD_PARITY_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_ODD_PARITY_MASK, spi->chip_select); if (davinci_spi->pdata->parity_enable) set_fmt_bits(davinci_spi->base, SPIFMT_PARITYENA_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_PARITYENA_MASK, spi->chip_select); if (davinci_spi->pdata->wait_enable) set_fmt_bits(davinci_spi->base, SPIFMT_WAITENA_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_WAITENA_MASK, spi->chip_select); if (davinci_spi->pdata->timer_disable) set_fmt_bits(davinci_spi->base, SPIFMT_DISTIMER_MASK, spi->chip_select); else clear_fmt_bits(davinci_spi->base, SPIFMT_DISTIMER_MASK, spi->chip_select); } retval = davinci_spi_setup_transfer(spi, NULL); return retval; }