]>
Commit | Line | Data |
---|---|---|
77f85581 WD |
1 | /* |
2 | * (C) Copyright 2001 | |
3 | * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com. | |
4 | * | |
5 | * See file CREDITS for list of people who contributed to this | |
6 | * project. | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public License as | |
10 | * published by the Free Software Foundation; either version 2 of | |
11 | * the License, or (at your option) any later version. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | * GNU General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License | |
19 | * along with this program; if not, write to the Free Software | |
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
21 | * MA 02111-1307 USA | |
22 | */ | |
23 | ||
24 | #ifndef _SPI_H_ | |
25 | #define _SPI_H_ | |
26 | ||
38254f45 GL |
27 | /* SPI mode flags */ |
28 | #define SPI_CPHA 0x01 /* clock phase */ | |
29 | #define SPI_CPOL 0x02 /* clock polarity */ | |
30 | #define SPI_MODE_0 (0|0) /* (original MicroWire) */ | |
31 | #define SPI_MODE_1 (0|SPI_CPHA) | |
32 | #define SPI_MODE_2 (SPI_CPOL|0) | |
33 | #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA) | |
34 | #define SPI_CS_HIGH 0x04 /* chipselect active high? */ | |
35 | #define SPI_LSB_FIRST 0x08 /* per-word bits-on-wire */ | |
36 | #define SPI_3WIRE 0x10 /* SI/SO signals shared */ | |
37 | #define SPI_LOOP 0x20 /* loopback mode */ | |
38 | ||
77f85581 WD |
39 | /* |
40 | * The function call pointer type used to drive the chip select. | |
41 | */ | |
42 | typedef void (*spi_chipsel_type)(int cs); | |
43 | ||
44 | ||
45 | /*----------------------------------------------------------------------- | |
46 | * Initialization, must be called once on start up. | |
47 | */ | |
48 | void spi_init(void); | |
49 | ||
50 | ||
51 | /*----------------------------------------------------------------------- | |
52 | * SPI transfer | |
53 | * | |
54 | * This writes "bitlen" bits out the SPI MOSI port and simultaneously clocks | |
55 | * "bitlen" bits in the SPI MISO port. That's just the way SPI works. | |
56 | * | |
57 | * The source of the outgoing bits is the "dout" parameter and the | |
58 | * destination of the input bits is the "din" parameter. Note that "dout" | |
59 | * and "din" can point to the same memory location, in which case the | |
60 | * input data overwrites the output data (since both are buffered by | |
61 | * temporary variables, this is OK). | |
62 | * | |
63 | * If the chipsel() function is not NULL, it is called with a parameter | |
64 | * of '1' (chip select active) at the start of the transfer and again with | |
65 | * a parameter of '0' at the end of the transfer. | |
66 | * | |
67 | * If the chipsel() function _is_ NULL, it the responsibility of the | |
68 | * caller to make the appropriate chip select active before calling | |
69 | * spi_xfer() and making it inactive after spi_xfer() returns. | |
70 | * | |
71 | * spi_xfer() interface: | |
72 | * chipsel: Routine to call to set/clear the chip select: | |
73 | * if chipsel is NULL, it is not used. | |
74 | * if(cs), make the chip select active (typically '0'). | |
75 | * if(!cs), make the chip select inactive (typically '1'). | |
76 | * dout: Pointer to a string of bits to send out. The bits are | |
77 | * held in a byte array and are sent MSB first. | |
78 | * din: Pointer to a string of bits that will be filled in. | |
79 | * bitlen: How many bits to write and read. | |
80 | * | |
81 | * Returns: 0 on success, not 0 on failure | |
82 | */ | |
38254f45 GL |
83 | int spi_xfer(spi_chipsel_type chipsel, int bitlen, uchar *dout, uchar *din); |
84 | ||
85 | int spi_select(unsigned int bus, unsigned int dev, unsigned long mode); | |
77f85581 WD |
86 | |
87 | #endif /* _SPI_H_ */ |