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#ifndef _LINUX_I2C_H
27#define _LINUX_I2C_H
28
29#include <linux/types.h>
30#ifdef __KERNEL__
31#include <linux/module.h>
32#include <linux/i2c-id.h>
33#include <linux/mod_devicetable.h>
34#include <linux/device.h>
35#include <linux/sched.h>
36#include <linux/mutex.h>
37
38extern struct bus_type i2c_bus_type;
39
40
41
42struct i2c_msg;
43struct i2c_algorithm;
44struct i2c_adapter;
45struct i2c_client;
46struct i2c_driver;
47union i2c_smbus_data;
48struct i2c_board_info;
49
50#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
51
52
53
54
55
56
57extern int i2c_master_send(struct i2c_client *client, const char *buf,
58 int count);
59extern int i2c_master_recv(struct i2c_client *client, char *buf, int count);
60
61
62
63extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
64 int num);
65
66
67
68
69
70
71extern s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
72 unsigned short flags, char read_write, u8 command,
73 int size, union i2c_smbus_data *data);
74
75
76
77
78extern s32 i2c_smbus_read_byte(struct i2c_client *client);
79extern s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value);
80extern s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command);
81extern s32 i2c_smbus_write_byte_data(struct i2c_client *client,
82 u8 command, u8 value);
83extern s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command);
84extern s32 i2c_smbus_write_word_data(struct i2c_client *client,
85 u8 command, u16 value);
86
87extern s32 i2c_smbus_read_block_data(struct i2c_client *client,
88 u8 command, u8 *values);
89extern s32 i2c_smbus_write_block_data(struct i2c_client *client,
90 u8 command, u8 length, const u8 *values);
91
92extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client,
93 u8 command, u8 length, u8 *values);
94extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client,
95 u8 command, u8 length,
96 const u8 *values);
97#endif
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137struct i2c_driver {
138 int id;
139 unsigned int class;
140
141
142
143
144
145 int (*attach_adapter)(struct i2c_adapter *);
146 int (*detach_adapter)(struct i2c_adapter *);
147
148
149 int (*probe)(struct i2c_client *, const struct i2c_device_id *);
150 int (*remove)(struct i2c_client *);
151
152
153 void (*shutdown)(struct i2c_client *);
154 int (*suspend)(struct i2c_client *, pm_message_t mesg);
155 int (*resume)(struct i2c_client *);
156
157
158
159
160 int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
161
162 struct device_driver driver;
163 const struct i2c_device_id *id_table;
164
165
166 int (*detect)(struct i2c_client *, int kind, struct i2c_board_info *);
167 const struct i2c_client_address_data *address_data;
168 struct list_head clients;
169};
170#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190struct i2c_client {
191 unsigned short flags;
192 unsigned short addr;
193
194
195 char name[I2C_NAME_SIZE];
196 struct i2c_adapter *adapter;
197 struct i2c_driver *driver;
198 struct device dev;
199 int irq;
200 struct list_head detected;
201};
202#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
203
204extern struct i2c_client *i2c_verify_client(struct device *dev);
205
206static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj)
207{
208 struct device * const dev = container_of(kobj, struct device, kobj);
209 return to_i2c_client(dev);
210}
211
212static inline void *i2c_get_clientdata(const struct i2c_client *dev)
213{
214 return dev_get_drvdata(&dev->dev);
215}
216
217static inline void i2c_set_clientdata(struct i2c_client *dev, void *data)
218{
219 dev_set_drvdata(&dev->dev, data);
220}
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242struct i2c_board_info {
243 char type[I2C_NAME_SIZE];
244 unsigned short flags;
245 unsigned short addr;
246 void *platform_data;
247 struct dev_archdata *archdata;
248 int irq;
249};
250
251
252
253
254
255
256
257
258
259
260
261#define I2C_BOARD_INFO(dev_type, dev_addr) \
262 .type = dev_type, .addr = (dev_addr)
263
264
265#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
266
267
268
269
270extern struct i2c_client *
271i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
272
273
274
275
276
277extern struct i2c_client *
278i2c_new_probed_device(struct i2c_adapter *adap,
279 struct i2c_board_info *info,
280 unsigned short const *addr_list);
281
282
283
284
285extern struct i2c_client *
286i2c_new_dummy(struct i2c_adapter *adap, u16 address);
287
288extern void i2c_unregister_device(struct i2c_client *);
289#endif
290
291
292
293
294
295#ifdef CONFIG_I2C_BOARDINFO
296extern int
297i2c_register_board_info(int busnum, struct i2c_board_info const *info,
298 unsigned n);
299#else
300static inline int
301i2c_register_board_info(int busnum, struct i2c_board_info const *info,
302 unsigned n)
303{
304 return 0;
305}
306#endif
307
308
309
310
311
312
313
314struct i2c_algorithm {
315
316
317
318
319
320
321 int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
322 int num);
323 int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
324 unsigned short flags, char read_write,
325 u8 command, int size, union i2c_smbus_data *data);
326
327
328 u32 (*functionality) (struct i2c_adapter *);
329};
330
331
332
333
334
335struct i2c_adapter {
336 struct module *owner;
337 unsigned int id;
338 unsigned int class;
339 const struct i2c_algorithm *algo;
340 void *algo_data;
341
342
343 u8 level;
344 struct mutex bus_lock;
345
346 int timeout;
347 int retries;
348 struct device dev;
349
350 int nr;
351 char name[48];
352 struct completion dev_released;
353};
354#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
355
356static inline void *i2c_get_adapdata(const struct i2c_adapter *dev)
357{
358 return dev_get_drvdata(&dev->dev);
359}
360
361static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
362{
363 dev_set_drvdata(&dev->dev, data);
364}
365
366
367#define I2C_CLIENT_PEC 0x04
368#define I2C_CLIENT_TEN 0x10
369
370#define I2C_CLIENT_WAKE 0x80
371
372
373#define I2C_CLASS_HWMON (1<<0)
374#define I2C_CLASS_TV_ANALOG (1<<1)
375#define I2C_CLASS_TV_DIGITAL (1<<2)
376#define I2C_CLASS_DDC (1<<3)
377#define I2C_CLASS_SPD (1<<7)
378
379
380
381
382
383struct i2c_client_address_data {
384 const unsigned short *normal_i2c;
385 const unsigned short *probe;
386 const unsigned short *ignore;
387 const unsigned short * const *forces;
388};
389
390
391#define I2C_CLIENT_END 0xfffeU
392
393
394#define ANY_I2C_BUS 0xffff
395
396
397#define I2C_ADDRS(addr, addrs...) \
398 ((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
399
400
401
402
403
404
405#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
406extern int i2c_add_adapter(struct i2c_adapter *);
407extern int i2c_del_adapter(struct i2c_adapter *);
408extern int i2c_add_numbered_adapter(struct i2c_adapter *);
409
410extern int i2c_register_driver(struct module *, struct i2c_driver *);
411extern void i2c_del_driver(struct i2c_driver *);
412
413static inline int i2c_add_driver(struct i2c_driver *driver)
414{
415 return i2c_register_driver(THIS_MODULE, driver);
416}
417
418extern struct i2c_client *i2c_use_client(struct i2c_client *client);
419extern void i2c_release_client(struct i2c_client *client);
420
421
422
423extern void i2c_clients_command(struct i2c_adapter *adap,
424 unsigned int cmd, void *arg);
425
426extern struct i2c_adapter *i2c_get_adapter(int id);
427extern void i2c_put_adapter(struct i2c_adapter *adap);
428
429
430
431static inline u32 i2c_get_functionality(struct i2c_adapter *adap)
432{
433 return adap->algo->functionality(adap);
434}
435
436
437static inline int i2c_check_functionality(struct i2c_adapter *adap, u32 func)
438{
439 return (func & i2c_get_functionality(adap)) == func;
440}
441
442
443static inline int i2c_adapter_id(struct i2c_adapter *adap)
444{
445 return adap->nr;
446}
447#endif
448#endif
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486struct i2c_msg {
487 __u16 addr;
488 __u16 flags;
489#define I2C_M_TEN 0x0010
490#define I2C_M_RD 0x0001
491#define I2C_M_NOSTART 0x4000
492#define I2C_M_REV_DIR_ADDR 0x2000
493#define I2C_M_IGNORE_NAK 0x1000
494#define I2C_M_NO_RD_ACK 0x0800
495#define I2C_M_RECV_LEN 0x0400
496 __u16 len;
497 __u8 *buf;
498};
499
500
501
502#define I2C_FUNC_I2C 0x00000001
503#define I2C_FUNC_10BIT_ADDR 0x00000002
504#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004
505#define I2C_FUNC_SMBUS_PEC 0x00000008
506#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000
507#define I2C_FUNC_SMBUS_QUICK 0x00010000
508#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000
509#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000
510#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000
511#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
512#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000
513#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
514#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000
515#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
516#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
517#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000
518#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000
519
520#define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \
521 I2C_FUNC_SMBUS_WRITE_BYTE)
522#define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \
523 I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
524#define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \
525 I2C_FUNC_SMBUS_WRITE_WORD_DATA)
526#define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
527 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
528#define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
529 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
530
531#define I2C_FUNC_SMBUS_EMUL (I2C_FUNC_SMBUS_QUICK | \
532 I2C_FUNC_SMBUS_BYTE | \
533 I2C_FUNC_SMBUS_BYTE_DATA | \
534 I2C_FUNC_SMBUS_WORD_DATA | \
535 I2C_FUNC_SMBUS_PROC_CALL | \
536 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
537 I2C_FUNC_SMBUS_I2C_BLOCK | \
538 I2C_FUNC_SMBUS_PEC)
539
540
541
542
543#define I2C_SMBUS_BLOCK_MAX 32
544union i2c_smbus_data {
545 __u8 byte;
546 __u16 word;
547 __u8 block[I2C_SMBUS_BLOCK_MAX + 2];
548
549};
550
551
552#define I2C_SMBUS_READ 1
553#define I2C_SMBUS_WRITE 0
554
555
556
557#define I2C_SMBUS_QUICK 0
558#define I2C_SMBUS_BYTE 1
559#define I2C_SMBUS_BYTE_DATA 2
560#define I2C_SMBUS_WORD_DATA 3
561#define I2C_SMBUS_PROC_CALL 4
562#define I2C_SMBUS_BLOCK_DATA 5
563#define I2C_SMBUS_I2C_BLOCK_BROKEN 6
564#define I2C_SMBUS_BLOCK_PROC_CALL 7
565#define I2C_SMBUS_I2C_BLOCK_DATA 8
566
567
568#ifdef __KERNEL__
569
570
571
572#define I2C_CLIENT_MAX_OPTS 48
573
574
575#define I2C_CLIENT_DEFAULTS {I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
576 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
577 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
578 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
579 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
580 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
581 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
582 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
583 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
584 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
585 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
586 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
587 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
588 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
589 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
590 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END}
591
592
593
594
595#define I2C_CLIENT_MODULE_PARM(var,desc) \
596 static unsigned short var[I2C_CLIENT_MAX_OPTS] = I2C_CLIENT_DEFAULTS; \
597 static unsigned int var##_num; \
598 module_param_array(var, short, &var##_num, 0); \
599 MODULE_PARM_DESC(var, desc)
600
601#define I2C_CLIENT_MODULE_PARM_FORCE(name) \
602I2C_CLIENT_MODULE_PARM(force_##name, \
603 "List of adapter,address pairs which are " \
604 "unquestionably assumed to contain a `" \
605 # name "' chip")
606
607
608#define I2C_CLIENT_INSMOD_COMMON \
609I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan " \
610 "additionally"); \
611I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \
612 "scan"); \
613static const struct i2c_client_address_data addr_data = { \
614 .normal_i2c = normal_i2c, \
615 .probe = probe, \
616 .ignore = ignore, \
617 .forces = forces, \
618}
619
620#define I2C_CLIENT_FORCE_TEXT \
621 "List of adapter,address pairs to boldly assume to be present"
622
623
624
625#define I2C_CLIENT_INSMOD \
626I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
627static const unsigned short * const forces[] = { force, NULL }; \
628I2C_CLIENT_INSMOD_COMMON
629
630#define I2C_CLIENT_INSMOD_1(chip1) \
631enum chips { any_chip, chip1 }; \
632I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
633I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
634static const unsigned short * const forces[] = { force, \
635 force_##chip1, NULL }; \
636I2C_CLIENT_INSMOD_COMMON
637
638#define I2C_CLIENT_INSMOD_2(chip1, chip2) \
639enum chips { any_chip, chip1, chip2 }; \
640I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
641I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
642I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
643static const unsigned short * const forces[] = { force, \
644 force_##chip1, force_##chip2, NULL }; \
645I2C_CLIENT_INSMOD_COMMON
646
647#define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3) \
648enum chips { any_chip, chip1, chip2, chip3 }; \
649I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
650I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
651I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
652I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
653static const unsigned short * const forces[] = { force, \
654 force_##chip1, force_##chip2, force_##chip3, NULL }; \
655I2C_CLIENT_INSMOD_COMMON
656
657#define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4) \
658enum chips { any_chip, chip1, chip2, chip3, chip4 }; \
659I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
660I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
661I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
662I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
663I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
664static const unsigned short * const forces[] = { force, \
665 force_##chip1, force_##chip2, force_##chip3, \
666 force_##chip4, NULL}; \
667I2C_CLIENT_INSMOD_COMMON
668
669#define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5) \
670enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \
671I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
672I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
673I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
674I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
675I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
676I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
677static const unsigned short * const forces[] = { force, \
678 force_##chip1, force_##chip2, force_##chip3, \
679 force_##chip4, force_##chip5, NULL }; \
680I2C_CLIENT_INSMOD_COMMON
681
682#define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6) \
683enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \
684I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
685I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
686I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
687I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
688I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
689I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
690I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
691static const unsigned short * const forces[] = { force, \
692 force_##chip1, force_##chip2, force_##chip3, \
693 force_##chip4, force_##chip5, force_##chip6, NULL }; \
694I2C_CLIENT_INSMOD_COMMON
695
696#define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \
697enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \
698 chip7 }; \
699I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
700I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
701I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
702I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
703I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
704I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
705I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
706I2C_CLIENT_MODULE_PARM_FORCE(chip7); \
707static const unsigned short * const forces[] = { force, \
708 force_##chip1, force_##chip2, force_##chip3, \
709 force_##chip4, force_##chip5, force_##chip6, \
710 force_##chip7, NULL }; \
711I2C_CLIENT_INSMOD_COMMON
712
713#define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \
714enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \
715 chip7, chip8 }; \
716I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
717I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
718I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
719I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
720I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
721I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
722I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
723I2C_CLIENT_MODULE_PARM_FORCE(chip7); \
724I2C_CLIENT_MODULE_PARM_FORCE(chip8); \
725static const unsigned short * const forces[] = { force, \
726 force_##chip1, force_##chip2, force_##chip3, \
727 force_##chip4, force_##chip5, force_##chip6, \
728 force_##chip7, force_##chip8, NULL }; \
729I2C_CLIENT_INSMOD_COMMON
730#endif
731#endif
732