1157091Simp/*-
2157091Simp * Copyright (c) 2006 M. Warner Losh.  All rights reserved.
3157091Simp *
4157091Simp * Redistribution and use in source and binary forms, with or without
5157091Simp * modification, are permitted provided that the following conditions
6157091Simp * are met:
7157091Simp * 1. Redistributions of source code must retain the above copyright
8157091Simp *    notice, this list of conditions and the following disclaimer.
9157091Simp * 2. Redistributions in binary form must reproduce the above copyright
10157091Simp *    notice, this list of conditions and the following disclaimer in the
11157091Simp *    documentation and/or other materials provided with the distribution.
12157091Simp *
13185265Simp * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14185265Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15185265Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16185265Simp * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17185265Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18185265Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19185265Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20185265Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21185265Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22185265Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23185265Simp * SUCH DAMAGE.
24157091Simp */
25157091Simp
26157091Simp/* $FreeBSD: releng/10.2/sys/arm/at91/at91_sscreg.h 185265 2008-11-25 00:13:26Z imp $ */
27157091Simp
28157091Simp#ifndef ARM_AT91_AT91_SSCREG_H
29157091Simp#define ARM_AT91_AT91_SSCREG_H
30157091Simp
31163524Simp/* Registers */
32163524Simp#define	SSC_CR		0x00		/* Control Register */
33163524Simp#define	SSC_CMR		0x04		/* Clock Mode Register */
34163524Simp		/*	0x08		Reserved */
35163524Simp		/*	0x0c		Reserved */
36163524Simp#define	SSC_RCMR	0x10		/* Receive Clock Mode Register */
37163524Simp#define	SSC_RFMR	0x14		/* Receive Frame Mode Register */
38163524Simp#define	SSC_TCMR	0x18		/* Transmit Clock Mode Register */
39163524Simp#define	SSC_TFMR	0x1c		/* Transmit Frame Mode register */
40163524Simp#define	SSC_RHR		0x20		/* Receive Holding Register */
41163524Simp#define	SSC_THR		0x24		/* Transmit Holding Register */
42163524Simp		/*	0x28		Reserved */
43163524Simp		/*	0x2c		Reserved */
44163524Simp#define	SSC_RSHR	0x30		/* Receive Sync Holding Register */
45163524Simp#define	SSC_TSHR	0x34		/* Transmit Sync Holding Register */
46163524Simp		/*	0x38		Reserved */
47163524Simp		/*	0x3c		Reserved */
48163524Simp#define	SSC_SR		0x40		/* Status Register */
49163524Simp#define	SSC_IER		0x44		/* Interrupt Enable Register */
50163524Simp#define	SSC_IDR		0x48		/* Interrupt Disable Register */
51163524Simp#define	SSC_IMR		0x4c		/* Interrupt Mask Register */
52163524Simp/* And PDC registers */
53163524Simp
54163524Simp/* SSC_CR */
55163524Simp#define	SSC_CR_RXEN	(1u << 0)	/* RXEN: Receive Enable */
56163524Simp#define	SSC_CR_RXDIS	(1u << 1)	/* RXDIS: Receive Disable */
57163524Simp#define	SSC_CR_TXEN	(1u << 8)	/* TXEN: Transmit Enable */
58163524Simp#define	SSC_CR_TXDIS	(1u << 9)	/* TXDIS: Transmit Disable */
59163524Simp#define	SSC_CR_SWRST	(1u << 15)	/* SWRST: Software Reset */
60163524Simp
61163524Simp/* SSC_CMR */
62163524Simp#define	SSC_CMR_DIV	0xfffu		/* DIV: Clock Divider mask */
63163524Simp
64163524Simp/* SSC_RCMR */
65163524Simp#define	SSC_RCMR_PERIOD	(0xffu << 24)	/* PERIOD: Receive Period Divider sel*/
66163524Simp#define	SSC_RCMR_STTDLY	(0xffu << 16)	/* STTDLY: Receive Start Delay */
67163524Simp#define	SSC_RCMR_START	(0xfu << 8)	/* START: Receive Start Sel */
68163524Simp#define		SSC_RCMR_START_CONT		(0u << 8)
69163524Simp#define		SSC_RCMR_START_TX_START		(1u << 8)
70163524Simp#define		SSC_RCMR_START_LOW_RF		(2u << 8)
71163524Simp#define		SSC_RCMR_START_HIGH_RF		(3u << 8)
72163524Simp#define		SSC_RCMR_START_FALL_EDGE_RF	(4u << 8)
73163524Simp#define		SSC_RCMR_START_RISE_EDGE_RF	(5u << 8)
74163524Simp#define		SSC_RCMR_START_LEVEL_CHANGE_RF	(6u << 8)
75163524Simp#define		SSC_RCMR_START_ANY_EDGE_RF	(7u << 8)
76163524Simp#define	SSC_RCMR_CKI	(1u << 5)	/* CKI: Receive Clock Inversion */
77163524Simp#define	SSC_RCMR_CKO	(7u << 2)	/* CKO: Receive Clock Output Mode Sel*/
78163524Simp#define		SSC_RCMR_CKO_NONE		(0u << 2)
79163524Simp#define		SSC_RCMR_CKO_CONTINUOUS		(1u << 2)
80163524Simp#define	SSC_RCMR_CKS	(3u)	       	/* CKS: Receive Clock Selection */
81163524Simp#define		SSC_RCMR_CKS_DIVIDED		(0)
82163524Simp#define		SSC_RCMR_CKS_TK_CLOCK		(1)
83163524Simp#define		SSC_RCMR_CKS_RK			(2)
84163524Simp
85163524Simp/* SSC_RFMR */
86163524Simp#define	SSC_RFMR_FSEDGE	(1u << 24)	/* FSEDGE: Frame Sync Edge Detection */
87163524Simp#define	SSC_RFMR_FSOS	(7u << 20)	/* FSOS: Receive frame Sync Out sel */
88163524Simp#define		SSC_RFMR_FSOS_NONE		(0u << 20)
89163524Simp#define		SSC_RFMR_FSOS_NEG_PULSE		(1u << 20)
90163524Simp#define		SSC_RFMR_FSOS_POS_PULSE		(2u << 20)
91163524Simp#define		SSC_RFMR_FSOS_LOW		(3u << 20)
92163524Simp#define		SSC_RFMR_FSOS_HIGH		(4u << 20)
93163524Simp#define		SSC_RFMR_FSOS_TOGGLE		(5u << 20)
94163524Simp#define	SSC_RFMR_FSLEN	(0xfu << 16)	/* FSLEN: Receive Frame Sync Length */
95163524Simp#define	SSC_RFMR_DATNB	(0xfu << 8)	/* DATNB: Data Number per Frame */
96163524Simp#define	SSC_RFMR_MSFBF	(1u << 7)	/* MSBF: Most Significant Bit First */
97163524Simp#define	SSC_RFMR_LOOP	(1u << 5)	/* LOOP: Loop Mode */
98163524Simp#define	SSC_RFMR_DATLEN	(0x1fu << 0)	/* DATLEN: Data Length */
99163524Simp
100163524Simp/* SSC_TCMR */
101163524Simp#define	SSC_TCMR_PERIOD	(0xffu << 24)	/* PERIOD: Receive Period Divider sel*/
102163524Simp#define	SSC_TCMR_STTDLY	(0xffu << 16)	/* STTDLY: Receive Start Delay */
103163524Simp#define	SSC_TCMR_START	(0xfu << 8)	/* START: Receive Start Sel */
104163524Simp#define		SSC_TCMR_START_CONT		(0u << 8)
105163524Simp#define		SSC_TCMR_START_RX_START		(1u << 8)
106163524Simp#define		SSC_TCMR_START_LOW_RF		(2u << 8)
107163524Simp#define		SSC_TCMR_START_HIGH_RF		(3u << 8)
108163524Simp#define		SSC_TCMR_START_FALL_EDGE_RF	(4u << 8)
109163524Simp#define		SSC_TCMR_START_RISE_EDGE_RF	(5u << 8)
110163524Simp#define		SSC_TCMR_START_LEVEL_CHANGE_RF	(6u << 8)
111163524Simp#define		SSC_TCMR_START_ANY_EDGE_RF	(7u << 8)
112163524Simp#define	SSC_TCMR_CKI	(1u << 5)	/* CKI: Receive Clock Inversion */
113163524Simp#define	SSC_TCMR_CKO	(7u << 2)	/* CKO: Receive Clock Output Mode Sel*/
114163524Simp#define		SSC_TCMR_CKO_NONE		(0u << 2)
115163524Simp#define		SSC_TCMR_CKO_CONTINUOUS		(1u << 2)
116163524Simp#define	SSC_TCMR_CKS	(3u)	       	/* CKS: Receive Clock Selection */
117163524Simp#define		SSC_TCMR_CKS_DIVIDED		(0)
118163524Simp#define		SSC_TCMR_CKS_RK_CLOCK		(1)
119163524Simp#define		SSC_TCMR_CKS_TK			(2)
120163524Simp
121163524Simp/* SSC_TFMR */
122163524Simp#define	SSC_TFMR_FSEDGE	(1u << 24)	/* FSEDGE: Frame Sync Edge Detection */
123163524Simp#define	SSC_TFMR_FSOS	(7u << 20)	/* FSOS: Receive frame Sync Out sel */
124163524Simp#define		SSC_TFMR_FSOS_NONE		(0u << 20)
125163524Simp#define		SSC_TFMR_FSOS_NEG_PULSE		(1u << 20)
126163524Simp#define		SSC_TFMR_FSOS_POS_PULSE		(2u << 20)
127163524Simp#define		SSC_TFMR_FSOS_LOW		(3u << 20)
128163524Simp#define		SSC_TFMR_FSOS_HIGH		(4u << 20)
129163524Simp#define		SSC_TFMR_FSOS_TOGGLE		(5u << 20)
130163524Simp#define	SSC_TFMR_FSLEN	(0xfu << 16)	/* FSLEN: Receive Frame Sync Length */
131163524Simp#define	SSC_TFMR_DATNB	(0xfu << 8)	/* DATNB: Data Number per Frame */
132163524Simp#define	SSC_TFMR_MSFBF	(1u << 7)	/* MSBF: Most Significant Bit First */
133163524Simp#define	SSC_TFMR_DATDEF	(1u << 5)	/* DATDEF: Data Default Value */
134163524Simp#define	SSC_TFMR_DATLEN	(0x1fu << 0)	/* DATLEN: Data Length */
135163524Simp
136163680Simp/* SSC_SR */
137163680Simp#define	SSC_SR_TXRDY	(1u << 0)
138163680Simp#define	SSC_SR_TXEMPTY	(1u << 1)
139163680Simp#define	SSC_SR_ENDTX	(1u << 2)
140163680Simp#define	SSC_SR_TXBUFE	(1u << 3)
141163680Simp#define	SSC_SR_RXRDY	(1u << 4)
142163680Simp#define	SSC_SR_OVRUN	(1u << 5)
143163680Simp#define	SSC_SR_ENDRX	(1u << 6)
144163680Simp#define	SSC_SR_RXBUFF	(1u << 7)
145163680Simp#define	SSC_SR_TXSYN	(1u << 10)
146163680Simp#define	SSC_SR_RSSYN	(1u << 11)
147163680Simp#define	SSC_SR_TXEN	(1u << 16)
148163680Simp#define	SSC_SR_RXEN	(1u << 17)
149163680Simp
150157091Simp#endif /* ARM_AT91_AT91_SSCREG_H */
151