summaryrefslogtreecommitdiff
path: root/arch/blackfin/include/asm/bfin_twi.h
blob: 74d10237f7065cb03ce630bd47d2355f8cf4aaf3 (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
 * bfin_twi.h - interface to Blackfin TWIs
 *
 * Copyright 2005-2010 Analog Devices Inc.
 *
 * Licensed under the GPL-2 or later.
 */

#ifndef __ASM_BFIN_TWI_H__
#define __ASM_BFIN_TWI_H__

#include <linux/types.h>

/*
 * All Blackfin system MMRs are padded to 32bits even if the register
 * itself is only 16bits.  So use a helper macro to streamline this.
 */
#define __BFP(m) u16 m; u16 __pad_##m

/*
 * bfin twi registers layout
 */
struct bfin_twi_regs {
	__BFP(clkdiv);
	__BFP(control);
	__BFP(slave_ctl);
	__BFP(slave_stat);
	__BFP(slave_addr);
	__BFP(master_ctl);
	__BFP(master_stat);
	__BFP(master_addr);
	__BFP(int_stat);
	__BFP(int_mask);
	__BFP(fifo_ctl);
	__BFP(fifo_stat);
	u32 __pad[20];
	__BFP(xmt_data8);
	__BFP(xmt_data16);
	__BFP(rcv_data8);
	__BFP(rcv_data16);
};

#undef __BFP

/*  ********************  TWO-WIRE INTERFACE (TWI) MASKS  ***********************/
/* TWI_CLKDIV Macros (Use: *pTWI_CLKDIV = CLKLOW(x)|CLKHI(y);  )				*/
#define	CLKLOW(x)	((x) & 0xFF)	/* Periods Clock Is Held Low                    */
#define CLKHI(y)	(((y)&0xFF)<<0x8)	/* Periods Before New Clock Low                 */

/* TWI_PRESCALE Masks															*/
#define	PRESCALE	0x007F	/* SCLKs Per Internal Time Reference (10MHz)    */
#define	TWI_ENA		0x0080	/* TWI Enable                                                                   */
#define	SCCB		0x0200	/* SCCB Compatibility Enable                                    */

/* TWI_SLAVE_CTL Masks															*/
#define	SEN			0x0001	/* Slave Enable                                                                 */
#define	SADD_LEN	0x0002	/* Slave Address Length                                                 */
#define	STDVAL		0x0004	/* Slave Transmit Data Valid                                    */
#define	NAK			0x0008	/* NAK/ACK* Generated At Conclusion Of Transfer */
#define	GEN			0x0010	/* General Call Address Matching Enabled                */

/* TWI_SLAVE_STAT Masks															*/
#define	SDIR		0x0001	/* Slave Transfer Direction (Transmit/Receive*) */
#define GCALL		0x0002	/* General Call Indicator                                               */

/* TWI_MASTER_CTL Masks													*/
#define	MEN			0x0001	/* Master Mode Enable                                           */
#define	MADD_LEN	0x0002	/* Master Address Length                                        */
#define	MDIR		0x0004	/* Master Transmit Direction (RX/TX*)           */
#define	FAST		0x0008	/* Use Fast Mode Timing Specs                           */
#define	STOP		0x0010	/* Issue Stop Condition                                         */
#define	RSTART		0x0020	/* Repeat Start or Stop* At End Of Transfer     */
#define	DCNT		0x3FC0	/* Data Bytes To Transfer                                       */
#define	SDAOVR		0x4000	/* Serial Data Override                                         */
#define	SCLOVR		0x8000	/* Serial Clock Override                                        */

/* TWI_MASTER_STAT Masks														*/
#define	MPROG		0x0001	/* Master Transfer In Progress                                  */
#define	LOSTARB		0x0002	/* Lost Arbitration Indicator (Xfer Aborted)    */
#define	ANAK		0x0004	/* Address Not Acknowledged                                             */
#define	DNAK		0x0008	/* Data Not Acknowledged                                                */
#define	BUFRDERR	0x0010	/* Buffer Read Error                                                    */
#define	BUFWRERR	0x0020	/* Buffer Write Error                                                   */
#define	SDASEN		0x0040	/* Serial Data Sense                                                    */
#define	SCLSEN		0x0080	/* Serial Clock Sense                                                   */
#define	BUSBUSY		0x0100	/* Bus Busy Indicator                                                   */

/* TWI_INT_SRC and TWI_INT_ENABLE Masks						*/
#define	SINIT		0x0001	/* Slave Transfer Initiated     */
#define	SCOMP		0x0002	/* Slave Transfer Complete      */
#define	SERR		0x0004	/* Slave Transfer Error         */
#define	SOVF		0x0008	/* Slave Overflow                       */
#define	MCOMP		0x0010	/* Master Transfer Complete     */
#define	MERR		0x0020	/* Master Transfer Error        */
#define	XMTSERV		0x0040	/* Transmit FIFO Service        */
#define	RCVSERV		0x0080	/* Receive FIFO Service         */

/* TWI_FIFO_CTRL Masks												*/
#define	XMTFLUSH	0x0001	/* Transmit Buffer Flush                        */
#define	RCVFLUSH	0x0002	/* Receive Buffer Flush                         */
#define	XMTINTLEN	0x0004	/* Transmit Buffer Interrupt Length     */
#define	RCVINTLEN	0x0008	/* Receive Buffer Interrupt Length      */

/* TWI_FIFO_STAT Masks															*/
#define	XMTSTAT		0x0003	/* Transmit FIFO Status                                                 */
#define	XMT_EMPTY	0x0000	/*              Transmit FIFO Empty                                             */
#define	XMT_HALF	0x0001	/*              Transmit FIFO Has 1 Byte To Write               */
#define	XMT_FULL	0x0003	/*              Transmit FIFO Full (2 Bytes To Write)   */

#define	RCVSTAT		0x000C	/* Receive FIFO Status                                                  */
#define	RCV_EMPTY	0x0000	/*              Receive FIFO Empty                                              */
#define	RCV_HALF	0x0004	/*              Receive FIFO Has 1 Byte To Read                 */
#define	RCV_FULL	0x000C	/*              Receive FIFO Full (2 Bytes To Read)             */

#endif