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