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