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#include <linux/module.h>
26#include <linux/kernel.h>
27#include <linux/errno.h>
28#include <linux/slab.h>
29#include <linux/i2c.h>
30#include <linux/init.h>
31#include <linux/idr.h>
32#include <linux/seq_file.h>
33#include <linux/platform_device.h>
34#include <linux/mutex.h>
35#include <linux/completion.h>
36#include <linux/hardirq.h>
37#include <linux/irqflags.h>
38#include <asm/uaccess.h>
39#include <asm/semaphore.h>
40
41#include "i2c-core.h"
42
43
44static DEFINE_MUTEX(core_lock);
45static DEFINE_IDR(i2c_adapter_idr);
46
47#define is_newstyle_driver(d) ((d)->probe || (d)->remove)
48
49
50
51static int i2c_device_match(struct device *dev, struct device_driver *drv)
52{
53 struct i2c_client *client = to_i2c_client(dev);
54 struct i2c_driver *driver = to_i2c_driver(drv);
55
56
57
58
59 if (!is_newstyle_driver(driver))
60 return 0;
61
62
63
64
65 return strcmp(client->driver_name, drv->name) == 0;
66}
67
68#ifdef CONFIG_HOTPLUG
69
70
71static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
72{
73 struct i2c_client *client = to_i2c_client(dev);
74
75
76 if (dev->driver || !client->driver_name)
77 return 0;
78
79 if (add_uevent_var(env, "MODALIAS=%s", client->driver_name))
80 return -ENOMEM;
81 dev_dbg(dev, "uevent\n");
82 return 0;
83}
84
85#else
86#define i2c_device_uevent NULL
87#endif
88
89static int i2c_device_probe(struct device *dev)
90{
91 struct i2c_client *client = to_i2c_client(dev);
92 struct i2c_driver *driver = to_i2c_driver(dev->driver);
93 int status;
94
95 if (!driver->probe)
96 return -ENODEV;
97 client->driver = driver;
98 dev_dbg(dev, "probe\n");
99 status = driver->probe(client);
100 if (status)
101 client->driver = NULL;
102 return status;
103}
104
105static int i2c_device_remove(struct device *dev)
106{
107 struct i2c_client *client = to_i2c_client(dev);
108 struct i2c_driver *driver;
109 int status;
110
111 if (!dev->driver)
112 return 0;
113
114 driver = to_i2c_driver(dev->driver);
115 if (driver->remove) {
116 dev_dbg(dev, "remove\n");
117 status = driver->remove(client);
118 } else {
119 dev->driver = NULL;
120 status = 0;
121 }
122 if (status == 0)
123 client->driver = NULL;
124 return status;
125}
126
127static void i2c_device_shutdown(struct device *dev)
128{
129 struct i2c_driver *driver;
130
131 if (!dev->driver)
132 return;
133 driver = to_i2c_driver(dev->driver);
134 if (driver->shutdown)
135 driver->shutdown(to_i2c_client(dev));
136}
137
138static int i2c_device_suspend(struct device * dev, pm_message_t mesg)
139{
140 struct i2c_driver *driver;
141
142 if (!dev->driver)
143 return 0;
144 driver = to_i2c_driver(dev->driver);
145 if (!driver->suspend)
146 return 0;
147 return driver->suspend(to_i2c_client(dev), mesg);
148}
149
150static int i2c_device_resume(struct device * dev)
151{
152 struct i2c_driver *driver;
153
154 if (!dev->driver)
155 return 0;
156 driver = to_i2c_driver(dev->driver);
157 if (!driver->resume)
158 return 0;
159 return driver->resume(to_i2c_client(dev));
160}
161
162static void i2c_client_release(struct device *dev)
163{
164 struct i2c_client *client = to_i2c_client(dev);
165 complete(&client->released);
166}
167
168static void i2c_client_dev_release(struct device *dev)
169{
170 kfree(to_i2c_client(dev));
171}
172
173static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
174{
175 struct i2c_client *client = to_i2c_client(dev);
176 return sprintf(buf, "%s\n", client->name);
177}
178
179static ssize_t show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
180{
181 struct i2c_client *client = to_i2c_client(dev);
182 return client->driver_name
183 ? sprintf(buf, "%s\n", client->driver_name)
184 : 0;
185}
186
187static struct device_attribute i2c_dev_attrs[] = {
188 __ATTR(name, S_IRUGO, show_client_name, NULL),
189
190 __ATTR(modalias, S_IRUGO, show_modalias, NULL),
191 { },
192};
193
194static struct bus_type i2c_bus_type = {
195 .name = "i2c",
196 .dev_attrs = i2c_dev_attrs,
197 .match = i2c_device_match,
198 .uevent = i2c_device_uevent,
199 .probe = i2c_device_probe,
200 .remove = i2c_device_remove,
201 .shutdown = i2c_device_shutdown,
202 .suspend = i2c_device_suspend,
203 .resume = i2c_device_resume,
204};
205
206
207
208
209
210
211
212
213
214
215
216struct i2c_client *i2c_verify_client(struct device *dev)
217{
218 return (dev->bus == &i2c_bus_type)
219 ? to_i2c_client(dev)
220 : NULL;
221}
222EXPORT_SYMBOL(i2c_verify_client);
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239struct i2c_client *
240i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
241{
242 struct i2c_client *client;
243 int status;
244
245 client = kzalloc(sizeof *client, GFP_KERNEL);
246 if (!client)
247 return NULL;
248
249 client->adapter = adap;
250
251 client->dev.platform_data = info->platform_data;
252 device_init_wakeup(&client->dev, info->flags & I2C_CLIENT_WAKE);
253
254 client->flags = info->flags & ~I2C_CLIENT_WAKE;
255 client->addr = info->addr;
256 client->irq = info->irq;
257
258 strlcpy(client->driver_name, info->driver_name,
259 sizeof(client->driver_name));
260 strlcpy(client->name, info->type, sizeof(client->name));
261
262
263
264
265
266
267 status = i2c_attach_client(client);
268 if (status < 0) {
269 kfree(client);
270 client = NULL;
271 }
272 return client;
273}
274EXPORT_SYMBOL_GPL(i2c_new_device);
275
276
277
278
279
280
281
282void i2c_unregister_device(struct i2c_client *client)
283{
284 struct i2c_adapter *adapter = client->adapter;
285 struct i2c_driver *driver = client->driver;
286
287 if (driver && !is_newstyle_driver(driver)) {
288 dev_err(&client->dev, "can't unregister devices "
289 "with legacy drivers\n");
290 WARN_ON(1);
291 return;
292 }
293
294 mutex_lock(&adapter->clist_lock);
295 list_del(&client->list);
296 mutex_unlock(&adapter->clist_lock);
297
298 device_unregister(&client->dev);
299}
300EXPORT_SYMBOL_GPL(i2c_unregister_device);
301
302
303static int dummy_nop(struct i2c_client *client)
304{
305 return 0;
306}
307
308static struct i2c_driver dummy_driver = {
309 .driver.name = "dummy",
310 .probe = dummy_nop,
311 .remove = dummy_nop,
312};
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333struct i2c_client *
334i2c_new_dummy(struct i2c_adapter *adapter, u16 address, const char *type)
335{
336 struct i2c_board_info info = {
337 .driver_name = "dummy",
338 .addr = address,
339 };
340
341 if (type)
342 strlcpy(info.type, type, sizeof info.type);
343 return i2c_new_device(adapter, &info);
344}
345EXPORT_SYMBOL_GPL(i2c_new_dummy);
346
347
348
349
350
351static void i2c_adapter_dev_release(struct device *dev)
352{
353 struct i2c_adapter *adap = to_i2c_adapter(dev);
354 complete(&adap->dev_released);
355}
356
357static ssize_t
358show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
359{
360 struct i2c_adapter *adap = to_i2c_adapter(dev);
361 return sprintf(buf, "%s\n", adap->name);
362}
363
364static struct device_attribute i2c_adapter_attrs[] = {
365 __ATTR(name, S_IRUGO, show_adapter_name, NULL),
366 { },
367};
368
369static struct class i2c_adapter_class = {
370 .owner = THIS_MODULE,
371 .name = "i2c-adapter",
372 .dev_attrs = i2c_adapter_attrs,
373};
374
375static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
376{
377 struct i2c_devinfo *devinfo;
378
379 mutex_lock(&__i2c_board_lock);
380 list_for_each_entry(devinfo, &__i2c_board_list, list) {
381 if (devinfo->busnum == adapter->nr
382 && !i2c_new_device(adapter,
383 &devinfo->board_info))
384 printk(KERN_ERR "i2c-core: can't create i2c%d-%04x\n",
385 i2c_adapter_id(adapter),
386 devinfo->board_info.addr);
387 }
388 mutex_unlock(&__i2c_board_lock);
389}
390
391static int i2c_do_add_adapter(struct device_driver *d, void *data)
392{
393 struct i2c_driver *driver = to_i2c_driver(d);
394 struct i2c_adapter *adap = data;
395
396 if (driver->attach_adapter) {
397
398 driver->attach_adapter(adap);
399 }
400 return 0;
401}
402
403static int i2c_register_adapter(struct i2c_adapter *adap)
404{
405 int res = 0, dummy;
406
407 mutex_init(&adap->bus_lock);
408 mutex_init(&adap->clist_lock);
409 INIT_LIST_HEAD(&adap->clients);
410
411 mutex_lock(&core_lock);
412
413
414
415
416
417 if (adap->dev.parent == NULL) {
418 adap->dev.parent = &platform_bus;
419 pr_debug("I2C adapter driver [%s] forgot to specify "
420 "physical device\n", adap->name);
421 }
422 sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
423 adap->dev.release = &i2c_adapter_dev_release;
424 adap->dev.class = &i2c_adapter_class;
425 res = device_register(&adap->dev);
426 if (res)
427 goto out_list;
428
429 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
430
431
432 if (adap->nr < __i2c_first_dynamic_bus_num)
433 i2c_scan_static_board_info(adap);
434
435
436 dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap,
437 i2c_do_add_adapter);
438
439out_unlock:
440 mutex_unlock(&core_lock);
441 return res;
442
443out_list:
444 idr_remove(&i2c_adapter_idr, adap->nr);
445 goto out_unlock;
446}
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461int i2c_add_adapter(struct i2c_adapter *adapter)
462{
463 int id, res = 0;
464
465retry:
466 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
467 return -ENOMEM;
468
469 mutex_lock(&core_lock);
470
471 res = idr_get_new_above(&i2c_adapter_idr, adapter,
472 __i2c_first_dynamic_bus_num, &id);
473 mutex_unlock(&core_lock);
474
475 if (res < 0) {
476 if (res == -EAGAIN)
477 goto retry;
478 return res;
479 }
480
481 adapter->nr = id;
482 return i2c_register_adapter(adapter);
483}
484EXPORT_SYMBOL(i2c_add_adapter);
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506int i2c_add_numbered_adapter(struct i2c_adapter *adap)
507{
508 int id;
509 int status;
510
511 if (adap->nr & ~MAX_ID_MASK)
512 return -EINVAL;
513
514retry:
515 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
516 return -ENOMEM;
517
518 mutex_lock(&core_lock);
519
520
521
522 status = idr_get_new_above(&i2c_adapter_idr, adap, adap->nr, &id);
523 if (status == 0 && id != adap->nr) {
524 status = -EBUSY;
525 idr_remove(&i2c_adapter_idr, id);
526 }
527 mutex_unlock(&core_lock);
528 if (status == -EAGAIN)
529 goto retry;
530
531 if (status == 0)
532 status = i2c_register_adapter(adap);
533 return status;
534}
535EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
536
537static int i2c_do_del_adapter(struct device_driver *d, void *data)
538{
539 struct i2c_driver *driver = to_i2c_driver(d);
540 struct i2c_adapter *adapter = data;
541 int res;
542
543 if (!driver->detach_adapter)
544 return 0;
545 res = driver->detach_adapter(adapter);
546 if (res)
547 dev_err(&adapter->dev, "detach_adapter failed (%d) "
548 "for driver [%s]\n", res, driver->driver.name);
549 return res;
550}
551
552
553
554
555
556
557
558
559
560int i2c_del_adapter(struct i2c_adapter *adap)
561{
562 struct list_head *item, *_n;
563 struct i2c_client *client;
564 int res = 0;
565
566 mutex_lock(&core_lock);
567
568
569 if (idr_find(&i2c_adapter_idr, adap->nr) != adap) {
570 pr_debug("i2c-core: attempting to delete unregistered "
571 "adapter [%s]\n", adap->name);
572 res = -EINVAL;
573 goto out_unlock;
574 }
575
576
577 res = bus_for_each_drv(&i2c_bus_type, NULL, adap,
578 i2c_do_del_adapter);
579 if (res)
580 goto out_unlock;
581
582
583
584 list_for_each_safe(item, _n, &adap->clients) {
585 struct i2c_driver *driver;
586
587 client = list_entry(item, struct i2c_client, list);
588 driver = client->driver;
589
590
591 if (!driver || is_newstyle_driver(driver)) {
592 i2c_unregister_device(client);
593 continue;
594 }
595
596
597 if ((res = driver->detach_client(client))) {
598 dev_err(&adap->dev, "detach_client failed for client "
599 "[%s] at address 0x%02x\n", client->name,
600 client->addr);
601 goto out_unlock;
602 }
603 }
604
605
606 init_completion(&adap->dev_released);
607 device_unregister(&adap->dev);
608
609
610 wait_for_completion(&adap->dev_released);
611
612
613 idr_remove(&i2c_adapter_idr, adap->nr);
614
615 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
616
617 out_unlock:
618 mutex_unlock(&core_lock);
619 return res;
620}
621EXPORT_SYMBOL(i2c_del_adapter);
622
623
624
625
626
627
628
629
630
631
632
633
634
635int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
636{
637 int res;
638
639
640 if (is_newstyle_driver(driver)) {
641 if (driver->attach_adapter || driver->detach_adapter
642 || driver->detach_client) {
643 printk(KERN_WARNING
644 "i2c-core: driver [%s] is confused\n",
645 driver->driver.name);
646 return -EINVAL;
647 }
648 }
649
650
651 driver->driver.owner = owner;
652 driver->driver.bus = &i2c_bus_type;
653
654
655
656
657 res = driver_register(&driver->driver);
658 if (res)
659 return res;
660
661 mutex_lock(&core_lock);
662
663 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
664
665
666 if (driver->attach_adapter) {
667 struct i2c_adapter *adapter;
668
669 down(&i2c_adapter_class.sem);
670 list_for_each_entry(adapter, &i2c_adapter_class.devices,
671 dev.node) {
672 driver->attach_adapter(adapter);
673 }
674 up(&i2c_adapter_class.sem);
675 }
676
677 mutex_unlock(&core_lock);
678 return 0;
679}
680EXPORT_SYMBOL(i2c_register_driver);
681
682
683
684
685
686
687void i2c_del_driver(struct i2c_driver *driver)
688{
689 struct list_head *item2, *_n;
690 struct i2c_client *client;
691 struct i2c_adapter *adap;
692
693 mutex_lock(&core_lock);
694
695
696 if (is_newstyle_driver(driver))
697 goto unregister;
698
699
700
701
702
703 down(&i2c_adapter_class.sem);
704 list_for_each_entry(adap, &i2c_adapter_class.devices, dev.node) {
705 if (driver->detach_adapter) {
706 if (driver->detach_adapter(adap)) {
707 dev_err(&adap->dev, "detach_adapter failed "
708 "for driver [%s]\n",
709 driver->driver.name);
710 }
711 } else {
712 list_for_each_safe(item2, _n, &adap->clients) {
713 client = list_entry(item2, struct i2c_client, list);
714 if (client->driver != driver)
715 continue;
716 dev_dbg(&adap->dev, "detaching client [%s] "
717 "at 0x%02x\n", client->name,
718 client->addr);
719 if (driver->detach_client(client)) {
720 dev_err(&adap->dev, "detach_client "
721 "failed for client [%s] at "
722 "0x%02x\n", client->name,
723 client->addr);
724 }
725 }
726 }
727 }
728 up(&i2c_adapter_class.sem);
729
730 unregister:
731 driver_unregister(&driver->driver);
732 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
733
734 mutex_unlock(&core_lock);
735}
736EXPORT_SYMBOL(i2c_del_driver);
737
738
739
740static int __i2c_check_addr(struct device *dev, void *addrp)
741{
742 struct i2c_client *client = i2c_verify_client(dev);
743 int addr = *(int *)addrp;
744
745 if (client && client->addr == addr)
746 return -EBUSY;
747 return 0;
748}
749
750static int i2c_check_addr(struct i2c_adapter *adapter, int addr)
751{
752 return device_for_each_child(&adapter->dev, &addr, __i2c_check_addr);
753}
754
755int i2c_attach_client(struct i2c_client *client)
756{
757 struct i2c_adapter *adapter = client->adapter;
758 int res = 0;
759
760 client->dev.parent = &client->adapter->dev;
761 client->dev.bus = &i2c_bus_type;
762
763 if (client->driver)
764 client->dev.driver = &client->driver->driver;
765
766 if (client->driver && !is_newstyle_driver(client->driver)) {
767 client->dev.release = i2c_client_release;
768 client->dev.uevent_suppress = 1;
769 } else
770 client->dev.release = i2c_client_dev_release;
771
772 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
773 "%d-%04x", i2c_adapter_id(adapter), client->addr);
774 res = device_register(&client->dev);
775 if (res)
776 goto out_err;
777
778 mutex_lock(&adapter->clist_lock);
779 list_add_tail(&client->list, &adapter->clients);
780 mutex_unlock(&adapter->clist_lock);
781
782 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
783 client->name, client->dev.bus_id);
784
785 if (adapter->client_register) {
786 if (adapter->client_register(client)) {
787 dev_dbg(&adapter->dev, "client_register "
788 "failed for client [%s] at 0x%02x\n",
789 client->name, client->addr);
790 }
791 }
792
793 return 0;
794
795out_err:
796 dev_err(&adapter->dev, "Failed to attach i2c client %s at 0x%02x "
797 "(%d)\n", client->name, client->addr, res);
798 return res;
799}
800EXPORT_SYMBOL(i2c_attach_client);
801
802int i2c_detach_client(struct i2c_client *client)
803{
804 struct i2c_adapter *adapter = client->adapter;
805 int res = 0;
806
807 if (adapter->client_unregister) {
808 res = adapter->client_unregister(client);
809 if (res) {
810 dev_err(&client->dev,
811 "client_unregister [%s] failed, "
812 "client not detached\n", client->name);
813 goto out;
814 }
815 }
816
817 mutex_lock(&adapter->clist_lock);
818 list_del(&client->list);
819 mutex_unlock(&adapter->clist_lock);
820
821 init_completion(&client->released);
822 device_unregister(&client->dev);
823 wait_for_completion(&client->released);
824
825 out:
826 return res;
827}
828EXPORT_SYMBOL(i2c_detach_client);
829
830
831
832
833
834
835
836
837
838
839
840
841struct i2c_client *i2c_use_client(struct i2c_client *client)
842{
843 get_device(&client->dev);
844 return client;
845}
846EXPORT_SYMBOL(i2c_use_client);
847
848
849
850
851
852
853
854void i2c_release_client(struct i2c_client *client)
855{
856 put_device(&client->dev);
857}
858EXPORT_SYMBOL(i2c_release_client);
859
860struct i2c_cmd_arg {
861 unsigned cmd;
862 void *arg;
863};
864
865static int i2c_cmd(struct device *dev, void *_arg)
866{
867 struct i2c_client *client = i2c_verify_client(dev);
868 struct i2c_cmd_arg *arg = _arg;
869
870 if (client && client->driver && client->driver->command)
871 client->driver->command(client, arg->cmd, arg->arg);
872 return 0;
873}
874
875void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
876{
877 struct i2c_cmd_arg cmd_arg;
878
879 cmd_arg.cmd = cmd;
880 cmd_arg.arg = arg;
881 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
882}
883EXPORT_SYMBOL(i2c_clients_command);
884
885static int __init i2c_init(void)
886{
887 int retval;
888
889 retval = bus_register(&i2c_bus_type);
890 if (retval)
891 return retval;
892 retval = class_register(&i2c_adapter_class);
893 if (retval)
894 goto bus_err;
895 retval = i2c_add_driver(&dummy_driver);
896 if (retval)
897 goto class_err;
898 return 0;
899
900class_err:
901 class_unregister(&i2c_adapter_class);
902bus_err:
903 bus_unregister(&i2c_bus_type);
904 return retval;
905}
906
907static void __exit i2c_exit(void)
908{
909 i2c_del_driver(&dummy_driver);
910 class_unregister(&i2c_adapter_class);
911 bus_unregister(&i2c_bus_type);
912}
913
914subsys_initcall(i2c_init);
915module_exit(i2c_exit);
916
917
918
919
920
921
922int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
923{
924 int ret;
925
926 if (adap->algo->master_xfer) {
927#ifdef DEBUG
928 for (ret = 0; ret < num; ret++) {
929 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
930 "len=%d%s\n", ret, (msgs[ret].flags & I2C_M_RD)
931 ? 'R' : 'W', msgs[ret].addr, msgs[ret].len,
932 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
933 }
934#endif
935
936 if (in_atomic() || irqs_disabled()) {
937 ret = mutex_trylock(&adap->bus_lock);
938 if (!ret)
939
940 return -EAGAIN;
941 } else {
942 mutex_lock_nested(&adap->bus_lock, adap->level);
943 }
944
945 ret = adap->algo->master_xfer(adap,msgs,num);
946 mutex_unlock(&adap->bus_lock);
947
948 return ret;
949 } else {
950 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
951 return -ENOSYS;
952 }
953}
954EXPORT_SYMBOL(i2c_transfer);
955
956int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
957{
958 int ret;
959 struct i2c_adapter *adap=client->adapter;
960 struct i2c_msg msg;
961
962 msg.addr = client->addr;
963 msg.flags = client->flags & I2C_M_TEN;
964 msg.len = count;
965 msg.buf = (char *)buf;
966
967 ret = i2c_transfer(adap, &msg, 1);
968
969
970
971 return (ret == 1) ? count : ret;
972}
973EXPORT_SYMBOL(i2c_master_send);
974
975int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
976{
977 struct i2c_adapter *adap=client->adapter;
978 struct i2c_msg msg;
979 int ret;
980
981 msg.addr = client->addr;
982 msg.flags = client->flags & I2C_M_TEN;
983 msg.flags |= I2C_M_RD;
984 msg.len = count;
985 msg.buf = buf;
986
987 ret = i2c_transfer(adap, &msg, 1);
988
989
990
991 return (ret == 1) ? count : ret;
992}
993EXPORT_SYMBOL(i2c_master_recv);
994
995
996
997
998
999
1000static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
1001 int (*found_proc) (struct i2c_adapter *, int, int))
1002{
1003 int err;
1004
1005
1006 if (addr < 0x03 || addr > 0x77) {
1007 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
1008 addr);
1009 return -EINVAL;
1010 }
1011
1012
1013 if (i2c_check_addr(adapter, addr))
1014 return 0;
1015
1016
1017 if (kind < 0) {
1018 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
1019 I2C_SMBUS_QUICK, NULL) < 0)
1020 return 0;
1021
1022
1023 if ((addr & ~0x0f) == 0x50)
1024 i2c_smbus_xfer(adapter, addr, 0, 0, 0,
1025 I2C_SMBUS_QUICK, NULL);
1026 }
1027
1028
1029 err = found_proc(adapter, addr, kind);
1030
1031
1032
1033 if (err == -ENODEV)
1034 err = 0;
1035
1036 if (err)
1037 dev_warn(&adapter->dev, "Client creation failed at 0x%x (%d)\n",
1038 addr, err);
1039 return err;
1040}
1041
1042int i2c_probe(struct i2c_adapter *adapter,
1043 const struct i2c_client_address_data *address_data,
1044 int (*found_proc) (struct i2c_adapter *, int, int))
1045{
1046 int i, err;
1047 int adap_id = i2c_adapter_id(adapter);
1048
1049
1050
1051 if (address_data->forces) {
1052 const unsigned short * const *forces = address_data->forces;
1053 int kind;
1054
1055 for (kind = 0; forces[kind]; kind++) {
1056 for (i = 0; forces[kind][i] != I2C_CLIENT_END;
1057 i += 2) {
1058 if (forces[kind][i] == adap_id
1059 || forces[kind][i] == ANY_I2C_BUS) {
1060 dev_dbg(&adapter->dev, "found force "
1061 "parameter for adapter %d, "
1062 "addr 0x%02x, kind %d\n",
1063 adap_id, forces[kind][i + 1],
1064 kind);
1065 err = i2c_probe_address(adapter,
1066 forces[kind][i + 1],
1067 kind, found_proc);
1068 if (err)
1069 return err;
1070 }
1071 }
1072 }
1073 }
1074
1075
1076 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
1077 if (address_data->probe[0] == I2C_CLIENT_END
1078 && address_data->normal_i2c[0] == I2C_CLIENT_END)
1079 return 0;
1080
1081 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
1082 "can't probe for chips\n");
1083 return -1;
1084 }
1085
1086
1087
1088 for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
1089 if (address_data->probe[i] == adap_id
1090 || address_data->probe[i] == ANY_I2C_BUS) {
1091 dev_dbg(&adapter->dev, "found probe parameter for "
1092 "adapter %d, addr 0x%02x\n", adap_id,
1093 address_data->probe[i + 1]);
1094 err = i2c_probe_address(adapter,
1095 address_data->probe[i + 1],
1096 -1, found_proc);
1097 if (err)
1098 return err;
1099 }
1100 }
1101
1102
1103 for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
1104 int j, ignore;
1105
1106 ignore = 0;
1107 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
1108 j += 2) {
1109 if ((address_data->ignore[j] == adap_id ||
1110 address_data->ignore[j] == ANY_I2C_BUS)
1111 && address_data->ignore[j + 1]
1112 == address_data->normal_i2c[i]) {
1113 dev_dbg(&adapter->dev, "found ignore "
1114 "parameter for adapter %d, "
1115 "addr 0x%02x\n", adap_id,
1116 address_data->ignore[j + 1]);
1117 ignore = 1;
1118 break;
1119 }
1120 }
1121 if (ignore)
1122 continue;
1123
1124 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
1125 "addr 0x%02x\n", adap_id,
1126 address_data->normal_i2c[i]);
1127 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
1128 -1, found_proc);
1129 if (err)
1130 return err;
1131 }
1132
1133 return 0;
1134}
1135EXPORT_SYMBOL(i2c_probe);
1136
1137struct i2c_client *
1138i2c_new_probed_device(struct i2c_adapter *adap,
1139 struct i2c_board_info *info,
1140 unsigned short const *addr_list)
1141{
1142 int i;
1143
1144
1145 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) {
1146 dev_err(&adap->dev, "Probing not supported\n");
1147 return NULL;
1148 }
1149
1150 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
1151
1152 if (addr_list[i] < 0x03 || addr_list[i] > 0x77) {
1153 dev_warn(&adap->dev, "Invalid 7-bit address "
1154 "0x%02x\n", addr_list[i]);
1155 continue;
1156 }
1157
1158
1159 if (i2c_check_addr(adap, addr_list[i])) {
1160 dev_dbg(&adap->dev, "Address 0x%02x already in "
1161 "use, not probing\n", addr_list[i]);
1162 continue;
1163 }
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173 if ((addr_list[i] & ~0x07) == 0x30
1174 || (addr_list[i] & ~0x0f) == 0x50
1175 || !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) {
1176 if (i2c_smbus_xfer(adap, addr_list[i], 0,
1177 I2C_SMBUS_READ, 0,
1178 I2C_SMBUS_BYTE, NULL) >= 0)
1179 break;
1180 } else {
1181 if (i2c_smbus_xfer(adap, addr_list[i], 0,
1182 I2C_SMBUS_WRITE, 0,
1183 I2C_SMBUS_QUICK, NULL) >= 0)
1184 break;
1185 }
1186 }
1187
1188 if (addr_list[i] == I2C_CLIENT_END) {
1189 dev_dbg(&adap->dev, "Probing failed, no device found\n");
1190 return NULL;
1191 }
1192
1193 info->addr = addr_list[i];
1194 return i2c_new_device(adap, info);
1195}
1196EXPORT_SYMBOL_GPL(i2c_new_probed_device);
1197
1198struct i2c_adapter* i2c_get_adapter(int id)
1199{
1200 struct i2c_adapter *adapter;
1201
1202 mutex_lock(&core_lock);
1203 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
1204 if (adapter && !try_module_get(adapter->owner))
1205 adapter = NULL;
1206
1207 mutex_unlock(&core_lock);
1208 return adapter;
1209}
1210EXPORT_SYMBOL(i2c_get_adapter);
1211
1212void i2c_put_adapter(struct i2c_adapter *adap)
1213{
1214 module_put(adap->owner);
1215}
1216EXPORT_SYMBOL(i2c_put_adapter);
1217
1218
1219
1220#define POLY (0x1070U << 3)
1221static u8
1222crc8(u16 data)
1223{
1224 int i;
1225
1226 for(i = 0; i < 8; i++) {
1227 if (data & 0x8000)
1228 data = data ^ POLY;
1229 data = data << 1;
1230 }
1231 return (u8)(data >> 8);
1232}
1233
1234
1235static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
1236{
1237 int i;
1238
1239 for(i = 0; i < count; i++)
1240 crc = crc8((crc ^ p[i]) << 8);
1241 return crc;
1242}
1243
1244
1245static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
1246{
1247
1248 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
1249 pec = i2c_smbus_pec(pec, &addr, 1);
1250
1251
1252 return i2c_smbus_pec(pec, msg->buf, msg->len);
1253}
1254
1255
1256static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
1257{
1258 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
1259 msg->len++;
1260}
1261
1262
1263
1264
1265
1266
1267static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
1268{
1269 u8 rpec = msg->buf[--msg->len];
1270 cpec = i2c_smbus_msg_pec(cpec, msg);
1271
1272 if (rpec != cpec) {
1273 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
1274 rpec, cpec);
1275 return -1;
1276 }
1277 return 0;
1278}
1279
1280s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
1281{
1282 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1283 value,0,I2C_SMBUS_QUICK,NULL);
1284}
1285EXPORT_SYMBOL(i2c_smbus_write_quick);
1286
1287s32 i2c_smbus_read_byte(struct i2c_client *client)
1288{
1289 union i2c_smbus_data data;
1290 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1291 I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
1292 return -1;
1293 else
1294 return data.byte;
1295}
1296EXPORT_SYMBOL(i2c_smbus_read_byte);
1297
1298s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
1299{
1300 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1301 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
1302}
1303EXPORT_SYMBOL(i2c_smbus_write_byte);
1304
1305s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
1306{
1307 union i2c_smbus_data data;
1308 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1309 I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
1310 return -1;
1311 else
1312 return data.byte;
1313}
1314EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1315
1316s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
1317{
1318 union i2c_smbus_data data;
1319 data.byte = value;
1320 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1321 I2C_SMBUS_WRITE,command,
1322 I2C_SMBUS_BYTE_DATA,&data);
1323}
1324EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1325
1326s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
1327{
1328 union i2c_smbus_data data;
1329 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1330 I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
1331 return -1;
1332 else
1333 return data.word;
1334}
1335EXPORT_SYMBOL(i2c_smbus_read_word_data);
1336
1337s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
1338{
1339 union i2c_smbus_data data;
1340 data.word = value;
1341 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1342 I2C_SMBUS_WRITE,command,
1343 I2C_SMBUS_WORD_DATA,&data);
1344}
1345EXPORT_SYMBOL(i2c_smbus_write_word_data);
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363s32 i2c_smbus_read_block_data(struct i2c_client *client, u8 command,
1364 u8 *values)
1365{
1366 union i2c_smbus_data data;
1367
1368 if (i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1369 I2C_SMBUS_READ, command,
1370 I2C_SMBUS_BLOCK_DATA, &data))
1371 return -1;
1372
1373 memcpy(values, &data.block[1], data.block[0]);
1374 return data.block[0];
1375}
1376EXPORT_SYMBOL(i2c_smbus_read_block_data);
1377
1378s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
1379 u8 length, const u8 *values)
1380{
1381 union i2c_smbus_data data;
1382
1383 if (length > I2C_SMBUS_BLOCK_MAX)
1384 length = I2C_SMBUS_BLOCK_MAX;
1385 data.block[0] = length;
1386 memcpy(&data.block[1], values, length);
1387 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1388 I2C_SMBUS_WRITE,command,
1389 I2C_SMBUS_BLOCK_DATA,&data);
1390}
1391EXPORT_SYMBOL(i2c_smbus_write_block_data);
1392
1393
1394s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command,
1395 u8 length, u8 *values)
1396{
1397 union i2c_smbus_data data;
1398
1399 if (length > I2C_SMBUS_BLOCK_MAX)
1400 length = I2C_SMBUS_BLOCK_MAX;
1401 data.block[0] = length;
1402 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1403 I2C_SMBUS_READ,command,
1404 I2C_SMBUS_I2C_BLOCK_DATA,&data))
1405 return -1;
1406
1407 memcpy(values, &data.block[1], data.block[0]);
1408 return data.block[0];
1409}
1410EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1411
1412s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
1413 u8 length, const u8 *values)
1414{
1415 union i2c_smbus_data data;
1416
1417 if (length > I2C_SMBUS_BLOCK_MAX)
1418 length = I2C_SMBUS_BLOCK_MAX;
1419 data.block[0] = length;
1420 memcpy(data.block + 1, values, length);
1421 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1422 I2C_SMBUS_WRITE, command,
1423 I2C_SMBUS_I2C_BLOCK_DATA, &data);
1424}
1425EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
1426
1427
1428
1429static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1430 unsigned short flags,
1431 char read_write, u8 command, int size,
1432 union i2c_smbus_data * data)
1433{
1434
1435
1436
1437
1438 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1439 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
1440 int num = read_write == I2C_SMBUS_READ?2:1;
1441 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1442 { addr, flags | I2C_M_RD, 0, msgbuf1 }
1443 };
1444 int i;
1445 u8 partial_pec = 0;
1446
1447 msgbuf0[0] = command;
1448 switch(size) {
1449 case I2C_SMBUS_QUICK:
1450 msg[0].len = 0;
1451
1452 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
1453 num = 1;
1454 break;
1455 case I2C_SMBUS_BYTE:
1456 if (read_write == I2C_SMBUS_READ) {
1457
1458 msg[0].flags = I2C_M_RD | flags;
1459 num = 1;
1460 }
1461 break;
1462 case I2C_SMBUS_BYTE_DATA:
1463 if (read_write == I2C_SMBUS_READ)
1464 msg[1].len = 1;
1465 else {
1466 msg[0].len = 2;
1467 msgbuf0[1] = data->byte;
1468 }
1469 break;
1470 case I2C_SMBUS_WORD_DATA:
1471 if (read_write == I2C_SMBUS_READ)
1472 msg[1].len = 2;
1473 else {
1474 msg[0].len=3;
1475 msgbuf0[1] = data->word & 0xff;
1476 msgbuf0[2] = data->word >> 8;
1477 }
1478 break;
1479 case I2C_SMBUS_PROC_CALL:
1480 num = 2;
1481 read_write = I2C_SMBUS_READ;
1482 msg[0].len = 3;
1483 msg[1].len = 2;
1484 msgbuf0[1] = data->word & 0xff;
1485 msgbuf0[2] = data->word >> 8;
1486 break;
1487 case I2C_SMBUS_BLOCK_DATA:
1488 if (read_write == I2C_SMBUS_READ) {
1489 msg[1].flags |= I2C_M_RECV_LEN;
1490 msg[1].len = 1;
1491
1492 } else {
1493 msg[0].len = data->block[0] + 2;
1494 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1495 dev_err(&adapter->dev, "smbus_access called with "
1496 "invalid block write size (%d)\n",
1497 data->block[0]);
1498 return -1;
1499 }
1500 for (i = 1; i < msg[0].len; i++)
1501 msgbuf0[i] = data->block[i-1];
1502 }
1503 break;
1504 case I2C_SMBUS_BLOCK_PROC_CALL:
1505 num = 2;
1506 read_write = I2C_SMBUS_READ;
1507 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
1508 dev_err(&adapter->dev, "%s called with invalid "
1509 "block proc call size (%d)\n", __FUNCTION__,
1510 data->block[0]);
1511 return -1;
1512 }
1513 msg[0].len = data->block[0] + 2;
1514 for (i = 1; i < msg[0].len; i++)
1515 msgbuf0[i] = data->block[i-1];
1516 msg[1].flags |= I2C_M_RECV_LEN;
1517 msg[1].len = 1;
1518
1519 break;
1520 case I2C_SMBUS_I2C_BLOCK_DATA:
1521 if (read_write == I2C_SMBUS_READ) {
1522 msg[1].len = data->block[0];
1523 } else {
1524 msg[0].len = data->block[0] + 1;
1525 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1526 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1527 "invalid block write size (%d)\n",
1528 data->block[0]);
1529 return -1;
1530 }
1531 for (i = 1; i <= data->block[0]; i++)
1532 msgbuf0[i] = data->block[i];
1533 }
1534 break;
1535 default:
1536 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1537 size);
1538 return -1;
1539 }
1540
1541 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1542 && size != I2C_SMBUS_I2C_BLOCK_DATA);
1543 if (i) {
1544
1545 if (!(msg[0].flags & I2C_M_RD)) {
1546 if (num == 1)
1547 i2c_smbus_add_pec(&msg[0]);
1548 else
1549 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1550 }
1551
1552 if (msg[num-1].flags & I2C_M_RD)
1553 msg[num-1].len++;
1554 }
1555
1556 if (i2c_transfer(adapter, msg, num) < 0)
1557 return -1;
1558
1559
1560 if (i && (msg[num-1].flags & I2C_M_RD)) {
1561 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1562 return -1;
1563 }
1564
1565 if (read_write == I2C_SMBUS_READ)
1566 switch(size) {
1567 case I2C_SMBUS_BYTE:
1568 data->byte = msgbuf0[0];
1569 break;
1570 case I2C_SMBUS_BYTE_DATA:
1571 data->byte = msgbuf1[0];
1572 break;
1573 case I2C_SMBUS_WORD_DATA:
1574 case I2C_SMBUS_PROC_CALL:
1575 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1576 break;
1577 case I2C_SMBUS_I2C_BLOCK_DATA:
1578 for (i = 0; i < data->block[0]; i++)
1579 data->block[i+1] = msgbuf1[i];
1580 break;
1581 case I2C_SMBUS_BLOCK_DATA:
1582 case I2C_SMBUS_BLOCK_PROC_CALL:
1583 for (i = 0; i < msgbuf1[0] + 1; i++)
1584 data->block[i] = msgbuf1[i];
1585 break;
1586 }
1587 return 0;
1588}
1589
1590
1591s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1592 char read_write, u8 command, int size,
1593 union i2c_smbus_data * data)
1594{
1595 s32 res;
1596
1597 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1598
1599 if (adapter->algo->smbus_xfer) {
1600 mutex_lock(&adapter->bus_lock);
1601 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1602 command,size,data);
1603 mutex_unlock(&adapter->bus_lock);
1604 } else
1605 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1606 command,size,data);
1607
1608 return res;
1609}
1610EXPORT_SYMBOL(i2c_smbus_xfer);
1611
1612MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1613MODULE_DESCRIPTION("I2C-Bus main module");
1614MODULE_LICENSE("GPL");
1615