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