0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __SOC_ATMEL_TCB_H
0011 #define __SOC_ATMEL_TCB_H
0012
0013 #include <linux/compiler.h>
0014 #include <linux/list.h>
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 struct clk;
0035
0036
0037
0038
0039
0040
0041
0042
0043 struct atmel_tcb_config {
0044 size_t counter_width;
0045 bool has_gclk;
0046 bool has_qdec;
0047 };
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 struct atmel_tc {
0069 struct platform_device *pdev;
0070 void __iomem *regs;
0071 int id;
0072 const struct atmel_tcb_config *tcb_config;
0073 int irq[3];
0074 struct clk *clk[3];
0075 struct clk *slow_clk;
0076 struct list_head node;
0077 bool allocated;
0078 };
0079
0080 extern struct atmel_tc *atmel_tc_alloc(unsigned block);
0081 extern void atmel_tc_free(struct atmel_tc *tc);
0082
0083
0084 extern const u8 atmel_tc_divisors[5];
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 #define ATMEL_TC_BCR 0xc0
0098 #define ATMEL_TC_SYNC (1 << 0)
0099
0100 #define ATMEL_TC_BMR 0xc4
0101 #define ATMEL_TC_TC0XC0S (3 << 0)
0102 #define ATMEL_TC_TC0XC0S_TCLK0 (0 << 0)
0103 #define ATMEL_TC_TC0XC0S_NONE (1 << 0)
0104 #define ATMEL_TC_TC0XC0S_TIOA1 (2 << 0)
0105 #define ATMEL_TC_TC0XC0S_TIOA2 (3 << 0)
0106 #define ATMEL_TC_TC1XC1S (3 << 2)
0107 #define ATMEL_TC_TC1XC1S_TCLK1 (0 << 2)
0108 #define ATMEL_TC_TC1XC1S_NONE (1 << 2)
0109 #define ATMEL_TC_TC1XC1S_TIOA0 (2 << 2)
0110 #define ATMEL_TC_TC1XC1S_TIOA2 (3 << 2)
0111 #define ATMEL_TC_TC2XC2S (3 << 4)
0112 #define ATMEL_TC_TC2XC2S_TCLK2 (0 << 4)
0113 #define ATMEL_TC_TC2XC2S_NONE (1 << 4)
0114 #define ATMEL_TC_TC2XC2S_TIOA0 (2 << 4)
0115 #define ATMEL_TC_TC2XC2S_TIOA1 (3 << 4)
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 #define ATMEL_TC_CHAN(idx) ((idx)*0x40)
0137 #define ATMEL_TC_REG(idx, reg) (ATMEL_TC_CHAN(idx) + ATMEL_TC_ ## reg)
0138
0139 #define ATMEL_TC_CCR 0x00
0140 #define ATMEL_TC_CLKEN (1 << 0)
0141 #define ATMEL_TC_CLKDIS (1 << 1)
0142 #define ATMEL_TC_SWTRG (1 << 2)
0143
0144 #define ATMEL_TC_CMR 0x04
0145
0146
0147 #define ATMEL_TC_TCCLKS (7 << 0)
0148 #define ATMEL_TC_TIMER_CLOCK1 (0 << 0)
0149 #define ATMEL_TC_TIMER_CLOCK2 (1 << 0)
0150 #define ATMEL_TC_TIMER_CLOCK3 (2 << 0)
0151 #define ATMEL_TC_TIMER_CLOCK4 (3 << 0)
0152 #define ATMEL_TC_TIMER_CLOCK5 (4 << 0)
0153 #define ATMEL_TC_XC0 (5 << 0)
0154 #define ATMEL_TC_XC1 (6 << 0)
0155 #define ATMEL_TC_XC2 (7 << 0)
0156 #define ATMEL_TC_CLKI (1 << 3)
0157 #define ATMEL_TC_BURST (3 << 4)
0158 #define ATMEL_TC_GATE_NONE (0 << 4)
0159 #define ATMEL_TC_GATE_XC0 (1 << 4)
0160 #define ATMEL_TC_GATE_XC1 (2 << 4)
0161 #define ATMEL_TC_GATE_XC2 (3 << 4)
0162 #define ATMEL_TC_WAVE (1 << 15)
0163
0164
0165 #define ATMEL_TC_LDBSTOP (1 << 6)
0166 #define ATMEL_TC_LDBDIS (1 << 7)
0167 #define ATMEL_TC_ETRGEDG (3 << 8)
0168 #define ATMEL_TC_ETRGEDG_NONE (0 << 8)
0169 #define ATMEL_TC_ETRGEDG_RISING (1 << 8)
0170 #define ATMEL_TC_ETRGEDG_FALLING (2 << 8)
0171 #define ATMEL_TC_ETRGEDG_BOTH (3 << 8)
0172 #define ATMEL_TC_ABETRG (1 << 10)
0173 #define ATMEL_TC_CPCTRG (1 << 14)
0174 #define ATMEL_TC_LDRA (3 << 16)
0175 #define ATMEL_TC_LDRA_NONE (0 << 16)
0176 #define ATMEL_TC_LDRA_RISING (1 << 16)
0177 #define ATMEL_TC_LDRA_FALLING (2 << 16)
0178 #define ATMEL_TC_LDRA_BOTH (3 << 16)
0179 #define ATMEL_TC_LDRB (3 << 18)
0180 #define ATMEL_TC_LDRB_NONE (0 << 18)
0181 #define ATMEL_TC_LDRB_RISING (1 << 18)
0182 #define ATMEL_TC_LDRB_FALLING (2 << 18)
0183 #define ATMEL_TC_LDRB_BOTH (3 << 18)
0184
0185
0186 #define ATMEL_TC_CPCSTOP (1 << 6)
0187 #define ATMEL_TC_CPCDIS (1 << 7)
0188 #define ATMEL_TC_EEVTEDG (3 << 8)
0189 #define ATMEL_TC_EEVTEDG_NONE (0 << 8)
0190 #define ATMEL_TC_EEVTEDG_RISING (1 << 8)
0191 #define ATMEL_TC_EEVTEDG_FALLING (2 << 8)
0192 #define ATMEL_TC_EEVTEDG_BOTH (3 << 8)
0193 #define ATMEL_TC_EEVT (3 << 10)
0194 #define ATMEL_TC_EEVT_TIOB (0 << 10)
0195 #define ATMEL_TC_EEVT_XC0 (1 << 10)
0196 #define ATMEL_TC_EEVT_XC1 (2 << 10)
0197 #define ATMEL_TC_EEVT_XC2 (3 << 10)
0198 #define ATMEL_TC_ENETRG (1 << 12)
0199 #define ATMEL_TC_WAVESEL (3 << 13)
0200 #define ATMEL_TC_WAVESEL_UP (0 << 13)
0201 #define ATMEL_TC_WAVESEL_UPDOWN (1 << 13)
0202 #define ATMEL_TC_WAVESEL_UP_AUTO (2 << 13)
0203 #define ATMEL_TC_WAVESEL_UPDOWN_AUTO (3 << 13)
0204 #define ATMEL_TC_ACPA (3 << 16)
0205 #define ATMEL_TC_ACPA_NONE (0 << 16)
0206 #define ATMEL_TC_ACPA_SET (1 << 16)
0207 #define ATMEL_TC_ACPA_CLEAR (2 << 16)
0208 #define ATMEL_TC_ACPA_TOGGLE (3 << 16)
0209 #define ATMEL_TC_ACPC (3 << 18)
0210 #define ATMEL_TC_ACPC_NONE (0 << 18)
0211 #define ATMEL_TC_ACPC_SET (1 << 18)
0212 #define ATMEL_TC_ACPC_CLEAR (2 << 18)
0213 #define ATMEL_TC_ACPC_TOGGLE (3 << 18)
0214 #define ATMEL_TC_AEEVT (3 << 20)
0215 #define ATMEL_TC_AEEVT_NONE (0 << 20)
0216 #define ATMEL_TC_AEEVT_SET (1 << 20)
0217 #define ATMEL_TC_AEEVT_CLEAR (2 << 20)
0218 #define ATMEL_TC_AEEVT_TOGGLE (3 << 20)
0219 #define ATMEL_TC_ASWTRG (3 << 22)
0220 #define ATMEL_TC_ASWTRG_NONE (0 << 22)
0221 #define ATMEL_TC_ASWTRG_SET (1 << 22)
0222 #define ATMEL_TC_ASWTRG_CLEAR (2 << 22)
0223 #define ATMEL_TC_ASWTRG_TOGGLE (3 << 22)
0224 #define ATMEL_TC_BCPB (3 << 24)
0225 #define ATMEL_TC_BCPB_NONE (0 << 24)
0226 #define ATMEL_TC_BCPB_SET (1 << 24)
0227 #define ATMEL_TC_BCPB_CLEAR (2 << 24)
0228 #define ATMEL_TC_BCPB_TOGGLE (3 << 24)
0229 #define ATMEL_TC_BCPC (3 << 26)
0230 #define ATMEL_TC_BCPC_NONE (0 << 26)
0231 #define ATMEL_TC_BCPC_SET (1 << 26)
0232 #define ATMEL_TC_BCPC_CLEAR (2 << 26)
0233 #define ATMEL_TC_BCPC_TOGGLE (3 << 26)
0234 #define ATMEL_TC_BEEVT (3 << 28)
0235 #define ATMEL_TC_BEEVT_NONE (0 << 28)
0236 #define ATMEL_TC_BEEVT_SET (1 << 28)
0237 #define ATMEL_TC_BEEVT_CLEAR (2 << 28)
0238 #define ATMEL_TC_BEEVT_TOGGLE (3 << 28)
0239 #define ATMEL_TC_BSWTRG (3 << 30)
0240 #define ATMEL_TC_BSWTRG_NONE (0 << 30)
0241 #define ATMEL_TC_BSWTRG_SET (1 << 30)
0242 #define ATMEL_TC_BSWTRG_CLEAR (2 << 30)
0243 #define ATMEL_TC_BSWTRG_TOGGLE (3 << 30)
0244
0245 #define ATMEL_TC_CV 0x10
0246 #define ATMEL_TC_RA 0x14
0247 #define ATMEL_TC_RB 0x18
0248 #define ATMEL_TC_RC 0x1c
0249
0250 #define ATMEL_TC_SR 0x20
0251
0252 #define ATMEL_TC_CLKSTA (1 << 16)
0253 #define ATMEL_TC_MTIOA (1 << 17)
0254 #define ATMEL_TC_MTIOB (1 << 18)
0255
0256 #define ATMEL_TC_IER 0x24
0257 #define ATMEL_TC_IDR 0x28
0258 #define ATMEL_TC_IMR 0x2c
0259
0260
0261 #define ATMEL_TC_COVFS (1 << 0)
0262 #define ATMEL_TC_LOVRS (1 << 1)
0263 #define ATMEL_TC_CPAS (1 << 2)
0264 #define ATMEL_TC_CPBS (1 << 3)
0265 #define ATMEL_TC_CPCS (1 << 4)
0266 #define ATMEL_TC_LDRAS (1 << 5)
0267 #define ATMEL_TC_LDRBS (1 << 6)
0268 #define ATMEL_TC_ETRGS (1 << 7)
0269 #define ATMEL_TC_ALL_IRQ (ATMEL_TC_COVFS | ATMEL_TC_LOVRS | \
0270 ATMEL_TC_CPAS | ATMEL_TC_CPBS | \
0271 ATMEL_TC_CPCS | ATMEL_TC_LDRAS | \
0272 ATMEL_TC_LDRBS | ATMEL_TC_ETRGS) \
0273
0274
0275 #endif