1/* 2 * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 */ 18#ifndef __linux_pxa2xx_spi_h 19#define __linux_pxa2xx_spi_h 20 21#include <linux/pxa2xx_ssp.h> 22 23#define PXA2XX_CS_ASSERT (0x01) 24#define PXA2XX_CS_DEASSERT (0x02) 25 26/* device.platform_data for SSP controller devices */ 27struct pxa2xx_spi_master { 28 u32 clock_enable; 29 u16 num_chipselect; 30 u8 enable_dma; 31}; 32 33/* spi_board_info.controller_data for SPI slave devices, 34 * copied to spi_device.platform_data ... mostly for dma tuning 35 */ 36struct pxa2xx_spi_chip { 37 u8 tx_threshold; 38 u8 rx_threshold; 39 u8 dma_burst_size; 40 u32 timeout; 41 u8 enable_loopback; 42 int gpio_cs; 43 void (*cs_control)(u32 command); 44}; 45 46#ifdef CONFIG_ARCH_PXA 47 48#include <linux/clk.h> 49#include <mach/dma.h> 50 51extern void pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info); 52 53#else 54/* 55 * This is the implemtation for CE4100 on x86. ARM defines them in mach/ or 56 * plat/ include path. 57 * The CE4100 does not provide DMA support. This bits are here to let the driver 58 * compile and will never be used. Maybe we get DMA support at a later point in 59 * time. 60 */ 61 62#define DCSR(n) (n) 63#define DSADR(n) (n) 64#define DTADR(n) (n) 65#define DCMD(n) (n) 66#define DRCMR(n) (n) 67 68#define DCSR_RUN (1 << 31) /* Run Bit */ 69#define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch */ 70#define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable */ 71#define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */ 72#define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */ 73#define DCSR_ENDINTR (1 << 2) /* End Interrupt */ 74#define DCSR_STARTINTR (1 << 1) /* Start Interrupt */ 75#define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt */ 76 77#define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable */ 78#define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */ 79#define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */ 80#define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */ 81#define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */ 82#define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */ 83#define DCSR_EORINTR (1 << 9) /* The end of Receive */ 84 85#define DRCMR_MAPVLD (1 << 7) /* Map Valid */ 86#define DRCMR_CHLNUM 0x1f /* mask for Channel Number */ 87 88#define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor */ 89#define DDADR_STOP (1 << 0) /* Stop */ 90 91#define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */ 92#define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */ 93#define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */ 94#define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */ 95#define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */ 96#define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */ 97#define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */ 98#define DCMD_BURST8 (1 << 16) /* 8 byte burst */ 99#define DCMD_BURST16 (2 << 16) /* 16 byte burst */ 100#define DCMD_BURST32 (3 << 16) /* 32 byte burst */ 101#define DCMD_WIDTH1 (1 << 14) /* 1 byte width */ 102#define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */ 103#define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */ 104#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ 105 106/* 107 * Descriptor structure for PXA's DMA engine 108 * Note: this structure must always be aligned to a 16-byte boundary. 109 */ 110 111typedef enum { 112 DMA_PRIO_HIGH = 0, 113 DMA_PRIO_MEDIUM = 1, 114 DMA_PRIO_LOW = 2 115} pxa_dma_prio; 116 117/* 118 * DMA registration 119 */ 120 121static inline int pxa_request_dma(char *name, 122 pxa_dma_prio prio, 123 void (*irq_handler)(int, void *), 124 void *data) 125{ 126 return -ENODEV; 127} 128 129static inline void pxa_free_dma(int dma_ch) 130{ 131} 132 133/* 134 * The CE4100 does not have the clk framework implemented and SPI clock can 135 * not be switched on/off or the divider changed. 136 */ 137static inline void clk_disable(struct clk *clk) 138{ 139} 140 141static inline int clk_enable(struct clk *clk) 142{ 143 return 0; 144} 145 146static inline unsigned long clk_get_rate(struct clk *clk) 147{ 148 return 3686400; 149} 150 151#endif 152#endif 153