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