aboutsummaryrefslogtreecommitdiffstats
path: root/meta-steppeeagle/recipes-applications/spi-test/files/spirom.h
blob: 941b357a30dafb3bc908062e5b5f192a94a6496b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef SPIROM_H
#define SPIROM_H

#include <linux/types.h>

/*---------------------------------------------------------------------------*/

/* IOCTL commands */

#define SPI_IOC_MAGIC			'k'

#define TRANSMIT	1
#define RECEIVE		2

/*
 * struct spi_ioc_transfer - interface structure between application and ioctl
 *
 * @buf: Buffer to hold 1-byte command, 3-bytes address, and 64-byte data for
 *       transmit or receive. The internal FIFO of our controller can hold a
 *       maximum of 70 bytes, including the address. But here we assume the
 *       maximum data excluding address to be 64-bytes long.
 *
 * @direction: Direction of data transfer, either TRANSMIT or RECEIVE.
 *
 * @len: Length of data excluding command and address.
 *
 * @addr_present: Flag to indicate whether 'buf' above contains an address.
 */
struct spi_ioc_transfer {
	__u8		buf[64 + 1 + 3];
	__u8		direction;
	__u8		len;
	__u8		addr_present;
};

/* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
#define SPI_MSGSIZE(N) \
	((((N)*(sizeof (struct spi_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \
		? ((N)*(sizeof (struct spi_ioc_transfer))) : 0)
#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)])

/* SPI ROM command codes */
#define ROM_WREN		0x06
#define ROM_WRDI		0x04
#define ROM_RDSR		0x05
#define ROM_RDID		0x9F
#define ROM_CHIP_ERASE		0x60
#define ROM_SECTOR_ERASE	0x20
#define ROM_BLOCK_ERASE		0xD8
#define ROM_READ		0x03
#define ROM_WRITE		0x02

#endif /* SPIROM_H */