No empty .Rs/.Re
[netbsd-mini2440.git] / share / man / man9 / iic.9
blobc357005821a19baac6d7506c40fae7c91ec63fd3
1 .\"     $NetBSD: iic.9,v 1.3 2007/02/02 07:37:06 wiz Exp $
2 .\"     $OpenBSD: iic.9,v 1.3 2004/08/24 05:48:22 david Exp $
3 .\"
4 .\" Copyright (c) 2003 Wasabi Systems, Inc.
5 .\" All rights reserved.
6 .\"
7 .\" Written by Jason R. Thorpe for Wasabi Systems, Inc.
8 .\"
9 .\" Redistribution and use in source and binary forms, with or without
10 .\" modification, are permitted provided that the following conditions
11 .\" are met:
12 .\" 1. Redistributions of source code must retain the above copyright
13 .\"    notice, this list of conditions and the following disclaimer.
14 .\" 2. Redistributions in binary form must reproduce the above copyright
15 .\"    notice, this list of conditions and the following disclaimer in the
16 .\"    documentation and/or other materials provided with the distribution.
17 .\" 3. All advertising materials mentioning features or use of this software
18 .\"    must display the following acknowledgement:
19 .\"     This product includes software developed for the NetBSD Project by
20 .\"     Wasabi Systems, Inc.
21 .\" 4. The name of Wasabi Systems, Inc. may not be used to endorse
22 .\"    or promote products derived from this software without specific prior
23 .\"    written permission.
24 .\"
25 .\" THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27 .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 .\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
29 .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 .\" POSSIBILITY OF SUCH DAMAGE.
36 .\"
37 .Dd January 12, 2006
38 .Dt IIC 9
39 .Os
40 .Sh NAME
41 .Nm iic_acquire_bus ,
42 .Nm iic_release_bus ,
43 .Nm iic_exec ,
44 .Nm iic_smbus_write_byte ,
45 .Nm iic_smbus_read_byte ,
46 .Nm iic_smbus_receive_byte
47 .Nd Inter IC (I2C) bus
48 .Sh SYNOPSIS
49 .In dev/i2c/i2cvar.h
50 .Ft int
51 .Fo iic_acquire_bus
52 .Fa "i2c_tag_t ic"
53 .Fa "int flags"
54 .Fc
55 .Ft int
56 .Fo iic_release_bus
57 .Fa "i2c_tag_t ic"
58 .Fa "int flags"
59 .Fc
60 .Ft int
61 .Fo iic_exec
62 .Fa "i2c_tag_t ic"
63 .Fa "i2c_op_t op"
64 .Fa "i2c_addr_t addr"
65 .Fa "const void *cmdbuf"
66 .Fa "size_t cmdlen"
67 .Fa "void *buf"
68 .Fa "size_t buflen"
69 .Fa "int flags"
70 .Fc
71 .Ft int
72 .Fo iic_smbus_write_byte
73 .Fa "i2c_tag_t ic"
74 .Fa "i2c_addr_t addr"
75 .Fa "uint8_t cmd"
76 .Fa "uint8_t data"
77 .Fa "int flags"
78 .Fc
79 .Ft int
80 .Fo iic_smbus_read_byte
81 .Fa "i2c_tag_t ic"
82 .Fa "i2c_addr_t addr"
83 .Fa "uint8_t cmd"
84 .Fa "uint8_t *datap"
85 .Fa "int flags"
86 .Fc
87 .Ft int
88 .Fo iic_smbus_receive_byte
89 .Fa "i2c_tag_t ic"
90 .Fa "i2c_addr_t addr"
91 .Fa "uint8_t *datap"
92 .Fa "int flags"
93 .Fc
94 .Sh DESCRIPTION
95 I2C is a two-wire bus developed by Philips used for connecting
96 integrated circuits.
97 It is commonly used for connecting devices such as EEPROMs,
98 temperature sensors, fan controllers, real-time clocks, tuners,
99 and other types of integrated circuits.
101 .Nm iic
102 interface provides a means of communicating with I2C-connected devices.
103 The System Management Bus, or SMBus, is a variant of the I2C bus with
104 a simplified command protocol and some electrical differences.
105 .Sh DATA TYPES
106 Drivers for devices attached to the I2C bus will make use of the
107 following data types:
108 .Bl -tag -width i2c_addr_t
109 .It Fa i2c_tag_t
110 Controller tag for the I2C bus.
111 This is a pointer to a
112 .Fa struct i2c_controller ,
113 consisting of function pointers filled in by the I2C
114 controller driver.
115 .It Fa i2c_op_t
116 I2C bus operation.
117 The following I2C bus operations are defined:
118 .Bl -tag -width XXXX
119 .It I2C_OP_READ
120 Perform a read operation.
121 .It I2C_OP_READ_WITH_STOP
122 Perform a read operation and send a STOP condition on the I2C bus at
123 the conclusion of the read.
124 .It I2C_OP_WRITE
125 Perform a write operation.
126 .It I2C_OP_WRITE_WITH_STOP
127 Perform a write operation and send a STOP condition on the I2C bus at
128 the conclusion of the write.
130 .It Fa i2c_addr_t
131 I2C device address.
132 .It Fa struct i2c_attach_args
133 Devices are attached to an I2C bus using this structure.
134 The structure is defined as follows:
135 .Bd -literal
136 struct i2c_attach_args {
137         i2c_tag_t ia_tag;       /* controller */
138         i2c_addr_t ia_addr;     /* address of device */
139         int ia_size;            /* size (for EEPROMs) */
143 .Sh FUNCTIONS
144 The following functions comprise the API provided to drivers of
145 I2C-connected devices:
146 .Bl -tag -width iic_exec
147 .It Fn iic_acquire_bus "ic" "flags"
148 Acquire an exclusive lock on the I2C bus.
149 This is required since only one device may communicate on the
150 I2C bus at a time.
151 Drivers should acquire the bus lock, perform the I2C bus operations
152 necessary, and then release the bus lock.
153 Passing the
154 .Dv I2C_F_POLL
155 flag indicates to
156 .Fn iic_acquire_bus
157 that sleeping is not permitted.
158 .It Fn iic_release_bus "ic" "flags"
159 Release an exclusive lock on the I2C bus.
160 If the
161 .Dv I2C_F_POLL
162 flag was passed to
163 .Fn iic_acquire_bus ,
164 it must also be passed to
165 .Fn iic_release_bus .
166 .It Fn iic_exec "ic" "op" "addr" "cmdbuf" "cmdlen" "buf" "buflen" "flags"
167 Perform a series of I2C transactions on the bus.
168 .Fn iic_exec
169 initiates the operation by sending a START condition on the I2C
170 bus and then transmitting the address of the target device along
171 with the transaction type.
173 .Fa cmdlen
174 is non-zero, the command pointed to by
175 .Fa cmdbuf
176 is then sent to the device.
178 .Fa buflen
179 is non-zero,
180 .Fn iic_exec
181 will then transmit or receive the data, as indicated by
182 .Fa op .
184 .Fa op
185 indicates a read operation,
186 .Fn iic_exec
187 will send a REPEATED START before transferring the data.
189 .Fa op
190 so indicates, a STOP condition will be sent on the I2C
191 bus at the conclusion of the operation.
192 Passing the
193 .Dv I2C_F_POLL
194 flag indicates to
195 .Fn iic_exec
196 that sleeping is not permitted.
197 .It Fn iic_smbus_write_byte "ic" "addr" "cmd" "data" "flags"
198 Perform an SMBus WRITE BYTE operation.
199 This is equivalent to
200 I2C_OP_WRITE_WITH_STOP with
201 .Fa cmdlen
202 of 1 and
203 .Fa buflen
204 of 1.
205 .It Fn iic_smbus_read_byte "ic" "addr" "cmd" "datap" "flags"
206 Perform an SMBus READ BYTE operation.
207 This is equivalent to
208 I2C_OP_READ_WITH_STOP with
209 .Fa cmdlen
210 of 1 and
211 .Fa buflen
212 of 1.
213 .It Fn iic_smbus_receive_byte "ic" "addr" "datap" "flags"
214 Perform an SMBus RECEIVE BYTE operation.
215 This is equivalent to
216 I2C_OP_READ_WITH_STOP with
217 .Fa cmdlen
218 of 0 and
219 .Fa buflen
220 of 1.
222 .Sh CONTROLLER INTERFACE
223 The I2C controller driver must fill in the function pointers of
225 .Fa i2c_controller
226 structure, which is defined as follows:
227 .Bd -literal
228 struct i2c_controller {
229         void    *ic_cookie;     /* controller private */
231         int     (*ic_acquire_bus)(void *, int);
232         void    (*ic_release_bus)(void *, int);
234         int     (*ic_exec)(void *, i2c_op_t, i2c_addr_t,
235                    const void *, size_t, void *, size_t, int);
237         int     (*ic_send_start)(void *, int);
238         int     (*ic_send_stop)(void *, int);
239         int     (*ic_initiate_xfer)(void *, i2c_addr_t, int);
240         int     (*ic_read_byte)(void *, uint8_t *, int);
241         int     (*ic_write_byte)(void *, uint8_t, int);
246 .Fn (*ic_acquire_bus)
248 .Fn (*ic_release_bus)
249 functions must always be provided.
251 The controller driver may elect to provide an
252 .Fn (*ic_exec)
253 function.
254 This function is intended for use by automated controllers
255 that do not provide manual control over I2C bus conditions
256 such as START and STOP.
258 If the
259 .Fn (*ic_exec)
260 function is not provided, the following 5 functions will be
261 used by
262 .Fn iic_exec
263 in order to execute the I2C bus operation:
264 .Bl -tag -width XXXX
265 .It Fn (*ic_send_start) "cookie" "flags"
266 Send a START condition on the I2C bus.
268 .Dv I2C_F_POLL
269 flag indicates that sleeping is not permitted.
270 .It Fn (*ic_send_stop) "cookie" "flags"
271 Send a STOP condition on the I2C bus.
273 .Dv I2C_F_POLL
274 flag indicates that sleeping is not permitted.
275 .It Fn (*ic_initiate_xfer) "cookie" "addr" "flags"
276 Initiate a transfer on the I2C bus by sending a START condition and
277 then transmitting the I2C device address and transfer type.
279 .Dv I2C_F_READ
280 flag indicates a read transfer; the lack of this flag indicates a
281 write transfer.
283 .Dv I2C_F_POLL
284 flag indicates that sleeping is not permitted.
285 The error code
286 .Dv ETIMEDOUT
287 should be returned if a timeout that would indicate that the
288 device is not present occurs.
289 .It Fn (*ic_read_byte) "cookie" "datap" "flags"
290 Read a byte from the I2C bus into the memory location referenced by
291 .Fa datap .
293 .Dv I2C_F_LAST
294 flag indicates that this is the final byte of the transfer, and that
295 a NACK condition should be sent on the I2C bus following the transfer
296 of the byte.
298 .Dv I2C_F_STOP
299 flag indicates that a STOP condition should be sent on the I2C bus following
300 the transfer of the byte.
302 .Dv I2C_F_POLL
303 flag indicates that sleeping is not permitted.
304 .It Fn (*ic_write_byte) "cookie" "data" "flags"
305 Write the byte contained in
306 .Fa data
307 to the I2C bus.
309 .Dv I2C_F_STOP
310 flag indicates that a STOP condition should be sent on the I2C bus following
311 the transfer of the byte.
313 .Dv I2C_F_POLL
314 flag indicates that sleeping is not permitted.
316 .Sh SEE ALSO
317 .Xr iic 4
318 .Sh HISTORY
320 .Nm iic
321 API first appeared in
322 .Nx 2.0 .
324 support was added in
325 .Ox 3.6 .
326 .Sh AUTHORS
328 .Nm iic
329 API was written by
330 Steve C. Woodford and Jason R. Thorpe for
332 and then ported to
335 .An Alexander Yurchenko Aq grange@openbsd.org .