#ifndef __DRIVERS_SPIM_RK29XX_HEADER_H\r
#define __DRIVERS_SPIM_RK29XX_HEADER_H\r
#include <linux/io.h>\r
-#include <mach/rk29-dma-pl330.h>\r
+#ifdef CONFIG_ARCH_RK30\r
+#include <plat/dma-pl330.h>\r
+#else\r
+#include <mach/dma-pl330.h>\r
+#endif\r
\r
/* SPI register offsets */\r
#define SPIM_CTRLR0 0x0000\r
\r
#define SPI_SCOL_OFFSET 7 /* Serial Clock Polarity */\r
\r
+#define SPI_OPMOD_OFFSET 20\r
+#define SPI_OPMOD_MASTER 0\r
+#define SPI_OPMOD_SLAVE 1\r
+\r
#define SPI_TMOD_OFFSET 18 /* Transfer Mode */\r
#define SPI_TMOD_TR 0x00 /* xmit & recv */\r
#define SPI_TMOD_TO 0x01 /* xmit only */\r
u32 irq_polarity;\r
u32 fifo_len; /* depth of the FIFO buffer */\r
struct clk *clock_spim; /* clk apb */\r
+ struct clk *pclk;\r
struct platform_device *pdev;\r
\r
/* Driver message queue */\r
struct workqueue_struct *workqueue;\r
struct work_struct pump_messages;\r
- spinlock_t lock;\r
+ spinlock_t lock; \r
+ struct mutex dma_lock;\r
struct list_head queue;\r
int busy;\r
int run;\r
\r
/* Message Transfer pump */\r
- struct tasklet_struct pump_transfers;\r
+ struct tasklet_struct pump_transfers; \r
+ struct tasklet_struct dma_transfers; \r
\r
/* Current message transfer state info */\r
struct spi_message *cur_msg;\r
int dma_mapped;\r
dma_addr_t rx_dma;\r
dma_addr_t tx_dma;\r
+ void *buffer_tx_dma;\r
+ void *buffer_rx_dma;\r
size_t rx_map_len;\r
size_t tx_map_len;\r
u8 n_bytes; /* current is a 1/2 bytes op */\r
\r
/* Dma info */\r
struct completion xfer_completion;\r
+ \r
+ struct completion tx_completion;\r
+ struct completion rx_completion;\r
unsigned state;\r
unsigned cur_speed;\r
unsigned long sfr_start;\r
u8 poll_mode; /* 0 for contoller polling mode */\r
u8 type; /* SPI/SSP/Micrwire */\r
u8 enable_dma;\r
+ u8 slave_enable;\r
void (*cs_control)(struct rk29xx_spi *dws, u32 cs, u8 flag);\r
};\r
\r