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