Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
mfd
ucb1x00.h
Go to the documentation of this file.
1
/*
2
* linux/include/mfd/ucb1x00.h
3
*
4
* Copyright (C) 2001 Russell King, All Rights Reserved.
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License.
9
*/
10
#ifndef UCB1200_H
11
#define UCB1200_H
12
13
#include <
linux/mfd/mcp.h
>
14
#include <
linux/gpio.h
>
15
#include <
linux/mutex.h
>
16
17
#define UCB_IO_DATA 0x00
18
#define UCB_IO_DIR 0x01
19
20
#define UCB_IO_0 (1 << 0)
21
#define UCB_IO_1 (1 << 1)
22
#define UCB_IO_2 (1 << 2)
23
#define UCB_IO_3 (1 << 3)
24
#define UCB_IO_4 (1 << 4)
25
#define UCB_IO_5 (1 << 5)
26
#define UCB_IO_6 (1 << 6)
27
#define UCB_IO_7 (1 << 7)
28
#define UCB_IO_8 (1 << 8)
29
#define UCB_IO_9 (1 << 9)
30
31
#define UCB_IE_RIS 0x02
32
#define UCB_IE_FAL 0x03
33
#define UCB_IE_STATUS 0x04
34
#define UCB_IE_CLEAR 0x04
35
#define UCB_IE_ADC (1 << 11)
36
#define UCB_IE_TSPX (1 << 12)
37
#define UCB_IE_TSMX (1 << 13)
38
#define UCB_IE_TCLIP (1 << 14)
39
#define UCB_IE_ACLIP (1 << 15)
40
41
#define UCB_IRQ_TSPX 12
42
43
#define UCB_TC_A 0x05
44
#define UCB_TC_A_LOOP (1 << 7)
/* UCB1200 */
45
#define UCB_TC_A_AMPL (1 << 7)
/* UCB1300 */
46
47
#define UCB_TC_B 0x06
48
#define UCB_TC_B_VOICE_ENA (1 << 3)
49
#define UCB_TC_B_CLIP (1 << 4)
50
#define UCB_TC_B_ATT (1 << 6)
51
#define UCB_TC_B_SIDE_ENA (1 << 11)
52
#define UCB_TC_B_MUTE (1 << 13)
53
#define UCB_TC_B_IN_ENA (1 << 14)
54
#define UCB_TC_B_OUT_ENA (1 << 15)
55
56
#define UCB_AC_A 0x07
57
#define UCB_AC_B 0x08
58
#define UCB_AC_B_LOOP (1 << 8)
59
#define UCB_AC_B_MUTE (1 << 13)
60
#define UCB_AC_B_IN_ENA (1 << 14)
61
#define UCB_AC_B_OUT_ENA (1 << 15)
62
63
#define UCB_TS_CR 0x09
64
#define UCB_TS_CR_TSMX_POW (1 << 0)
65
#define UCB_TS_CR_TSPX_POW (1 << 1)
66
#define UCB_TS_CR_TSMY_POW (1 << 2)
67
#define UCB_TS_CR_TSPY_POW (1 << 3)
68
#define UCB_TS_CR_TSMX_GND (1 << 4)
69
#define UCB_TS_CR_TSPX_GND (1 << 5)
70
#define UCB_TS_CR_TSMY_GND (1 << 6)
71
#define UCB_TS_CR_TSPY_GND (1 << 7)
72
#define UCB_TS_CR_MODE_INT (0 << 8)
73
#define UCB_TS_CR_MODE_PRES (1 << 8)
74
#define UCB_TS_CR_MODE_POS (2 << 8)
75
#define UCB_TS_CR_BIAS_ENA (1 << 11)
76
#define UCB_TS_CR_TSPX_LOW (1 << 12)
77
#define UCB_TS_CR_TSMX_LOW (1 << 13)
78
79
#define UCB_ADC_CR 0x0a
80
#define UCB_ADC_SYNC_ENA (1 << 0)
81
#define UCB_ADC_VREFBYP_CON (1 << 1)
82
#define UCB_ADC_INP_TSPX (0 << 2)
83
#define UCB_ADC_INP_TSMX (1 << 2)
84
#define UCB_ADC_INP_TSPY (2 << 2)
85
#define UCB_ADC_INP_TSMY (3 << 2)
86
#define UCB_ADC_INP_AD0 (4 << 2)
87
#define UCB_ADC_INP_AD1 (5 << 2)
88
#define UCB_ADC_INP_AD2 (6 << 2)
89
#define UCB_ADC_INP_AD3 (7 << 2)
90
#define UCB_ADC_EXT_REF (1 << 5)
91
#define UCB_ADC_START (1 << 7)
92
#define UCB_ADC_ENA (1 << 15)
93
94
#define UCB_ADC_DATA 0x0b
95
#define UCB_ADC_DAT_VAL (1 << 15)
96
#define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5)
97
98
#define UCB_ID 0x0c
99
#define UCB_ID_1200 0x1004
100
#define UCB_ID_1300 0x1005
101
#define UCB_ID_TC35143 0x9712
102
103
#define UCB_MODE 0x0d
104
#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
105
#define UCB_MODE_AUD_OFF_CAN (1 << 13)
106
107
enum
ucb1x00_reset
{
108
UCB_RST_PROBE
,
109
UCB_RST_RESUME
,
110
UCB_RST_SUSPEND
,
111
UCB_RST_REMOVE
,
112
UCB_RST_PROBE_FAIL
,
113
};
114
115
struct
ucb1x00_plat_data
{
116
void
(*
reset
)(
enum
ucb1x00_reset
);
117
unsigned
irq_base
;
118
int
gpio_base
;
119
unsigned
can_wakeup
;
120
};
121
122
struct
ucb1x00
{
123
raw_spinlock_t
irq_lock
;
124
struct
mcp
*
mcp
;
125
unsigned
int
irq
;
126
int
irq_base
;
127
struct
mutex
adc_mutex
;
128
spinlock_t
io_lock
;
129
u16
id
;
130
u16
io_dir
;
131
u16
io_out
;
132
u16
adc_cr
;
133
u16
irq_fal_enbl
;
134
u16
irq_ris_enbl
;
135
u16
irq_mask
;
136
u16
irq_wake
;
137
struct
device
dev
;
138
struct
list_head
node
;
139
struct
list_head
devs
;
140
struct
gpio_chip
gpio
;
141
};
142
143
struct
ucb1x00_driver
;
144
145
struct
ucb1x00_dev
{
146
struct
list_head
dev_node
;
147
struct
list_head
drv_node
;
148
struct
ucb1x00
*
ucb
;
149
struct
ucb1x00_driver
*
drv
;
150
void
*
priv
;
151
};
152
153
struct
ucb1x00_driver
{
154
struct
list_head
node
;
155
struct
list_head
devs
;
156
int
(*
add
)(
struct
ucb1x00_dev
*
dev
);
157
void
(*
remove
)(
struct
ucb1x00_dev
*
dev
);
158
int
(*
suspend
)(
struct
ucb1x00_dev
*
dev
);
159
int
(*
resume
)(
struct
ucb1x00_dev
*
dev
);
160
};
161
162
#define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev)
163
164
int
ucb1x00_register_driver
(
struct
ucb1x00_driver
*);
165
void
ucb1x00_unregister_driver
(
struct
ucb1x00_driver
*);
166
173
static
inline
unsigned
int
ucb1x00_clkrate(
struct
ucb1x00
*
ucb
)
174
{
175
return
mcp_get_sclk_rate
(ucb->
mcp
);
176
}
177
184
static
inline
void
ucb1x00_enable(
struct
ucb1x00
*
ucb
)
185
{
186
mcp_enable
(ucb->
mcp
);
187
}
188
197
static
inline
void
ucb1x00_disable(
struct
ucb1x00
*
ucb
)
198
{
199
mcp_disable
(ucb->
mcp
);
200
}
201
211
static
inline
void
ucb1x00_reg_write(
struct
ucb1x00
*
ucb
,
unsigned
int
reg
,
unsigned
int
val
)
212
{
213
mcp_reg_write
(ucb->
mcp
, reg, val);
214
}
215
224
static
inline
unsigned
int
ucb1x00_reg_read(
struct
ucb1x00
*
ucb
,
unsigned
int
reg
)
225
{
226
return
mcp_reg_read
(ucb->
mcp
, reg);
227
}
233
static
inline
void
ucb1x00_set_audio_divisor(
struct
ucb1x00
*
ucb
,
unsigned
int
div
)
234
{
235
mcp_set_audio_divisor
(ucb->
mcp
, div);
236
}
237
243
static
inline
void
ucb1x00_set_telecom_divisor(
struct
ucb1x00
*
ucb
,
unsigned
int
div
)
244
{
245
mcp_set_telecom_divisor
(ucb->
mcp
, div);
246
}
247
248
void
ucb1x00_io_set_dir
(
struct
ucb1x00
*
ucb
,
unsigned
int
,
unsigned
int
);
249
void
ucb1x00_io_write
(
struct
ucb1x00
*
ucb
,
unsigned
int
,
unsigned
int
);
250
unsigned
int
ucb1x00_io_read
(
struct
ucb1x00
*
ucb
);
251
252
#define UCB_NOSYNC (0)
253
#define UCB_SYNC (1)
254
255
unsigned
int
ucb1x00_adc_read
(
struct
ucb1x00
*
ucb
,
int
adc_channel,
int
sync
);
256
void
ucb1x00_adc_enable
(
struct
ucb1x00
*
ucb
);
257
void
ucb1x00_adc_disable
(
struct
ucb1x00
*
ucb
);
258
259
#endif
Generated on Thu Jan 10 2013 14:51:56 for Linux Kernel by
1.8.2