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#ifndef _I2C_H_
30#define _I2C_H_
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47#define I2C_RXTX_LEN 128
48
49#if defined(CONFIG_I2C_MULTI_BUS)
50#define CONFIG_SYS_MAX_I2C_BUS 2
51#define I2C_GET_BUS() i2c_get_bus_num()
52#define I2C_SET_BUS(a) i2c_set_bus_num(a)
53#else
54#define CONFIG_SYS_MAX_I2C_BUS 1
55#define I2C_GET_BUS() 0
56#define I2C_SET_BUS(a)
57#endif
58
59
60#if !defined(CONFIG_SYS_RTC_BUS_NUM)
61#define CONFIG_SYS_RTC_BUS_NUM 0
62#endif
63#if !defined(CONFIG_SYS_DTT_BUS_NUM)
64#define CONFIG_SYS_DTT_BUS_NUM 0
65#endif
66#if !defined(CONFIG_SYS_SPD_BUS_NUM)
67#define CONFIG_SYS_SPD_BUS_NUM 0
68#endif
69
70#ifndef I2C_SOFT_DECLARATIONS
71# if defined(CONFIG_MPC8260)
72# define I2C_SOFT_DECLARATIONS volatile ioport_t *iop = ioport_addr((immap_t *)CONFIG_SYS_IMMR, I2C_PORT);
73# elif defined(CONFIG_8xx)
74# define I2C_SOFT_DECLARATIONS volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
75# else
76# define I2C_SOFT_DECLARATIONS
77# endif
78#endif
79
80#ifdef CONFIG_8xx
81
82
83
84#ifndef CONFIG_SYS_I2C_SPEED
85#define CONFIG_SYS_I2C_SPEED 50000
86#endif
87
88#ifndef CONFIG_SYS_I2C_SLAVE
89#define CONFIG_SYS_I2C_SLAVE 0xFE
90#endif
91#endif
92
93
94
95
96
97void i2c_init(int speed, int slaveaddr);
98#ifdef CONFIG_SYS_I2C_INIT_BOARD
99void i2c_init_board(void);
100#endif
101
102#if defined(CONFIG_I2C_MUX)
103
104typedef struct _mux {
105 uchar chip;
106 uchar channel;
107 char *name;
108 struct _mux *next;
109} I2C_MUX;
110
111typedef struct _mux_device {
112 int busid;
113 I2C_MUX *mux;
114 struct _mux_device *next;
115} I2C_MUX_DEVICE;
116
117int i2c_mux_add_device(I2C_MUX_DEVICE *dev);
118
119I2C_MUX_DEVICE *i2c_mux_search_device(int id);
120I2C_MUX_DEVICE *i2c_mux_ident_muxstring (uchar *buf);
121int i2x_mux_select_mux(int bus);
122int i2c_mux_ident_muxstring_f (uchar *buf);
123#endif
124
125
126
127
128
129int i2c_probe(uchar chip);
130
131
132
133
134
135
136
137
138
139
140
141
142
143int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len);
144int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len);
145
146
147
148
149static inline u8 i2c_reg_read(u8 addr, u8 reg)
150{
151 u8 buf;
152
153#ifdef CONFIG_8xx
154
155 i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
156#endif
157
158#ifdef DEBUG
159 printf("%s: addr=0x%02x, reg=0x%02x\n", __func__, addr, reg);
160#endif
161
162#ifdef CONFIG_BLACKFIN
163
164
165
166 i2c_read(addr, reg, 0, &buf, 1);
167#else
168 i2c_read(addr, reg, 1, &buf, 1);
169#endif
170
171 return buf;
172}
173
174static inline void i2c_reg_write(u8 addr, u8 reg, u8 val)
175{
176#ifdef CONFIG_8xx
177
178 i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
179#endif
180
181#ifdef DEBUG
182 printf("%s: addr=0x%02x, reg=0x%02x, val=0x%02x\n",
183 __func__, addr, reg, val);
184#endif
185
186#ifdef CONFIG_BLACKFIN
187
188
189
190 i2c_write(addr, reg, 0, &val, 1);
191#else
192 i2c_write(addr, reg, 1, &val, 1);
193#endif
194}
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211int i2c_set_bus_num(unsigned int bus);
212
213
214
215
216
217
218
219unsigned int i2c_get_bus_num(void);
220
221
222
223
224
225
226
227
228
229
230
231int i2c_set_bus_speed(unsigned int);
232
233
234
235
236
237
238
239unsigned int i2c_get_bus_speed(void);
240
241#endif
242