12
#include <drivers/dma/dma.h>
14
#include <drivers/spi.h>
16
#include "bcm283x_spi_dev.h"
18
struct dma_ctrl_blk *init_dma_block_spi_in(struct spi_device *dev, struct dma_mem_handle *mem_handle,
19
uint32_t offset, void *src, uint32_t bytes,
20
struct dma_ctrl_blk *next_conbk, bool int_enable) {
21
struct bcm283x_spi_dev *bcm283x_spi_dev;
25
bcm283x_spi_dev = dev->priv;
27
if(bcm283x_spi_dev->init_dma_block_spi_in == NULL) {
28
log_debug("Select operation is not supported for SPI%d",
32
return bcm283x_spi_dev->init_dma_block_spi_in(dev, mem_handle, offset, src,bytes, next_conbk, int_enable);
35
struct dma_ctrl_blk *init_dma_block_spi_out(struct spi_device *dev, struct dma_mem_handle *mem_handle,
36
uint32_t offset, void *dest, uint32_t bytes,
37
struct dma_ctrl_blk *next_conbk, bool int_enable) {
38
struct bcm283x_spi_dev *bcm283x_spi_dev;
42
bcm283x_spi_dev = dev->priv;
44
if(bcm283x_spi_dev->init_dma_block_spi_out == NULL) {
45
log_debug("Select operation is not supported for SPI%d",
49
return bcm283x_spi_dev->init_dma_block_spi_out(dev, mem_handle, offset, dest, bytes, next_conbk, int_enable);
52
int spi_dma_prepare(struct spi_device *dev,
53
irq_return_t (*dma_complete)(unsigned int, void *),
54
int dma_chan_out, int dma_chan_in,
55
uint32_t dma_levels) {
56
struct bcm283x_spi_dev *bcm283x_spi_dev;
60
bcm283x_spi_dev = dev->priv;
62
bcm283x_spi_dev->dma_complete = dma_complete;
63
bcm283x_spi_dev->dma_chan_out = dma_chan_out;
64
bcm283x_spi_dev->dma_chan_in = dma_chan_in;
65
bcm283x_spi_dev->dma_levels = dma_levels;
70
int spi_irq_prepare(struct spi_device *dev,
71
irq_spi_event_t send_complete, irq_spi_event_t received_data) {
72
struct bcm283x_spi_dev *bcm283x_spi_dev;
76
bcm283x_spi_dev = dev->priv;
78
bcm283x_spi_dev->send_complete = send_complete;
79
bcm283x_spi_dev->received_data = received_data;