aboutsummaryrefslogtreecommitdiff
path: root/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h
blob: c9bae1362606aac10d79c921f3c8b7374cfc1ba5 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#ifndef BCM63XX_DEV_SPI_H
#define BCM63XX_DEV_SPI_H

#include <linux/types.h>
#include <bcm63xx_io.h>
#include <bcm63xx_regs.h>

int __init bcm63xx_spi_register(void);

struct bcm63xx_spi_pdata {
	unsigned int	fifo_size;
	unsigned int	msg_type_shift;
	unsigned int	msg_ctl_width;
	int		bus_num;
	int		num_chipselect;
	u32		speed_hz;
};

enum bcm63xx_regs_spi {
	SPI_CMD,
	SPI_INT_STATUS,
	SPI_INT_MASK_ST,
	SPI_INT_MASK,
	SPI_ST,
	SPI_CLK_CFG,
	SPI_FILL_BYTE,
	SPI_MSG_TAIL,
	SPI_RX_TAIL,
	SPI_MSG_CTL,
	SPI_MSG_DATA,
	SPI_RX_DATA,
};

#define __GEN_SPI_RSET_BASE(__cpu, __rset)				\
	case SPI_## __rset:						\
		return SPI_## __cpu ##_## __rset;

#define __GEN_SPI_RSET(__cpu)						\
	switch (reg) {							\
	__GEN_SPI_RSET_BASE(__cpu, CMD)					\
	__GEN_SPI_RSET_BASE(__cpu, INT_STATUS)				\
	__GEN_SPI_RSET_BASE(__cpu, INT_MASK_ST)				\
	__GEN_SPI_RSET_BASE(__cpu, INT_MASK)				\
	__GEN_SPI_RSET_BASE(__cpu, ST)					\
	__GEN_SPI_RSET_BASE(__cpu, CLK_CFG)				\
	__GEN_SPI_RSET_BASE(__cpu, FILL_BYTE)				\
	__GEN_SPI_RSET_BASE(__cpu, MSG_TAIL)				\
	__GEN_SPI_RSET_BASE(__cpu, RX_TAIL)				\
	__GEN_SPI_RSET_BASE(__cpu, MSG_CTL)				\
	__GEN_SPI_RSET_BASE(__cpu, MSG_DATA)				\
	__GEN_SPI_RSET_BASE(__cpu, RX_DATA)				\
	}

#define __GEN_SPI_REGS_TABLE(__cpu)					\
	[SPI_CMD]		= SPI_## __cpu ##_CMD,			\
	[SPI_INT_STATUS]	= SPI_## __cpu ##_INT_STATUS,		\
	[SPI_INT_MASK_ST]	= SPI_## __cpu ##_INT_MASK_ST,		\
	[SPI_INT_MASK]		= SPI_## __cpu ##_INT_MASK,		\
	[SPI_ST]		= SPI_## __cpu ##_ST,			\
	[SPI_CLK_CFG]		= SPI_## __cpu ##_CLK_CFG,		\
	[SPI_FILL_BYTE]		= SPI_## __cpu ##_FILL_BYTE,		\
	[SPI_MSG_TAIL]		= SPI_## __cpu ##_MSG_TAIL,		\
	[SPI_RX_TAIL]		= SPI_## __cpu ##_RX_TAIL,		\
	[SPI_MSG_CTL]		= SPI_## __cpu ##_MSG_CTL,		\
	[SPI_MSG_DATA]		= SPI_## __cpu ##_MSG_DATA,		\
	[SPI_RX_DATA]		= SPI_## __cpu ##_RX_DATA,

static inline unsigned long bcm63xx_spireg(enum bcm63xx_regs_spi reg)
{
#ifdef BCMCPU_RUNTIME_DETECT
	extern const unsigned long *bcm63xx_regs_spi;

	return bcm63xx_regs_spi[reg];
#else
#ifdef CONFIG_BCM63XX_CPU_6338
	__GEN_SPI_RSET(6338)
#endif
#ifdef CONFIG_BCM63XX_CPU_6348
	__GEN_SPI_RSET(6348)
#endif
#ifdef CONFIG_BCM63XX_CPU_6358
	__GEN_SPI_RSET(6358)
#endif
#ifdef CONFIG_BCM63XX_CPU_6368
	__GEN_SPI_RSET(6368)
#endif
#endif
	return 0;
}

#endif /* BCM63XX_DEV_SPI_H */