#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/gpio/consumer.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/of.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_bitbang.h>
#include <linux/slab.h>
#include <linux/platform_data/spi-davinci.h>
#define CS_DEFAULT …
#define SPIFMT_PHASE_MASK …
#define SPIFMT_POLARITY_MASK …
#define SPIFMT_DISTIMER_MASK …
#define SPIFMT_SHIFTDIR_MASK …
#define SPIFMT_WAITENA_MASK …
#define SPIFMT_PARITYENA_MASK …
#define SPIFMT_ODD_PARITY_MASK …
#define SPIFMT_WDELAY_MASK …
#define SPIFMT_WDELAY_SHIFT …
#define SPIFMT_PRESCALE_SHIFT …
#define SPIPC0_DIFUN_MASK …
#define SPIPC0_DOFUN_MASK …
#define SPIPC0_CLKFUN_MASK …
#define SPIPC0_SPIENA_MASK …
#define SPIINT_MASKALL …
#define SPIINT_MASKINT …
#define SPI_INTLVL_1 …
#define SPI_INTLVL_0 …
#define SPIDAT1_CSHOLD_MASK …
#define SPIDAT1_WDEL …
#define SPIGCR1_CLKMOD_MASK …
#define SPIGCR1_MASTER_MASK …
#define SPIGCR1_POWERDOWN_MASK …
#define SPIGCR1_LOOPBACK_MASK …
#define SPIGCR1_SPIENA_MASK …
#define SPIBUF_TXFULL_MASK …
#define SPIBUF_RXEMPTY_MASK …
#define SPIDELAY_C2TDELAY_SHIFT …
#define SPIDELAY_C2TDELAY_MASK …
#define SPIDELAY_T2CDELAY_SHIFT …
#define SPIDELAY_T2CDELAY_MASK …
#define SPIDELAY_T2EDELAY_SHIFT …
#define SPIDELAY_T2EDELAY_MASK …
#define SPIDELAY_C2EDELAY_SHIFT …
#define SPIDELAY_C2EDELAY_MASK …
#define SPIFLG_DLEN_ERR_MASK …
#define SPIFLG_TIMEOUT_MASK …
#define SPIFLG_PARERR_MASK …
#define SPIFLG_DESYNC_MASK …
#define SPIFLG_BITERR_MASK …
#define SPIFLG_OVRRUN_MASK …
#define SPIFLG_BUF_INIT_ACTIVE_MASK …
#define SPIFLG_ERROR_MASK …
#define SPIINT_DMA_REQ_EN …
#define SPIGCR0 …
#define SPIGCR1 …
#define SPIINT …
#define SPILVL …
#define SPIFLG …
#define SPIPC0 …
#define SPIDAT1 …
#define SPIBUF …
#define SPIDELAY …
#define SPIDEF …
#define SPIFMT0 …
#define DMA_MIN_BYTES …
struct davinci_spi { … };
static struct davinci_spi_config davinci_spi_default_cfg;
static void davinci_spi_rx_buf_u8(u32 data, struct davinci_spi *dspi)
{ … }
static void davinci_spi_rx_buf_u16(u32 data, struct davinci_spi *dspi)
{ … }
static u32 davinci_spi_tx_buf_u8(struct davinci_spi *dspi)
{ … }
static u32 davinci_spi_tx_buf_u16(struct davinci_spi *dspi)
{ … }
static inline void set_io_bits(void __iomem *addr, u32 bits)
{ … }
static inline void clear_io_bits(void __iomem *addr, u32 bits)
{ … }
static void davinci_spi_chipselect(struct spi_device *spi, int value)
{ … }
static inline int davinci_spi_get_prescale(struct davinci_spi *dspi,
u32 max_speed_hz)
{ … }
static int davinci_spi_setup_transfer(struct spi_device *spi,
struct spi_transfer *t)
{ … }
static int davinci_spi_of_setup(struct spi_device *spi)
{ … }
static int davinci_spi_setup(struct spi_device *spi)
{ … }
static void davinci_spi_cleanup(struct spi_device *spi)
{ … }
static bool davinci_spi_can_dma(struct spi_controller *host,
struct spi_device *spi,
struct spi_transfer *xfer)
{ … }
static int davinci_spi_check_error(struct davinci_spi *dspi, int int_status)
{ … }
static int davinci_spi_process_events(struct davinci_spi *dspi)
{ … }
static void davinci_spi_dma_rx_callback(void *data)
{ … }
static void davinci_spi_dma_tx_callback(void *data)
{ … }
static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
{ … }
static irqreturn_t dummy_thread_fn(s32 irq, void *data)
{ … }
static irqreturn_t davinci_spi_irq(s32 irq, void *data)
{ … }
static int davinci_spi_request_dma(struct davinci_spi *dspi)
{ … }
#if defined(CONFIG_OF)
struct davinci_spi_of_data { … };
static const struct davinci_spi_of_data dm6441_spi_data = …;
static const struct davinci_spi_of_data da830_spi_data = …;
static const struct davinci_spi_of_data keystone_spi_data = …;
static const struct of_device_id davinci_spi_of_match[] = …;
MODULE_DEVICE_TABLE(of, davinci_spi_of_match);
static int spi_davinci_get_pdata(struct platform_device *pdev,
struct davinci_spi *dspi)
{ … }
#else
static int spi_davinci_get_pdata(struct platform_device *pdev,
struct davinci_spi *dspi)
{
return -ENODEV;
}
#endif
static int davinci_spi_probe(struct platform_device *pdev)
{ … }
static void davinci_spi_remove(struct platform_device *pdev)
{ … }
static struct platform_driver davinci_spi_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;