]>
Commit | Line | Data |
---|---|---|
77f85581 WD |
1 | /* |
2 | * (C) Copyright 2001 | |
3 | * Gerald Van Baren, Custom IDEAS, [email protected]. | |
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 | ||
27 | /* | |
28 | * The function call pointer type used to drive the chip select. | |
29 | */ | |
30 | typedef void (*spi_chipsel_type)(int cs); | |
31 | ||
32 | ||
33 | /*----------------------------------------------------------------------- | |
34 | * Initialization, must be called once on start up. | |
35 | */ | |
36 | void spi_init(void); | |
37 | ||
38 | ||
39 | /*----------------------------------------------------------------------- | |
40 | * SPI transfer | |
41 | * | |
42 | * This writes "bitlen" bits out the SPI MOSI port and simultaneously clocks | |
43 | * "bitlen" bits in the SPI MISO port. That's just the way SPI works. | |
44 | * | |
45 | * The source of the outgoing bits is the "dout" parameter and the | |
46 | * destination of the input bits is the "din" parameter. Note that "dout" | |
47 | * and "din" can point to the same memory location, in which case the | |
48 | * input data overwrites the output data (since both are buffered by | |
49 | * temporary variables, this is OK). | |
50 | * | |
51 | * If the chipsel() function is not NULL, it is called with a parameter | |
52 | * of '1' (chip select active) at the start of the transfer and again with | |
53 | * a parameter of '0' at the end of the transfer. | |
54 | * | |
55 | * If the chipsel() function _is_ NULL, it the responsibility of the | |
56 | * caller to make the appropriate chip select active before calling | |
57 | * spi_xfer() and making it inactive after spi_xfer() returns. | |
58 | * | |
59 | * spi_xfer() interface: | |
60 | * chipsel: Routine to call to set/clear the chip select: | |
61 | * if chipsel is NULL, it is not used. | |
62 | * if(cs), make the chip select active (typically '0'). | |
63 | * if(!cs), make the chip select inactive (typically '1'). | |
64 | * dout: Pointer to a string of bits to send out. The bits are | |
65 | * held in a byte array and are sent MSB first. | |
66 | * din: Pointer to a string of bits that will be filled in. | |
67 | * bitlen: How many bits to write and read. | |
68 | * | |
69 | * Returns: 0 on success, not 0 on failure | |
70 | */ | |
71 | int spi_xfer(spi_chipsel_type chipsel, int bitlen, uchar *dout, uchar *din); | |
72 | ||
73 | #endif /* _SPI_H_ */ |