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
i2c.h
Go to the documentation of this file.
1
/* ------------------------------------------------------------------------- */
2
/* */
3
/* i2c.h - definitions for the i2c-bus interface */
4
/* */
5
/* ------------------------------------------------------------------------- */
6
/* Copyright (C) 1995-2000 Simon G. Vogl
7
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2 of the License, or
11
(at your option) any later version.
12
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
17
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
MA 02110-1301 USA. */
22
/* ------------------------------------------------------------------------- */
23
24
/* With some changes from Kyösti Mälkki <
[email protected]
> and
25
Frodo Looijaard <
[email protected]
> */
26
#ifndef _LINUX_I2C_H
27
#define _LINUX_I2C_H
28
29
#include <
linux/mod_devicetable.h
>
30
#include <linux/device.h>
/* for struct device */
31
#include <linux/sched.h>
/* for completion */
32
#include <
linux/mutex.h
>
33
#include <
linux/of.h
>
/* for struct device_node */
34
#include <linux/swab.h>
/* for swab16 */
35
#include <
uapi/linux/i2c.h
>
36
37
extern
struct
bus_type
i2c_bus_type
;
38
extern
struct
device_type
i2c_adapter_type
;
39
40
/* --- General options ------------------------------------------------ */
41
42
struct
i2c_msg
;
43
struct
i2c_algorithm
;
44
struct
i2c_adapter
;
45
struct
i2c_client
;
46
struct
i2c_driver
;
47
union
i2c_smbus_data
;
48
struct
i2c_board_info
;
49
50
struct
module
;
51
52
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
53
/*
54
* The master routines are the ones normally used to transmit data to devices
55
* on a bus (or read from them). Apart from two basic transfer functions to
56
* transmit one message at a time, a more complex version can be used to
57
* transmit an arbitrary number of messages without interruption.
58
* @count must be be less than 64k since msg.len is u16.
59
*/
60
extern
int
i2c_master_send
(
const
struct
i2c_client
*
client
,
const
char
*
buf
,
61
int
count
);
62
extern
int
i2c_master_recv
(
const
struct
i2c_client
*
client
,
char
*
buf
,
63
int
count
);
64
65
/* Transfer num messages.
66
*/
67
extern
int
i2c_transfer
(
struct
i2c_adapter
*adap,
struct
i2c_msg
*msgs,
68
int
num);
69
/* Unlocked flavor */
70
extern
int
__i2c_transfer
(
struct
i2c_adapter
*adap,
struct
i2c_msg
*msgs,
71
int
num);
72
73
/* This is the very generalized SMBus access routine. You probably do not
74
want to use this, though; one of the functions below may be much easier,
75
and probably just as fast.
76
Note that we use i2c_adapter here, because you do not need a specific
77
smbus adapter to call this function. */
78
extern
s32
i2c_smbus_xfer
(
struct
i2c_adapter
*
adapter
,
u16
addr
,
79
unsigned
short
flags
,
char
read_write,
u8
command
,
80
int
size
,
union
i2c_smbus_data
*
data
);
81
82
/* Now follow the 'nice' access routines. These also document the calling
83
conventions of i2c_smbus_xfer. */
84
85
extern
s32
i2c_smbus_read_byte
(
const
struct
i2c_client
*
client
);
86
extern
s32
i2c_smbus_write_byte
(
const
struct
i2c_client
*
client
,
u8
value
);
87
extern
s32
i2c_smbus_read_byte_data
(
const
struct
i2c_client
*
client
,
88
u8
command
);
89
extern
s32
i2c_smbus_write_byte_data
(
const
struct
i2c_client
*
client
,
90
u8
command
,
u8
value
);
91
extern
s32
i2c_smbus_read_word_data
(
const
struct
i2c_client
*
client
,
92
u8
command
);
93
extern
s32
i2c_smbus_write_word_data
(
const
struct
i2c_client
*
client
,
94
u8
command
,
u16
value
);
95
96
static
inline
s32
97
i2c_smbus_read_word_swapped(
const
struct
i2c_client
*
client
,
u8
command
)
98
{
99
s32
value
=
i2c_smbus_read_word_data
(client, command);
100
101
return
(value < 0) ? value :
swab16
(value);
102
}
103
104
static
inline
s32
105
i2c_smbus_write_word_swapped(
const
struct
i2c_client
*client,
106
u8
command,
u16
value)
107
{
108
return
i2c_smbus_write_word_data
(client, command,
swab16
(value));
109
}
110
111
/* Returns the number of read bytes */
112
extern
s32
i2c_smbus_read_block_data
(
const
struct
i2c_client
*client,
113
u8
command,
u8
*
values
);
114
extern
s32
i2c_smbus_write_block_data
(
const
struct
i2c_client
*client,
115
u8
command,
u8
length
,
const
u8
*
values
);
116
/* Returns the number of read bytes */
117
extern
s32
i2c_smbus_read_i2c_block_data
(
const
struct
i2c_client
*client,
118
u8
command,
u8
length
,
u8
*
values
);
119
extern
s32
i2c_smbus_write_i2c_block_data
(
const
struct
i2c_client
*client,
120
u8
command,
u8
length
,
121
const
u8
*
values
);
122
#endif
/* I2C */
123
162
struct
i2c_driver
{
163
unsigned
int
class
;
164
165
/* Notifies the driver that a new bus has appeared or is about to be
166
* removed. You should avoid using this, it will be removed in a
167
* near future.
168
*/
169
int
(*
attach_adapter
)(
struct
i2c_adapter
*)
__deprecated
;
170
int
(*
detach_adapter
)(
struct
i2c_adapter
*)
__deprecated
;
171
172
/* Standard driver model interfaces */
173
int
(*
probe
)(
struct
i2c_client
*,
const
struct
i2c_device_id
*);
174
int
(*
remove
)(
struct
i2c_client
*);
175
176
/* driver model interfaces that don't relate to enumeration */
177
void
(*
shutdown
)(
struct
i2c_client
*);
178
int
(*
suspend
)(
struct
i2c_client
*,
pm_message_t
mesg);
179
int
(*
resume
)(
struct
i2c_client
*);
180
181
/* Alert callback, for example for the SMBus alert protocol.
182
* The format and meaning of the data value depends on the protocol.
183
* For the SMBus alert protocol, there is a single bit of data passed
184
* as the alert response's low bit ("event flag").
185
*/
186
void
(*
alert
)(
struct
i2c_client
*,
unsigned
int
data
);
187
188
/* a ioctl like command that can be used to perform specific functions
189
* with the device.
190
*/
191
int
(*command)(
struct
i2c_client
*
client
,
unsigned
int
cmd
,
void
*
arg
);
192
193
struct
device_driver
driver
;
194
const
struct
i2c_device_id
*
id_table
;
195
196
/* Device detection callback for automatic device creation */
197
int
(*
detect
)(
struct
i2c_client
*,
struct
i2c_board_info
*);
198
const
unsigned
short
*
address_list
;
199
struct
list_head
clients
;
200
};
201
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
202
221
struct
i2c_client
{
222
unsigned
short
flags
;
/* div., see below */
223
unsigned
short
addr
;
/* chip address - NOTE: 7bit */
224
/* addresses are stored in the */
225
/* _LOWER_ 7 bits */
226
char
name
[
I2C_NAME_SIZE
];
227
struct
i2c_adapter
*
adapter
;
/* the adapter we sit on */
228
struct
i2c_driver
*
driver
;
/* and our access routines */
229
struct
device
dev
;
/* the device structure */
230
int
irq
;
/* irq issued by device */
231
struct
list_head
detected
;
232
};
233
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
234
235
extern
struct
i2c_client
*
i2c_verify_client
(
struct
device
*
dev
);
236
extern
struct
i2c_adapter
*
i2c_verify_adapter
(
struct
device
*
dev
);
237
238
static
inline
struct
i2c_client
*kobj_to_i2c_client(
struct
kobject
*kobj)
239
{
240
struct
device
*
const
dev
=
container_of
(kobj,
struct
device
, kobj);
241
return
to_i2c_client
(dev);
242
}
243
244
static
inline
void
*i2c_get_clientdata(
const
struct
i2c_client
*
dev
)
245
{
246
return
dev_get_drvdata
(&dev->
dev
);
247
}
248
249
static
inline
void
i2c_set_clientdata(
struct
i2c_client
*
dev
,
void
*
data
)
250
{
251
dev_set_drvdata
(&dev->
dev
, data);
252
}
253
275
struct
i2c_board_info
{
276
char
type
[
I2C_NAME_SIZE
];
277
unsigned
short
flags
;
278
unsigned
short
addr
;
279
void
*
platform_data
;
280
struct
dev_archdata
*
archdata
;
281
struct
device_node
*
of_node
;
282
int
irq
;
283
};
284
295
#define I2C_BOARD_INFO(dev_type, dev_addr) \
296
.type = dev_type, .addr = (dev_addr)
297
298
299
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
300
/* Add-on boards should register/unregister their devices; e.g. a board
301
* with integrated I2C, a config eeprom, sensors, and a codec that's
302
* used in conjunction with the primary hardware.
303
*/
304
extern
struct
i2c_client
*
305
i2c_new_device
(
struct
i2c_adapter
*adap,
struct
i2c_board_info
const
*
info
);
306
307
/* If you don't know the exact address of an I2C device, use this variant
308
* instead, which can probe for device presence in a list of possible
309
* addresses. The "probe" callback function is optional. If it is provided,
310
* it must return 1 on successful probe, 0 otherwise. If it is not provided,
311
* a default probing method is used.
312
*/
313
extern
struct
i2c_client
*
314
i2c_new_probed_device
(
struct
i2c_adapter
*adap,
315
struct
i2c_board_info
*
info
,
316
unsigned
short
const
*addr_list,
317
int
(*probe)(
struct
i2c_adapter
*,
unsigned
short
addr
));
318
319
/* Common custom probe functions */
320
extern
int
i2c_probe_func_quick_read
(
struct
i2c_adapter
*,
unsigned
short
addr
);
321
322
/* For devices that use several addresses, use i2c_new_dummy() to make
323
* client handles for the extra addresses.
324
*/
325
extern
struct
i2c_client
*
326
i2c_new_dummy
(
struct
i2c_adapter
*adap,
u16
address
);
327
328
extern
void
i2c_unregister_device
(
struct
i2c_client
*);
329
#endif
/* I2C */
330
331
/* Mainboard arch_initcall() code should register all its I2C devices.
332
* This is done at arch_initcall time, before declaring any i2c adapters.
333
* Modules for add-on boards must use other calls.
334
*/
335
#ifdef CONFIG_I2C_BOARDINFO
336
extern
int
337
i2c_register_board_info
(
int
busnum
,
struct
i2c_board_info
const
*info,
338
unsigned
n
);
339
#else
340
static
inline
int
341
i2c_register_board_info
(
int
busnum
,
struct
i2c_board_info
const
*info,
342
unsigned
n
)
343
{
344
return
0;
345
}
346
#endif
/* I2C_BOARDINFO */
347
348
/*
349
* The following structs are for those who like to implement new bus drivers:
350
* i2c_algorithm is the interface to a class of hardware solutions which can
351
* be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
352
* to name two of the most common.
353
*/
354
struct
i2c_algorithm
{
355
/* If an adapter algorithm can't do I2C-level access, set master_xfer
356
to NULL. If an adapter algorithm can do SMBus access, set
357
smbus_xfer. If set to NULL, the SMBus protocol is simulated
358
using common I2C messages */
359
/* master_xfer should return the number of messages successfully
360
processed, or a negative value on error */
361
int
(*
master_xfer
)(
struct
i2c_adapter
*adap,
struct
i2c_msg
*msgs,
362
int
num
);
363
int
(*
smbus_xfer
) (
struct
i2c_adapter
*adap,
u16
addr
,
364
unsigned
short
flags
,
char
read_write,
365
u8
command
,
int
size
,
union
i2c_smbus_data
*
data
);
366
367
/* To determine what the adapter supports */
368
u32
(*
functionality
) (
struct
i2c_adapter
*);
369
};
370
371
/*
372
* i2c_adapter is the structure used to identify a physical i2c bus along
373
* with the access algorithms necessary to access it.
374
*/
375
struct
i2c_adapter
{
376
struct
module
*
owner
;
377
unsigned
int
class
;
/* classes to allow probing for */
378
const
struct
i2c_algorithm
*
algo
;
/* the algorithm to access the bus */
379
void
*
algo_data
;
380
381
/* data fields that are valid for all devices */
382
struct
rt_mutex
bus_lock
;
383
384
int
timeout
;
/* in jiffies */
385
int
retries
;
386
struct
device
dev
;
/* the adapter device */
387
388
int
nr
;
389
char
name
[48];
390
struct
completion
dev_released
;
391
392
struct
mutex
userspace_clients_lock
;
393
struct
list_head
userspace_clients
;
394
};
395
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
396
397
static
inline
void
*i2c_get_adapdata(
const
struct
i2c_adapter
*
dev
)
398
{
399
return
dev_get_drvdata
(&dev->
dev
);
400
}
401
402
static
inline
void
i2c_set_adapdata(
struct
i2c_adapter
*
dev
,
void
*
data
)
403
{
404
dev_set_drvdata
(&dev->
dev
, data);
405
}
406
407
static
inline
struct
i2c_adapter
*
408
i2c_parent_is_i2c_adapter(
const
struct
i2c_adapter
*
adapter
)
409
{
410
struct
device
*
parent
= adapter->
dev
.parent;
411
412
if
(parent !=
NULL
&& parent->
type
== &
i2c_adapter_type
)
413
return
to_i2c_adapter
(parent);
414
else
415
return
NULL
;
416
}
417
418
int
i2c_for_each_dev
(
void
*
data
,
int
(*
fn
)(
struct
device
*,
void
*));
419
420
/* Adapter locking functions, exported for shared pin cases */
421
void
i2c_lock_adapter
(
struct
i2c_adapter
*);
422
void
i2c_unlock_adapter
(
struct
i2c_adapter
*);
423
424
/*flags for the client struct: */
425
#define I2C_CLIENT_PEC 0x04
/* Use Packet Error Checking */
426
#define I2C_CLIENT_TEN 0x10
/* we have a ten bit chip address */
427
/* Must equal I2C_M_TEN below */
428
#define I2C_CLIENT_WAKE 0x80
/* for board_info; true iff can wake */
429
#define I2C_CLIENT_SCCB 0x9000
/* Use Omnivision SCCB protocol */
430
/* Must match I2C_M_STOP|IGNORE_NAK */
431
432
/* i2c adapter classes (bitmask) */
433
#define I2C_CLASS_HWMON (1<<0)
/* lm_sensors, ... */
434
#define I2C_CLASS_DDC (1<<3)
/* DDC bus on graphics adapters */
435
#define I2C_CLASS_SPD (1<<7)
/* Memory modules */
436
437
/* Internal numbers to terminate lists */
438
#define I2C_CLIENT_END 0xfffeU
439
440
/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */
441
#define I2C_ADDRS(addr, addrs...) \
442
((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
443
444
445
/* ----- functions exported by i2c.o */
446
447
/* administration...
448
*/
449
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
450
extern
int
i2c_add_adapter
(
struct
i2c_adapter
*);
451
extern
int
i2c_del_adapter
(
struct
i2c_adapter
*);
452
extern
int
i2c_add_numbered_adapter
(
struct
i2c_adapter
*);
453
454
extern
int
i2c_register_driver
(
struct
module
*,
struct
i2c_driver
*);
455
extern
void
i2c_del_driver
(
struct
i2c_driver
*);
456
457
/* use a define to avoid include chaining to get THIS_MODULE */
458
#define i2c_add_driver(driver) \
459
i2c_register_driver(THIS_MODULE, driver)
460
461
extern
struct
i2c_client
*
i2c_use_client
(
struct
i2c_client
*client);
462
extern
void
i2c_release_client
(
struct
i2c_client
*client);
463
464
/* call the i2c_client->command() of all attached clients with
465
* the given arguments */
466
extern
void
i2c_clients_command
(
struct
i2c_adapter
*adap,
467
unsigned
int
cmd
,
void
*
arg
);
468
469
extern
struct
i2c_adapter
*
i2c_get_adapter
(
int
nr
);
470
extern
void
i2c_put_adapter
(
struct
i2c_adapter
*adap);
471
472
473
/* Return the functionality mask */
474
static
inline
u32
i2c_get_functionality(
struct
i2c_adapter
*adap)
475
{
476
return
adap->
algo
->functionality(adap);
477
}
478
479
/* Return 1 if adapter supports everything we need, 0 if not. */
480
static
inline
int
i2c_check_functionality(
struct
i2c_adapter
*adap,
u32
func
)
481
{
482
return
(func & i2c_get_functionality(adap)) ==
func
;
483
}
484
485
/* Return the adapter number for a specific adapter */
486
static
inline
int
i2c_adapter_id(
struct
i2c_adapter
*adap)
487
{
488
return
adap->
nr
;
489
}
490
499
#define module_i2c_driver(__i2c_driver) \
500
module_driver(__i2c_driver, i2c_add_driver, \
501
i2c_del_driver)
502
503
#endif
/* I2C */
504
#endif
/* _LINUX_I2C_H */
Generated on Thu Jan 10 2013 13:01:43 for Linux Kernel by
1.8.2