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
29
30#define pr_fmt(fmt) "i2c-core: " fmt
31
32#include <dt-bindings/i2c/i2c.h>
33#include <asm/uaccess.h>
34#include <linux/acpi.h>
35#include <linux/clk/clk-conf.h>
36#include <linux/completion.h>
37#include <linux/delay.h>
38#include <linux/err.h>
39#include <linux/errno.h>
40#include <linux/gpio.h>
41#include <linux/hardirq.h>
42#include <linux/i2c.h>
43#include <linux/idr.h>
44#include <linux/init.h>
45#include <linux/irqflags.h>
46#include <linux/jump_label.h>
47#include <linux/kernel.h>
48#include <linux/module.h>
49#include <linux/mutex.h>
50#include <linux/of_device.h>
51#include <linux/of.h>
52#include <linux/of_irq.h>
53#include <linux/pm_domain.h>
54#include <linux/pm_runtime.h>
55#include <linux/pm_wakeirq.h>
56#include <linux/property.h>
57#include <linux/rwsem.h>
58#include <linux/slab.h>
59
60#include "i2c-core.h"
61
62#define CREATE_TRACE_POINTS
63#include <trace/events/i2c.h>
64
65#define I2C_ADDR_OFFSET_TEN_BIT 0xa000
66#define I2C_ADDR_OFFSET_SLAVE 0x1000
67
68
69
70
71static DEFINE_MUTEX(core_lock);
72static DEFINE_IDR(i2c_adapter_idr);
73
74static struct device_type i2c_client_type;
75static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
76
77static struct static_key i2c_trace_msg = STATIC_KEY_INIT_FALSE;
78static bool is_registered;
79
80void i2c_transfer_trace_reg(void)
81{
82 static_key_slow_inc(&i2c_trace_msg);
83}
84
85void i2c_transfer_trace_unreg(void)
86{
87 static_key_slow_dec(&i2c_trace_msg);
88}
89
90#if defined(CONFIG_ACPI)
91struct i2c_acpi_handler_data {
92 struct acpi_connection_info info;
93 struct i2c_adapter *adapter;
94};
95
96struct gsb_buffer {
97 u8 status;
98 u8 len;
99 union {
100 u16 wdata;
101 u8 bdata;
102 u8 data[0];
103 };
104} __packed;
105
106struct i2c_acpi_lookup {
107 struct i2c_board_info *info;
108 acpi_handle adapter_handle;
109 acpi_handle device_handle;
110 acpi_handle search_handle;
111 u32 speed;
112 u32 min_speed;
113};
114
115static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data)
116{
117 struct i2c_acpi_lookup *lookup = data;
118 struct i2c_board_info *info = lookup->info;
119 struct acpi_resource_i2c_serialbus *sb;
120 acpi_status status;
121
122 if (info->addr || ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
123 return 1;
124
125 sb = &ares->data.i2c_serial_bus;
126 if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C)
127 return 1;
128
129 status = acpi_get_handle(lookup->device_handle,
130 sb->resource_source.string_ptr,
131 &lookup->adapter_handle);
132 if (!ACPI_SUCCESS(status))
133 return 1;
134
135 info->addr = sb->slave_address;
136 lookup->speed = sb->connection_speed;
137 if (sb->access_mode == ACPI_I2C_10BIT_MODE)
138 info->flags |= I2C_CLIENT_TEN;
139
140 return 1;
141}
142
143static int i2c_acpi_do_lookup(struct acpi_device *adev,
144 struct i2c_acpi_lookup *lookup)
145{
146 struct i2c_board_info *info = lookup->info;
147 struct list_head resource_list;
148 int ret;
149
150 if (acpi_bus_get_status(adev) || !adev->status.present ||
151 acpi_device_enumerated(adev))
152 return -EINVAL;
153
154 memset(info, 0, sizeof(*info));
155 lookup->device_handle = acpi_device_handle(adev);
156
157
158 INIT_LIST_HEAD(&resource_list);
159 ret = acpi_dev_get_resources(adev, &resource_list,
160 i2c_acpi_fill_info, lookup);
161 acpi_dev_free_resource_list(&resource_list);
162
163 if (ret < 0 || !info->addr)
164 return -EINVAL;
165
166 return 0;
167}
168
169static int i2c_acpi_get_info(struct acpi_device *adev,
170 struct i2c_board_info *info,
171 struct i2c_adapter *adapter,
172 acpi_handle *adapter_handle)
173{
174 struct list_head resource_list;
175 struct resource_entry *entry;
176 struct i2c_acpi_lookup lookup;
177 int ret;
178
179 memset(&lookup, 0, sizeof(lookup));
180 lookup.info = info;
181
182 ret = i2c_acpi_do_lookup(adev, &lookup);
183 if (ret)
184 return ret;
185
186 if (adapter) {
187
188 if (ACPI_HANDLE(&adapter->dev) != lookup.adapter_handle)
189 return -ENODEV;
190 } else {
191 struct acpi_device *adapter_adev;
192
193
194 if (acpi_bus_get_device(lookup.adapter_handle, &adapter_adev))
195 return -ENODEV;
196 if (acpi_bus_get_status(adapter_adev) ||
197 !adapter_adev->status.present)
198 return -ENODEV;
199 }
200
201 info->fwnode = acpi_fwnode_handle(adev);
202 if (adapter_handle)
203 *adapter_handle = lookup.adapter_handle;
204
205
206 INIT_LIST_HEAD(&resource_list);
207 ret = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
208 if (ret < 0)
209 return -EINVAL;
210
211 resource_list_for_each_entry(entry, &resource_list) {
212 if (resource_type(entry->res) == IORESOURCE_IRQ) {
213 info->irq = entry->res->start;
214 break;
215 }
216 }
217
218 acpi_dev_free_resource_list(&resource_list);
219
220 strlcpy(info->type, dev_name(&adev->dev), sizeof(info->type));
221
222 return 0;
223}
224
225static void i2c_acpi_register_device(struct i2c_adapter *adapter,
226 struct acpi_device *adev,
227 struct i2c_board_info *info)
228{
229 adev->power.flags.ignore_parent = true;
230 acpi_device_set_enumerated(adev);
231
232 if (!i2c_new_device(adapter, info)) {
233 adev->power.flags.ignore_parent = false;
234 dev_err(&adapter->dev,
235 "failed to add I2C device %s from ACPI\n",
236 dev_name(&adev->dev));
237 }
238}
239
240static acpi_status i2c_acpi_add_device(acpi_handle handle, u32 level,
241 void *data, void **return_value)
242{
243 struct i2c_adapter *adapter = data;
244 struct acpi_device *adev;
245 struct i2c_board_info info;
246
247 if (acpi_bus_get_device(handle, &adev))
248 return AE_OK;
249
250 if (i2c_acpi_get_info(adev, &info, adapter, NULL))
251 return AE_OK;
252
253 i2c_acpi_register_device(adapter, adev, &info);
254
255 return AE_OK;
256}
257
258#define I2C_ACPI_MAX_SCAN_DEPTH 32
259
260
261
262
263
264
265
266
267
268static void i2c_acpi_register_devices(struct i2c_adapter *adap)
269{
270 acpi_status status;
271
272 if (!has_acpi_companion(&adap->dev))
273 return;
274
275 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
276 I2C_ACPI_MAX_SCAN_DEPTH,
277 i2c_acpi_add_device, NULL,
278 adap, NULL);
279 if (ACPI_FAILURE(status))
280 dev_warn(&adap->dev, "failed to enumerate I2C slaves\n");
281}
282
283static acpi_status i2c_acpi_lookup_speed(acpi_handle handle, u32 level,
284 void *data, void **return_value)
285{
286 struct i2c_acpi_lookup *lookup = data;
287 struct acpi_device *adev;
288
289 if (acpi_bus_get_device(handle, &adev))
290 return AE_OK;
291
292 if (i2c_acpi_do_lookup(adev, lookup))
293 return AE_OK;
294
295 if (lookup->search_handle != lookup->adapter_handle)
296 return AE_OK;
297
298 if (lookup->speed <= lookup->min_speed)
299 lookup->min_speed = lookup->speed;
300
301 return AE_OK;
302}
303
304
305
306
307
308
309
310
311
312
313u32 i2c_acpi_find_bus_speed(struct device *dev)
314{
315 struct i2c_acpi_lookup lookup;
316 struct i2c_board_info dummy;
317 acpi_status status;
318
319 if (!has_acpi_companion(dev))
320 return 0;
321
322 memset(&lookup, 0, sizeof(lookup));
323 lookup.search_handle = ACPI_HANDLE(dev);
324 lookup.min_speed = UINT_MAX;
325 lookup.info = &dummy;
326
327 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
328 I2C_ACPI_MAX_SCAN_DEPTH,
329 i2c_acpi_lookup_speed, NULL,
330 &lookup, NULL);
331
332 if (ACPI_FAILURE(status)) {
333 dev_warn(dev, "unable to find I2C bus speed from ACPI\n");
334 return 0;
335 }
336
337 return lookup.min_speed != UINT_MAX ? lookup.min_speed : 0;
338}
339EXPORT_SYMBOL_GPL(i2c_acpi_find_bus_speed);
340
341static int i2c_acpi_match_adapter(struct device *dev, void *data)
342{
343 struct i2c_adapter *adapter = i2c_verify_adapter(dev);
344
345 if (!adapter)
346 return 0;
347
348 return ACPI_HANDLE(dev) == (acpi_handle)data;
349}
350
351static int i2c_acpi_match_device(struct device *dev, void *data)
352{
353 return ACPI_COMPANION(dev) == data;
354}
355
356static struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle)
357{
358 struct device *dev;
359
360 dev = bus_find_device(&i2c_bus_type, NULL, handle,
361 i2c_acpi_match_adapter);
362 return dev ? i2c_verify_adapter(dev) : NULL;
363}
364
365static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev)
366{
367 struct device *dev;
368
369 dev = bus_find_device(&i2c_bus_type, NULL, adev, i2c_acpi_match_device);
370 return dev ? i2c_verify_client(dev) : NULL;
371}
372
373static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
374 void *arg)
375{
376 struct acpi_device *adev = arg;
377 struct i2c_board_info info;
378 acpi_handle adapter_handle;
379 struct i2c_adapter *adapter;
380 struct i2c_client *client;
381
382 switch (value) {
383 case ACPI_RECONFIG_DEVICE_ADD:
384 if (i2c_acpi_get_info(adev, &info, NULL, &adapter_handle))
385 break;
386
387 adapter = i2c_acpi_find_adapter_by_handle(adapter_handle);
388 if (!adapter)
389 break;
390
391 i2c_acpi_register_device(adapter, adev, &info);
392 break;
393 case ACPI_RECONFIG_DEVICE_REMOVE:
394 if (!acpi_device_enumerated(adev))
395 break;
396
397 client = i2c_acpi_find_client_by_adev(adev);
398 if (!client)
399 break;
400
401 i2c_unregister_device(client);
402 put_device(&client->dev);
403 break;
404 }
405
406 return NOTIFY_OK;
407}
408
409static struct notifier_block i2c_acpi_notifier = {
410 .notifier_call = i2c_acpi_notify,
411};
412#else
413static inline void i2c_acpi_register_devices(struct i2c_adapter *adap) { }
414extern struct notifier_block i2c_acpi_notifier;
415#endif
416
417#ifdef CONFIG_ACPI_I2C_OPREGION
418static int acpi_gsb_i2c_read_bytes(struct i2c_client *client,
419 u8 cmd, u8 *data, u8 data_len)
420{
421
422 struct i2c_msg msgs[2];
423 int ret;
424 u8 *buffer;
425
426 buffer = kzalloc(data_len, GFP_KERNEL);
427 if (!buffer)
428 return AE_NO_MEMORY;
429
430 msgs[0].addr = client->addr;
431 msgs[0].flags = client->flags;
432 msgs[0].len = 1;
433 msgs[0].buf = &cmd;
434
435 msgs[1].addr = client->addr;
436 msgs[1].flags = client->flags | I2C_M_RD;
437 msgs[1].len = data_len;
438 msgs[1].buf = buffer;
439
440 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
441 if (ret < 0)
442 dev_err(&client->adapter->dev, "i2c read failed\n");
443 else
444 memcpy(data, buffer, data_len);
445
446 kfree(buffer);
447 return ret;
448}
449
450static int acpi_gsb_i2c_write_bytes(struct i2c_client *client,
451 u8 cmd, u8 *data, u8 data_len)
452{
453
454 struct i2c_msg msgs[1];
455 u8 *buffer;
456 int ret = AE_OK;
457
458 buffer = kzalloc(data_len + 1, GFP_KERNEL);
459 if (!buffer)
460 return AE_NO_MEMORY;
461
462 buffer[0] = cmd;
463 memcpy(buffer + 1, data, data_len);
464
465 msgs[0].addr = client->addr;
466 msgs[0].flags = client->flags;
467 msgs[0].len = data_len + 1;
468 msgs[0].buf = buffer;
469
470 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
471 if (ret < 0)
472 dev_err(&client->adapter->dev, "i2c write failed\n");
473
474 kfree(buffer);
475 return ret;
476}
477
478static acpi_status
479i2c_acpi_space_handler(u32 function, acpi_physical_address command,
480 u32 bits, u64 *value64,
481 void *handler_context, void *region_context)
482{
483 struct gsb_buffer *gsb = (struct gsb_buffer *)value64;
484 struct i2c_acpi_handler_data *data = handler_context;
485 struct acpi_connection_info *info = &data->info;
486 struct acpi_resource_i2c_serialbus *sb;
487 struct i2c_adapter *adapter = data->adapter;
488 struct i2c_client *client;
489 struct acpi_resource *ares;
490 u32 accessor_type = function >> 16;
491 u8 action = function & ACPI_IO_MASK;
492 acpi_status ret;
493 int status;
494
495 ret = acpi_buffer_to_resource(info->connection, info->length, &ares);
496 if (ACPI_FAILURE(ret))
497 return ret;
498
499 client = kzalloc(sizeof(*client), GFP_KERNEL);
500 if (!client) {
501 ret = AE_NO_MEMORY;
502 goto err;
503 }
504
505 if (!value64 || ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS) {
506 ret = AE_BAD_PARAMETER;
507 goto err;
508 }
509
510 sb = &ares->data.i2c_serial_bus;
511 if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C) {
512 ret = AE_BAD_PARAMETER;
513 goto err;
514 }
515
516 client->adapter = adapter;
517 client->addr = sb->slave_address;
518
519 if (sb->access_mode == ACPI_I2C_10BIT_MODE)
520 client->flags |= I2C_CLIENT_TEN;
521
522 switch (accessor_type) {
523 case ACPI_GSB_ACCESS_ATTRIB_SEND_RCV:
524 if (action == ACPI_READ) {
525 status = i2c_smbus_read_byte(client);
526 if (status >= 0) {
527 gsb->bdata = status;
528 status = 0;
529 }
530 } else {
531 status = i2c_smbus_write_byte(client, gsb->bdata);
532 }
533 break;
534
535 case ACPI_GSB_ACCESS_ATTRIB_BYTE:
536 if (action == ACPI_READ) {
537 status = i2c_smbus_read_byte_data(client, command);
538 if (status >= 0) {
539 gsb->bdata = status;
540 status = 0;
541 }
542 } else {
543 status = i2c_smbus_write_byte_data(client, command,
544 gsb->bdata);
545 }
546 break;
547
548 case ACPI_GSB_ACCESS_ATTRIB_WORD:
549 if (action == ACPI_READ) {
550 status = i2c_smbus_read_word_data(client, command);
551 if (status >= 0) {
552 gsb->wdata = status;
553 status = 0;
554 }
555 } else {
556 status = i2c_smbus_write_word_data(client, command,
557 gsb->wdata);
558 }
559 break;
560
561 case ACPI_GSB_ACCESS_ATTRIB_BLOCK:
562 if (action == ACPI_READ) {
563 status = i2c_smbus_read_block_data(client, command,
564 gsb->data);
565 if (status >= 0) {
566 gsb->len = status;
567 status = 0;
568 }
569 } else {
570 status = i2c_smbus_write_block_data(client, command,
571 gsb->len, gsb->data);
572 }
573 break;
574
575 case ACPI_GSB_ACCESS_ATTRIB_MULTIBYTE:
576 if (action == ACPI_READ) {
577 status = acpi_gsb_i2c_read_bytes(client, command,
578 gsb->data, info->access_length);
579 if (status > 0)
580 status = 0;
581 } else {
582 status = acpi_gsb_i2c_write_bytes(client, command,
583 gsb->data, info->access_length);
584 }
585 break;
586
587 default:
588 dev_warn(&adapter->dev, "protocol 0x%02x not supported for client 0x%02x\n",
589 accessor_type, client->addr);
590 ret = AE_BAD_PARAMETER;
591 goto err;
592 }
593
594 gsb->status = status;
595
596 err:
597 kfree(client);
598 ACPI_FREE(ares);
599 return ret;
600}
601
602
603static int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
604{
605 acpi_handle handle;
606 struct i2c_acpi_handler_data *data;
607 acpi_status status;
608
609 if (!adapter->dev.parent)
610 return -ENODEV;
611
612 handle = ACPI_HANDLE(adapter->dev.parent);
613
614 if (!handle)
615 return -ENODEV;
616
617 data = kzalloc(sizeof(struct i2c_acpi_handler_data),
618 GFP_KERNEL);
619 if (!data)
620 return -ENOMEM;
621
622 data->adapter = adapter;
623 status = acpi_bus_attach_private_data(handle, (void *)data);
624 if (ACPI_FAILURE(status)) {
625 kfree(data);
626 return -ENOMEM;
627 }
628
629 status = acpi_install_address_space_handler(handle,
630 ACPI_ADR_SPACE_GSBUS,
631 &i2c_acpi_space_handler,
632 NULL,
633 data);
634 if (ACPI_FAILURE(status)) {
635 dev_err(&adapter->dev, "Error installing i2c space handler\n");
636 acpi_bus_detach_private_data(handle);
637 kfree(data);
638 return -ENOMEM;
639 }
640
641 acpi_walk_dep_device_list(handle);
642 return 0;
643}
644
645static void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter)
646{
647 acpi_handle handle;
648 struct i2c_acpi_handler_data *data;
649 acpi_status status;
650
651 if (!adapter->dev.parent)
652 return;
653
654 handle = ACPI_HANDLE(adapter->dev.parent);
655
656 if (!handle)
657 return;
658
659 acpi_remove_address_space_handler(handle,
660 ACPI_ADR_SPACE_GSBUS,
661 &i2c_acpi_space_handler);
662
663 status = acpi_bus_get_private_data(handle, (void **)&data);
664 if (ACPI_SUCCESS(status))
665 kfree(data);
666
667 acpi_bus_detach_private_data(handle);
668}
669#else
670static inline void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter)
671{ }
672
673static inline int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
674{ return 0; }
675#endif
676
677
678
679static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
680 const struct i2c_client *client)
681{
682 while (id->name[0]) {
683 if (strcmp(client->name, id->name) == 0)
684 return id;
685 id++;
686 }
687 return NULL;
688}
689
690static int i2c_device_match(struct device *dev, struct device_driver *drv)
691{
692 struct i2c_client *client = i2c_verify_client(dev);
693 struct i2c_driver *driver;
694
695 if (!client)
696 return 0;
697
698
699 if (of_driver_match_device(dev, drv))
700 return 1;
701
702
703 if (acpi_driver_match_device(dev, drv))
704 return 1;
705
706 driver = to_i2c_driver(drv);
707
708 if (driver->id_table)
709 return i2c_match_id(driver->id_table, client) != NULL;
710
711 return 0;
712}
713
714static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
715{
716 struct i2c_client *client = to_i2c_client(dev);
717 int rc;
718
719 rc = acpi_device_uevent_modalias(dev, env);
720 if (rc != -ENODEV)
721 return rc;
722
723 return add_uevent_var(env, "MODALIAS=%s%s", I2C_MODULE_PREFIX, client->name);
724}
725
726
727static int get_scl_gpio_value(struct i2c_adapter *adap)
728{
729 return gpio_get_value(adap->bus_recovery_info->scl_gpio);
730}
731
732static void set_scl_gpio_value(struct i2c_adapter *adap, int val)
733{
734 gpio_set_value(adap->bus_recovery_info->scl_gpio, val);
735}
736
737static int get_sda_gpio_value(struct i2c_adapter *adap)
738{
739 return gpio_get_value(adap->bus_recovery_info->sda_gpio);
740}
741
742static int i2c_get_gpios_for_recovery(struct i2c_adapter *adap)
743{
744 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
745 struct device *dev = &adap->dev;
746 int ret = 0;
747
748 ret = gpio_request_one(bri->scl_gpio, GPIOF_OPEN_DRAIN |
749 GPIOF_OUT_INIT_HIGH, "i2c-scl");
750 if (ret) {
751 dev_warn(dev, "Can't get SCL gpio: %d\n", bri->scl_gpio);
752 return ret;
753 }
754
755 if (bri->get_sda) {
756 if (gpio_request_one(bri->sda_gpio, GPIOF_IN, "i2c-sda")) {
757
758 dev_warn(dev, "Can't get SDA gpio: %d. Not using SDA polling\n",
759 bri->sda_gpio);
760 bri->get_sda = NULL;
761 }
762 }
763
764 return ret;
765}
766
767static void i2c_put_gpios_for_recovery(struct i2c_adapter *adap)
768{
769 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
770
771 if (bri->get_sda)
772 gpio_free(bri->sda_gpio);
773
774 gpio_free(bri->scl_gpio);
775}
776
777
778
779
780
781
782#define RECOVERY_NDELAY 5000
783#define RECOVERY_CLK_CNT 9
784
785static int i2c_generic_recovery(struct i2c_adapter *adap)
786{
787 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
788 int i = 0, val = 1, ret = 0;
789
790 if (bri->prepare_recovery)
791 bri->prepare_recovery(adap);
792
793 bri->set_scl(adap, val);
794 ndelay(RECOVERY_NDELAY);
795
796
797
798
799 while (i++ < RECOVERY_CLK_CNT * 2) {
800 if (val) {
801
802 if (bri->get_sda && bri->get_sda(adap))
803 break;
804
805 if (!bri->get_scl(adap)) {
806 dev_err(&adap->dev,
807 "SCL is stuck low, exit recovery\n");
808 ret = -EBUSY;
809 break;
810 }
811 }
812
813 val = !val;
814 bri->set_scl(adap, val);
815 ndelay(RECOVERY_NDELAY);
816 }
817
818 if (bri->unprepare_recovery)
819 bri->unprepare_recovery(adap);
820
821 return ret;
822}
823
824int i2c_generic_scl_recovery(struct i2c_adapter *adap)
825{
826 return i2c_generic_recovery(adap);
827}
828EXPORT_SYMBOL_GPL(i2c_generic_scl_recovery);
829
830int i2c_generic_gpio_recovery(struct i2c_adapter *adap)
831{
832 int ret;
833
834 ret = i2c_get_gpios_for_recovery(adap);
835 if (ret)
836 return ret;
837
838 ret = i2c_generic_recovery(adap);
839 i2c_put_gpios_for_recovery(adap);
840
841 return ret;
842}
843EXPORT_SYMBOL_GPL(i2c_generic_gpio_recovery);
844
845int i2c_recover_bus(struct i2c_adapter *adap)
846{
847 if (!adap->bus_recovery_info)
848 return -EOPNOTSUPP;
849
850 dev_dbg(&adap->dev, "Trying i2c bus recovery\n");
851 return adap->bus_recovery_info->recover_bus(adap);
852}
853EXPORT_SYMBOL_GPL(i2c_recover_bus);
854
855static void i2c_init_recovery(struct i2c_adapter *adap)
856{
857 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
858 char *err_str;
859
860 if (!bri)
861 return;
862
863 if (!bri->recover_bus) {
864 err_str = "no recover_bus() found";
865 goto err;
866 }
867
868
869 if (bri->recover_bus == i2c_generic_gpio_recovery) {
870 if (!gpio_is_valid(bri->scl_gpio)) {
871 err_str = "invalid SCL gpio";
872 goto err;
873 }
874
875 if (gpio_is_valid(bri->sda_gpio))
876 bri->get_sda = get_sda_gpio_value;
877 else
878 bri->get_sda = NULL;
879
880 bri->get_scl = get_scl_gpio_value;
881 bri->set_scl = set_scl_gpio_value;
882 } else if (bri->recover_bus == i2c_generic_scl_recovery) {
883
884 if (!bri->set_scl || !bri->get_scl) {
885 err_str = "no {get|set}_scl() found";
886 goto err;
887 }
888 }
889
890 return;
891 err:
892 dev_err(&adap->dev, "Not using recovery: %s\n", err_str);
893 adap->bus_recovery_info = NULL;
894}
895
896static int i2c_device_probe(struct device *dev)
897{
898 struct i2c_client *client = i2c_verify_client(dev);
899 struct i2c_driver *driver;
900 int status;
901
902 if (!client)
903 return 0;
904
905 if (!client->irq) {
906 int irq = -ENOENT;
907
908 if (dev->of_node) {
909 irq = of_irq_get_byname(dev->of_node, "irq");
910 if (irq == -EINVAL || irq == -ENODATA)
911 irq = of_irq_get(dev->of_node, 0);
912 } else if (ACPI_COMPANION(dev)) {
913 irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0);
914 }
915 if (irq == -EPROBE_DEFER)
916 return irq;
917 if (irq < 0)
918 irq = 0;
919
920 client->irq = irq;
921 }
922
923 driver = to_i2c_driver(dev->driver);
924 if (!driver->probe || !driver->id_table)
925 return -ENODEV;
926
927 if (client->flags & I2C_CLIENT_WAKE) {
928 int wakeirq = -ENOENT;
929
930 if (dev->of_node) {
931 wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
932 if (wakeirq == -EPROBE_DEFER)
933 return wakeirq;
934 }
935
936 device_init_wakeup(&client->dev, true);
937
938 if (wakeirq > 0 && wakeirq != client->irq)
939 status = dev_pm_set_dedicated_wake_irq(dev, wakeirq);
940 else if (client->irq > 0)
941 status = dev_pm_set_wake_irq(dev, client->irq);
942 else
943 status = 0;
944
945 if (status)
946 dev_warn(&client->dev, "failed to set up wakeup irq\n");
947 }
948
949 dev_dbg(dev, "probe\n");
950
951 status = of_clk_set_defaults(dev->of_node, false);
952 if (status < 0)
953 goto err_clear_wakeup_irq;
954
955 status = dev_pm_domain_attach(&client->dev, true);
956 if (status == -EPROBE_DEFER)
957 goto err_clear_wakeup_irq;
958
959 status = driver->probe(client, i2c_match_id(driver->id_table, client));
960 if (status)
961 goto err_detach_pm_domain;
962
963 return 0;
964
965err_detach_pm_domain:
966 dev_pm_domain_detach(&client->dev, true);
967err_clear_wakeup_irq:
968 dev_pm_clear_wake_irq(&client->dev);
969 device_init_wakeup(&client->dev, false);
970 return status;
971}
972
973static int i2c_device_remove(struct device *dev)
974{
975 struct i2c_client *client = i2c_verify_client(dev);
976 struct i2c_driver *driver;
977 int status = 0;
978
979 if (!client || !dev->driver)
980 return 0;
981
982 driver = to_i2c_driver(dev->driver);
983 if (driver->remove) {
984 dev_dbg(dev, "remove\n");
985 status = driver->remove(client);
986 }
987
988 dev_pm_domain_detach(&client->dev, true);
989
990 dev_pm_clear_wake_irq(&client->dev);
991 device_init_wakeup(&client->dev, false);
992
993 return status;
994}
995
996static void i2c_device_shutdown(struct device *dev)
997{
998 struct i2c_client *client = i2c_verify_client(dev);
999 struct i2c_driver *driver;
1000
1001 if (!client || !dev->driver)
1002 return;
1003 driver = to_i2c_driver(dev->driver);
1004 if (driver->shutdown)
1005 driver->shutdown(client);
1006}
1007
1008static void i2c_client_dev_release(struct device *dev)
1009{
1010 kfree(to_i2c_client(dev));
1011}
1012
1013static ssize_t
1014show_name(struct device *dev, struct device_attribute *attr, char *buf)
1015{
1016 return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
1017 to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
1018}
1019static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1020
1021static ssize_t
1022show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
1023{
1024 struct i2c_client *client = to_i2c_client(dev);
1025 int len;
1026
1027 len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
1028 if (len != -ENODEV)
1029 return len;
1030
1031 return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
1032}
1033static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
1034
1035static struct attribute *i2c_dev_attrs[] = {
1036 &dev_attr_name.attr,
1037
1038 &dev_attr_modalias.attr,
1039 NULL
1040};
1041ATTRIBUTE_GROUPS(i2c_dev);
1042
1043struct bus_type i2c_bus_type = {
1044 .name = "i2c",
1045 .match = i2c_device_match,
1046 .probe = i2c_device_probe,
1047 .remove = i2c_device_remove,
1048 .shutdown = i2c_device_shutdown,
1049};
1050EXPORT_SYMBOL_GPL(i2c_bus_type);
1051
1052static struct device_type i2c_client_type = {
1053 .groups = i2c_dev_groups,
1054 .uevent = i2c_device_uevent,
1055 .release = i2c_client_dev_release,
1056};
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068struct i2c_client *i2c_verify_client(struct device *dev)
1069{
1070 return (dev->type == &i2c_client_type)
1071 ? to_i2c_client(dev)
1072 : NULL;
1073}
1074EXPORT_SYMBOL(i2c_verify_client);
1075
1076
1077
1078static unsigned short i2c_encode_flags_to_addr(struct i2c_client *client)
1079{
1080 unsigned short addr = client->addr;
1081
1082
1083 if (client->flags & I2C_CLIENT_TEN)
1084 addr |= I2C_ADDR_OFFSET_TEN_BIT;
1085
1086 if (client->flags & I2C_CLIENT_SLAVE)
1087 addr |= I2C_ADDR_OFFSET_SLAVE;
1088
1089 return addr;
1090}
1091
1092
1093
1094static int i2c_check_addr_validity(unsigned addr, unsigned short flags)
1095{
1096 if (flags & I2C_CLIENT_TEN) {
1097
1098 if (addr > 0x3ff)
1099 return -EINVAL;
1100 } else {
1101
1102 if (addr == 0x00 || addr > 0x7f)
1103 return -EINVAL;
1104 }
1105 return 0;
1106}
1107
1108
1109
1110
1111
1112static int i2c_check_7bit_addr_validity_strict(unsigned short addr)
1113{
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124 if (addr < 0x08 || addr > 0x77)
1125 return -EINVAL;
1126 return 0;
1127}
1128
1129static int __i2c_check_addr_busy(struct device *dev, void *addrp)
1130{
1131 struct i2c_client *client = i2c_verify_client(dev);
1132 int addr = *(int *)addrp;
1133
1134 if (client && i2c_encode_flags_to_addr(client) == addr)
1135 return -EBUSY;
1136 return 0;
1137}
1138
1139
1140static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
1141{
1142 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
1143 int result;
1144
1145 result = device_for_each_child(&adapter->dev, &addr,
1146 __i2c_check_addr_busy);
1147
1148 if (!result && parent)
1149 result = i2c_check_mux_parents(parent, addr);
1150
1151 return result;
1152}
1153
1154
1155static int i2c_check_mux_children(struct device *dev, void *addrp)
1156{
1157 int result;
1158
1159 if (dev->type == &i2c_adapter_type)
1160 result = device_for_each_child(dev, addrp,
1161 i2c_check_mux_children);
1162 else
1163 result = __i2c_check_addr_busy(dev, addrp);
1164
1165 return result;
1166}
1167
1168static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
1169{
1170 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
1171 int result = 0;
1172
1173 if (parent)
1174 result = i2c_check_mux_parents(parent, addr);
1175
1176 if (!result)
1177 result = device_for_each_child(&adapter->dev, &addr,
1178 i2c_check_mux_children);
1179
1180 return result;
1181}
1182
1183
1184
1185
1186
1187
1188
1189static void i2c_adapter_lock_bus(struct i2c_adapter *adapter,
1190 unsigned int flags)
1191{
1192 rt_mutex_lock(&adapter->bus_lock);
1193}
1194
1195
1196
1197
1198
1199
1200
1201static int i2c_adapter_trylock_bus(struct i2c_adapter *adapter,
1202 unsigned int flags)
1203{
1204 return rt_mutex_trylock(&adapter->bus_lock);
1205}
1206
1207
1208
1209
1210
1211
1212
1213static void i2c_adapter_unlock_bus(struct i2c_adapter *adapter,
1214 unsigned int flags)
1215{
1216 rt_mutex_unlock(&adapter->bus_lock);
1217}
1218
1219static void i2c_dev_set_name(struct i2c_adapter *adap,
1220 struct i2c_client *client)
1221{
1222 struct acpi_device *adev = ACPI_COMPANION(&client->dev);
1223
1224 if (adev) {
1225 dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
1226 return;
1227 }
1228
1229 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
1230 i2c_encode_flags_to_addr(client));
1231}
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249struct i2c_client *
1250i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
1251{
1252 struct i2c_client *client;
1253 int status;
1254
1255 client = kzalloc(sizeof *client, GFP_KERNEL);
1256 if (!client)
1257 return NULL;
1258
1259 client->adapter = adap;
1260
1261 client->dev.platform_data = info->platform_data;
1262
1263 if (info->archdata)
1264 client->dev.archdata = *info->archdata;
1265
1266 client->flags = info->flags;
1267 client->addr = info->addr;
1268 client->irq = info->irq;
1269
1270 strlcpy(client->name, info->type, sizeof(client->name));
1271
1272 status = i2c_check_addr_validity(client->addr, client->flags);
1273 if (status) {
1274 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
1275 client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
1276 goto out_err_silent;
1277 }
1278
1279
1280 status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client));
1281 if (status)
1282 goto out_err;
1283
1284 client->dev.parent = &client->adapter->dev;
1285 client->dev.bus = &i2c_bus_type;
1286 client->dev.type = &i2c_client_type;
1287 client->dev.of_node = info->of_node;
1288 client->dev.fwnode = info->fwnode;
1289
1290 i2c_dev_set_name(adap, client);
1291 status = device_register(&client->dev);
1292 if (status)
1293 goto out_err;
1294
1295 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
1296 client->name, dev_name(&client->dev));
1297
1298 return client;
1299
1300out_err:
1301 dev_err(&adap->dev,
1302 "Failed to register i2c client %s at 0x%02x (%d)\n",
1303 client->name, client->addr, status);
1304out_err_silent:
1305 kfree(client);
1306 return NULL;
1307}
1308EXPORT_SYMBOL_GPL(i2c_new_device);
1309
1310
1311
1312
1313
1314
1315
1316void i2c_unregister_device(struct i2c_client *client)
1317{
1318 if (client->dev.of_node)
1319 of_node_clear_flag(client->dev.of_node, OF_POPULATED);
1320 if (ACPI_COMPANION(&client->dev))
1321 acpi_device_clear_enumerated(ACPI_COMPANION(&client->dev));
1322 device_unregister(&client->dev);
1323}
1324EXPORT_SYMBOL_GPL(i2c_unregister_device);
1325
1326
1327static const struct i2c_device_id dummy_id[] = {
1328 { "dummy", 0 },
1329 { },
1330};
1331
1332static int dummy_probe(struct i2c_client *client,
1333 const struct i2c_device_id *id)
1334{
1335 return 0;
1336}
1337
1338static int dummy_remove(struct i2c_client *client)
1339{
1340 return 0;
1341}
1342
1343static struct i2c_driver dummy_driver = {
1344 .driver.name = "dummy",
1345 .probe = dummy_probe,
1346 .remove = dummy_remove,
1347 .id_table = dummy_id,
1348};
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368struct i2c_client *i2c_new_dummy(struct i2c_adapter *adapter, u16 address)
1369{
1370 struct i2c_board_info info = {
1371 I2C_BOARD_INFO("dummy", address),
1372 };
1373
1374 return i2c_new_device(adapter, &info);
1375}
1376EXPORT_SYMBOL_GPL(i2c_new_dummy);
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400struct i2c_client *i2c_new_secondary_device(struct i2c_client *client,
1401 const char *name,
1402 u16 default_addr)
1403{
1404 struct device_node *np = client->dev.of_node;
1405 u32 addr = default_addr;
1406 int i;
1407
1408 if (np) {
1409 i = of_property_match_string(np, "reg-names", name);
1410 if (i >= 0)
1411 of_property_read_u32_index(np, "reg", i, &addr);
1412 }
1413
1414 dev_dbg(&client->adapter->dev, "Address for %s : 0x%x\n", name, addr);
1415 return i2c_new_dummy(client->adapter, addr);
1416}
1417EXPORT_SYMBOL_GPL(i2c_new_secondary_device);
1418
1419
1420
1421
1422
1423static void i2c_adapter_dev_release(struct device *dev)
1424{
1425 struct i2c_adapter *adap = to_i2c_adapter(dev);
1426 complete(&adap->dev_released);
1427}
1428
1429unsigned int i2c_adapter_depth(struct i2c_adapter *adapter)
1430{
1431 unsigned int depth = 0;
1432
1433 while ((adapter = i2c_parent_is_i2c_adapter(adapter)))
1434 depth++;
1435
1436 WARN_ONCE(depth >= MAX_LOCKDEP_SUBCLASSES,
1437 "adapter depth exceeds lockdep subclass limit\n");
1438
1439 return depth;
1440}
1441EXPORT_SYMBOL_GPL(i2c_adapter_depth);
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453static ssize_t
1454i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
1455 const char *buf, size_t count)
1456{
1457 struct i2c_adapter *adap = to_i2c_adapter(dev);
1458 struct i2c_board_info info;
1459 struct i2c_client *client;
1460 char *blank, end;
1461 int res;
1462
1463 memset(&info, 0, sizeof(struct i2c_board_info));
1464
1465 blank = strchr(buf, ' ');
1466 if (!blank) {
1467 dev_err(dev, "%s: Missing parameters\n", "new_device");
1468 return -EINVAL;
1469 }
1470 if (blank - buf > I2C_NAME_SIZE - 1) {
1471 dev_err(dev, "%s: Invalid device name\n", "new_device");
1472 return -EINVAL;
1473 }
1474 memcpy(info.type, buf, blank - buf);
1475
1476
1477 res = sscanf(++blank, "%hi%c", &info.addr, &end);
1478 if (res < 1) {
1479 dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
1480 return -EINVAL;
1481 }
1482 if (res > 1 && end != '\n') {
1483 dev_err(dev, "%s: Extra parameters\n", "new_device");
1484 return -EINVAL;
1485 }
1486
1487 if ((info.addr & I2C_ADDR_OFFSET_TEN_BIT) == I2C_ADDR_OFFSET_TEN_BIT) {
1488 info.addr &= ~I2C_ADDR_OFFSET_TEN_BIT;
1489 info.flags |= I2C_CLIENT_TEN;
1490 }
1491
1492 if (info.addr & I2C_ADDR_OFFSET_SLAVE) {
1493 info.addr &= ~I2C_ADDR_OFFSET_SLAVE;
1494 info.flags |= I2C_CLIENT_SLAVE;
1495 }
1496
1497 client = i2c_new_device(adap, &info);
1498 if (!client)
1499 return -EINVAL;
1500
1501
1502 mutex_lock(&adap->userspace_clients_lock);
1503 list_add_tail(&client->detected, &adap->userspace_clients);
1504 mutex_unlock(&adap->userspace_clients_lock);
1505 dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
1506 info.type, info.addr);
1507
1508 return count;
1509}
1510static DEVICE_ATTR(new_device, S_IWUSR, NULL, i2c_sysfs_new_device);
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521static ssize_t
1522i2c_sysfs_delete_device(struct device *dev, struct device_attribute *attr,
1523 const char *buf, size_t count)
1524{
1525 struct i2c_adapter *adap = to_i2c_adapter(dev);
1526 struct i2c_client *client, *next;
1527 unsigned short addr;
1528 char end;
1529 int res;
1530
1531
1532 res = sscanf(buf, "%hi%c", &addr, &end);
1533 if (res < 1) {
1534 dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
1535 return -EINVAL;
1536 }
1537 if (res > 1 && end != '\n') {
1538 dev_err(dev, "%s: Extra parameters\n", "delete_device");
1539 return -EINVAL;
1540 }
1541
1542
1543 res = -ENOENT;
1544 mutex_lock_nested(&adap->userspace_clients_lock,
1545 i2c_adapter_depth(adap));
1546 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1547 detected) {
1548 if (i2c_encode_flags_to_addr(client) == addr) {
1549 dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
1550 "delete_device", client->name, client->addr);
1551
1552 list_del(&client->detected);
1553 i2c_unregister_device(client);
1554 res = count;
1555 break;
1556 }
1557 }
1558 mutex_unlock(&adap->userspace_clients_lock);
1559
1560 if (res < 0)
1561 dev_err(dev, "%s: Can't find device in list\n",
1562 "delete_device");
1563 return res;
1564}
1565static DEVICE_ATTR_IGNORE_LOCKDEP(delete_device, S_IWUSR, NULL,
1566 i2c_sysfs_delete_device);
1567
1568static struct attribute *i2c_adapter_attrs[] = {
1569 &dev_attr_name.attr,
1570 &dev_attr_new_device.attr,
1571 &dev_attr_delete_device.attr,
1572 NULL
1573};
1574ATTRIBUTE_GROUPS(i2c_adapter);
1575
1576struct device_type i2c_adapter_type = {
1577 .groups = i2c_adapter_groups,
1578 .release = i2c_adapter_dev_release,
1579};
1580EXPORT_SYMBOL_GPL(i2c_adapter_type);
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591struct i2c_adapter *i2c_verify_adapter(struct device *dev)
1592{
1593 return (dev->type == &i2c_adapter_type)
1594 ? to_i2c_adapter(dev)
1595 : NULL;
1596}
1597EXPORT_SYMBOL(i2c_verify_adapter);
1598
1599#ifdef CONFIG_I2C_COMPAT
1600static struct class_compat *i2c_adapter_compat_class;
1601#endif
1602
1603static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
1604{
1605 struct i2c_devinfo *devinfo;
1606
1607 down_read(&__i2c_board_lock);
1608 list_for_each_entry(devinfo, &__i2c_board_list, list) {
1609 if (devinfo->busnum == adapter->nr
1610 && !i2c_new_device(adapter,
1611 &devinfo->board_info))
1612 dev_err(&adapter->dev,
1613 "Can't create device at 0x%02x\n",
1614 devinfo->board_info.addr);
1615 }
1616 up_read(&__i2c_board_lock);
1617}
1618
1619
1620
1621#if IS_ENABLED(CONFIG_OF)
1622static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,
1623 struct device_node *node)
1624{
1625 struct i2c_client *result;
1626 struct i2c_board_info info = {};
1627 struct dev_archdata dev_ad = {};
1628 const __be32 *addr_be;
1629 u32 addr;
1630 int len;
1631
1632 dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name);
1633
1634 if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
1635 dev_err(&adap->dev, "of_i2c: modalias failure on %s\n",
1636 node->full_name);
1637 return ERR_PTR(-EINVAL);
1638 }
1639
1640 addr_be = of_get_property(node, "reg", &len);
1641 if (!addr_be || (len < sizeof(*addr_be))) {
1642 dev_err(&adap->dev, "of_i2c: invalid reg on %s\n",
1643 node->full_name);
1644 return ERR_PTR(-EINVAL);
1645 }
1646
1647 addr = be32_to_cpup(addr_be);
1648 if (addr & I2C_TEN_BIT_ADDRESS) {
1649 addr &= ~I2C_TEN_BIT_ADDRESS;
1650 info.flags |= I2C_CLIENT_TEN;
1651 }
1652
1653 if (addr & I2C_OWN_SLAVE_ADDRESS) {
1654 addr &= ~I2C_OWN_SLAVE_ADDRESS;
1655 info.flags |= I2C_CLIENT_SLAVE;
1656 }
1657
1658 if (i2c_check_addr_validity(addr, info.flags)) {
1659 dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n",
1660 info.addr, node->full_name);
1661 return ERR_PTR(-EINVAL);
1662 }
1663
1664 info.addr = addr;
1665 info.of_node = of_node_get(node);
1666 info.archdata = &dev_ad;
1667
1668 if (of_get_property(node, "wakeup-source", NULL))
1669 info.flags |= I2C_CLIENT_WAKE;
1670
1671 result = i2c_new_device(adap, &info);
1672 if (result == NULL) {
1673 dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
1674 node->full_name);
1675 of_node_put(node);
1676 return ERR_PTR(-EINVAL);
1677 }
1678 return result;
1679}
1680
1681static void of_i2c_register_devices(struct i2c_adapter *adap)
1682{
1683 struct device_node *bus, *node;
1684 struct i2c_client *client;
1685
1686
1687 if (!adap->dev.of_node)
1688 return;
1689
1690 dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");
1691
1692 bus = of_get_child_by_name(adap->dev.of_node, "i2c-bus");
1693 if (!bus)
1694 bus = of_node_get(adap->dev.of_node);
1695
1696 for_each_available_child_of_node(bus, node) {
1697 if (of_node_test_and_set_flag(node, OF_POPULATED))
1698 continue;
1699
1700 client = of_i2c_register_device(adap, node);
1701 if (IS_ERR(client)) {
1702 dev_warn(&adap->dev,
1703 "Failed to create I2C device for %s\n",
1704 node->full_name);
1705 of_node_clear_flag(node, OF_POPULATED);
1706 }
1707 }
1708
1709 of_node_put(bus);
1710}
1711
1712static int of_dev_node_match(struct device *dev, void *data)
1713{
1714 return dev->of_node == data;
1715}
1716
1717
1718struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
1719{
1720 struct device *dev;
1721 struct i2c_client *client;
1722
1723 dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match);
1724 if (!dev)
1725 return NULL;
1726
1727 client = i2c_verify_client(dev);
1728 if (!client)
1729 put_device(dev);
1730
1731 return client;
1732}
1733EXPORT_SYMBOL(of_find_i2c_device_by_node);
1734
1735
1736struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node)
1737{
1738 struct device *dev;
1739 struct i2c_adapter *adapter;
1740
1741 dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match);
1742 if (!dev)
1743 return NULL;
1744
1745 adapter = i2c_verify_adapter(dev);
1746 if (!adapter)
1747 put_device(dev);
1748
1749 return adapter;
1750}
1751EXPORT_SYMBOL(of_find_i2c_adapter_by_node);
1752
1753
1754struct i2c_adapter *of_get_i2c_adapter_by_node(struct device_node *node)
1755{
1756 struct i2c_adapter *adapter;
1757
1758 adapter = of_find_i2c_adapter_by_node(node);
1759 if (!adapter)
1760 return NULL;
1761
1762 if (!try_module_get(adapter->owner)) {
1763 put_device(&adapter->dev);
1764 adapter = NULL;
1765 }
1766
1767 return adapter;
1768}
1769EXPORT_SYMBOL(of_get_i2c_adapter_by_node);
1770#else
1771static void of_i2c_register_devices(struct i2c_adapter *adap) { }
1772#endif
1773
1774static int i2c_do_add_adapter(struct i2c_driver *driver,
1775 struct i2c_adapter *adap)
1776{
1777
1778 i2c_detect(adap, driver);
1779
1780
1781 if (driver->attach_adapter) {
1782 dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n",
1783 driver->driver.name);
1784 dev_warn(&adap->dev,
1785 "Please use another way to instantiate your i2c_client\n");
1786
1787 driver->attach_adapter(adap);
1788 }
1789 return 0;
1790}
1791
1792static int __process_new_adapter(struct device_driver *d, void *data)
1793{
1794 return i2c_do_add_adapter(to_i2c_driver(d), data);
1795}
1796
1797static const struct i2c_lock_operations i2c_adapter_lock_ops = {
1798 .lock_bus = i2c_adapter_lock_bus,
1799 .trylock_bus = i2c_adapter_trylock_bus,
1800 .unlock_bus = i2c_adapter_unlock_bus,
1801};
1802
1803static int i2c_register_adapter(struct i2c_adapter *adap)
1804{
1805 int res = -EINVAL;
1806
1807
1808 if (WARN_ON(!is_registered)) {
1809 res = -EAGAIN;
1810 goto out_list;
1811 }
1812
1813
1814 if (WARN(!adap->name[0], "i2c adapter has no name"))
1815 goto out_list;
1816
1817 if (!adap->algo) {
1818 pr_err("adapter '%s': no algo supplied!\n", adap->name);
1819 goto out_list;
1820 }
1821
1822 if (!adap->lock_ops)
1823 adap->lock_ops = &i2c_adapter_lock_ops;
1824
1825 rt_mutex_init(&adap->bus_lock);
1826 rt_mutex_init(&adap->mux_lock);
1827 mutex_init(&adap->userspace_clients_lock);
1828 INIT_LIST_HEAD(&adap->userspace_clients);
1829
1830
1831 if (adap->timeout == 0)
1832 adap->timeout = HZ;
1833
1834 dev_set_name(&adap->dev, "i2c-%d", adap->nr);
1835 adap->dev.bus = &i2c_bus_type;
1836 adap->dev.type = &i2c_adapter_type;
1837 res = device_register(&adap->dev);
1838 if (res) {
1839 pr_err("adapter '%s': can't register device (%d)\n", adap->name, res);
1840 goto out_list;
1841 }
1842
1843 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
1844
1845 pm_runtime_no_callbacks(&adap->dev);
1846 pm_suspend_ignore_children(&adap->dev, true);
1847 pm_runtime_enable(&adap->dev);
1848
1849#ifdef CONFIG_I2C_COMPAT
1850 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
1851 adap->dev.parent);
1852 if (res)
1853 dev_warn(&adap->dev,
1854 "Failed to create compatibility class link\n");
1855#endif
1856
1857 i2c_init_recovery(adap);
1858
1859
1860 of_i2c_register_devices(adap);
1861 i2c_acpi_register_devices(adap);
1862 i2c_acpi_install_space_handler(adap);
1863
1864 if (adap->nr < __i2c_first_dynamic_bus_num)
1865 i2c_scan_static_board_info(adap);
1866
1867
1868 mutex_lock(&core_lock);
1869 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
1870 mutex_unlock(&core_lock);
1871
1872 return 0;
1873
1874out_list:
1875 mutex_lock(&core_lock);
1876 idr_remove(&i2c_adapter_idr, adap->nr);
1877 mutex_unlock(&core_lock);
1878 return res;
1879}
1880
1881
1882
1883
1884
1885
1886
1887
1888static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)
1889{
1890 int id;
1891
1892 mutex_lock(&core_lock);
1893 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL);
1894 mutex_unlock(&core_lock);
1895 if (WARN(id < 0, "couldn't get idr"))
1896 return id == -ENOSPC ? -EBUSY : id;
1897
1898 return i2c_register_adapter(adap);
1899}
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915int i2c_add_adapter(struct i2c_adapter *adapter)
1916{
1917 struct device *dev = &adapter->dev;
1918 int id;
1919
1920 if (dev->of_node) {
1921 id = of_alias_get_id(dev->of_node, "i2c");
1922 if (id >= 0) {
1923 adapter->nr = id;
1924 return __i2c_add_numbered_adapter(adapter);
1925 }
1926 }
1927
1928 mutex_lock(&core_lock);
1929 id = idr_alloc(&i2c_adapter_idr, adapter,
1930 __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);
1931 mutex_unlock(&core_lock);
1932 if (WARN(id < 0, "couldn't get idr"))
1933 return id;
1934
1935 adapter->nr = id;
1936
1937 return i2c_register_adapter(adapter);
1938}
1939EXPORT_SYMBOL(i2c_add_adapter);
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964int i2c_add_numbered_adapter(struct i2c_adapter *adap)
1965{
1966 if (adap->nr == -1)
1967 return i2c_add_adapter(adap);
1968
1969 return __i2c_add_numbered_adapter(adap);
1970}
1971EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
1972
1973static void i2c_do_del_adapter(struct i2c_driver *driver,
1974 struct i2c_adapter *adapter)
1975{
1976 struct i2c_client *client, *_n;
1977
1978
1979
1980 list_for_each_entry_safe(client, _n, &driver->clients, detected) {
1981 if (client->adapter == adapter) {
1982 dev_dbg(&adapter->dev, "Removing %s at 0x%x\n",
1983 client->name, client->addr);
1984 list_del(&client->detected);
1985 i2c_unregister_device(client);
1986 }
1987 }
1988}
1989
1990static int __unregister_client(struct device *dev, void *dummy)
1991{
1992 struct i2c_client *client = i2c_verify_client(dev);
1993 if (client && strcmp(client->name, "dummy"))
1994 i2c_unregister_device(client);
1995 return 0;
1996}
1997
1998static int __unregister_dummy(struct device *dev, void *dummy)
1999{
2000 struct i2c_client *client = i2c_verify_client(dev);
2001 if (client)
2002 i2c_unregister_device(client);
2003 return 0;
2004}
2005
2006static int __process_removed_adapter(struct device_driver *d, void *data)
2007{
2008 i2c_do_del_adapter(to_i2c_driver(d), data);
2009 return 0;
2010}
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020void i2c_del_adapter(struct i2c_adapter *adap)
2021{
2022 struct i2c_adapter *found;
2023 struct i2c_client *client, *next;
2024
2025
2026 mutex_lock(&core_lock);
2027 found = idr_find(&i2c_adapter_idr, adap->nr);
2028 mutex_unlock(&core_lock);
2029 if (found != adap) {
2030 pr_debug("attempting to delete unregistered adapter [%s]\n", adap->name);
2031 return;
2032 }
2033
2034 i2c_acpi_remove_space_handler(adap);
2035
2036 mutex_lock(&core_lock);
2037 bus_for_each_drv(&i2c_bus_type, NULL, adap,
2038 __process_removed_adapter);
2039 mutex_unlock(&core_lock);
2040
2041
2042 mutex_lock_nested(&adap->userspace_clients_lock,
2043 i2c_adapter_depth(adap));
2044 list_for_each_entry_safe(client, next, &adap->userspace_clients,
2045 detected) {
2046 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name,
2047 client->addr);
2048 list_del(&client->detected);
2049 i2c_unregister_device(client);
2050 }
2051 mutex_unlock(&adap->userspace_clients_lock);
2052
2053
2054
2055
2056
2057
2058 device_for_each_child(&adap->dev, NULL, __unregister_client);
2059 device_for_each_child(&adap->dev, NULL, __unregister_dummy);
2060
2061#ifdef CONFIG_I2C_COMPAT
2062 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
2063 adap->dev.parent);
2064#endif
2065
2066
2067 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
2068
2069 pm_runtime_disable(&adap->dev);
2070
2071
2072
2073
2074
2075
2076
2077
2078 init_completion(&adap->dev_released);
2079 device_unregister(&adap->dev);
2080 wait_for_completion(&adap->dev_released);
2081
2082
2083 mutex_lock(&core_lock);
2084 idr_remove(&i2c_adapter_idr, adap->nr);
2085 mutex_unlock(&core_lock);
2086
2087
2088
2089 memset(&adap->dev, 0, sizeof(adap->dev));
2090}
2091EXPORT_SYMBOL(i2c_del_adapter);
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults)
2110{
2111 int ret;
2112
2113 memset(t, 0, sizeof(*t));
2114
2115 ret = device_property_read_u32(dev, "clock-frequency", &t->bus_freq_hz);
2116 if (ret && use_defaults)
2117 t->bus_freq_hz = 100000;
2118
2119 ret = device_property_read_u32(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns);
2120 if (ret && use_defaults) {
2121 if (t->bus_freq_hz <= 100000)
2122 t->scl_rise_ns = 1000;
2123 else if (t->bus_freq_hz <= 400000)
2124 t->scl_rise_ns = 300;
2125 else
2126 t->scl_rise_ns = 120;
2127 }
2128
2129 ret = device_property_read_u32(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns);
2130 if (ret && use_defaults) {
2131 if (t->bus_freq_hz <= 400000)
2132 t->scl_fall_ns = 300;
2133 else
2134 t->scl_fall_ns = 120;
2135 }
2136
2137 device_property_read_u32(dev, "i2c-scl-internal-delay-ns", &t->scl_int_delay_ns);
2138
2139 ret = device_property_read_u32(dev, "i2c-sda-falling-time-ns", &t->sda_fall_ns);
2140 if (ret && use_defaults)
2141 t->sda_fall_ns = t->scl_fall_ns;
2142}
2143EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
2144
2145
2146
2147int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *))
2148{
2149 int res;
2150
2151 mutex_lock(&core_lock);
2152 res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
2153 mutex_unlock(&core_lock);
2154
2155 return res;
2156}
2157EXPORT_SYMBOL_GPL(i2c_for_each_dev);
2158
2159static int __process_new_driver(struct device *dev, void *data)
2160{
2161 if (dev->type != &i2c_adapter_type)
2162 return 0;
2163 return i2c_do_add_adapter(data, to_i2c_adapter(dev));
2164}
2165
2166
2167
2168
2169
2170
2171int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
2172{
2173 int res;
2174
2175
2176 if (WARN_ON(!is_registered))
2177 return -EAGAIN;
2178
2179
2180 driver->driver.owner = owner;
2181 driver->driver.bus = &i2c_bus_type;
2182 INIT_LIST_HEAD(&driver->clients);
2183
2184
2185
2186
2187 res = driver_register(&driver->driver);
2188 if (res)
2189 return res;
2190
2191 pr_debug("driver [%s] registered\n", driver->driver.name);
2192
2193
2194 i2c_for_each_dev(driver, __process_new_driver);
2195
2196 return 0;
2197}
2198EXPORT_SYMBOL(i2c_register_driver);
2199
2200static int __process_removed_driver(struct device *dev, void *data)
2201{
2202 if (dev->type == &i2c_adapter_type)
2203 i2c_do_del_adapter(data, to_i2c_adapter(dev));
2204 return 0;
2205}
2206
2207
2208
2209
2210
2211
2212void i2c_del_driver(struct i2c_driver *driver)
2213{
2214 i2c_for_each_dev(driver, __process_removed_driver);
2215
2216 driver_unregister(&driver->driver);
2217 pr_debug("driver [%s] unregistered\n", driver->driver.name);
2218}
2219EXPORT_SYMBOL(i2c_del_driver);
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234struct i2c_client *i2c_use_client(struct i2c_client *client)
2235{
2236 if (client && get_device(&client->dev))
2237 return client;
2238 return NULL;
2239}
2240EXPORT_SYMBOL(i2c_use_client);
2241
2242
2243
2244
2245
2246
2247
2248void i2c_release_client(struct i2c_client *client)
2249{
2250 if (client)
2251 put_device(&client->dev);
2252}
2253EXPORT_SYMBOL(i2c_release_client);
2254
2255struct i2c_cmd_arg {
2256 unsigned cmd;
2257 void *arg;
2258};
2259
2260static int i2c_cmd(struct device *dev, void *_arg)
2261{
2262 struct i2c_client *client = i2c_verify_client(dev);
2263 struct i2c_cmd_arg *arg = _arg;
2264 struct i2c_driver *driver;
2265
2266 if (!client || !client->dev.driver)
2267 return 0;
2268
2269 driver = to_i2c_driver(client->dev.driver);
2270 if (driver->command)
2271 driver->command(client, arg->cmd, arg->arg);
2272 return 0;
2273}
2274
2275void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
2276{
2277 struct i2c_cmd_arg cmd_arg;
2278
2279 cmd_arg.cmd = cmd;
2280 cmd_arg.arg = arg;
2281 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
2282}
2283EXPORT_SYMBOL(i2c_clients_command);
2284
2285#if IS_ENABLED(CONFIG_OF_DYNAMIC)
2286static int of_i2c_notify(struct notifier_block *nb, unsigned long action,
2287 void *arg)
2288{
2289 struct of_reconfig_data *rd = arg;
2290 struct i2c_adapter *adap;
2291 struct i2c_client *client;
2292
2293 switch (of_reconfig_get_state_change(action, rd)) {
2294 case OF_RECONFIG_CHANGE_ADD:
2295 adap = of_find_i2c_adapter_by_node(rd->dn->parent);
2296 if (adap == NULL)
2297 return NOTIFY_OK;
2298
2299 if (of_node_test_and_set_flag(rd->dn, OF_POPULATED)) {
2300 put_device(&adap->dev);
2301 return NOTIFY_OK;
2302 }
2303
2304 client = of_i2c_register_device(adap, rd->dn);
2305 put_device(&adap->dev);
2306
2307 if (IS_ERR(client)) {
2308 dev_err(&adap->dev, "failed to create client for '%s'\n",
2309 rd->dn->full_name);
2310 of_node_clear_flag(rd->dn, OF_POPULATED);
2311 return notifier_from_errno(PTR_ERR(client));
2312 }
2313 break;
2314 case OF_RECONFIG_CHANGE_REMOVE:
2315
2316 if (!of_node_check_flag(rd->dn, OF_POPULATED))
2317 return NOTIFY_OK;
2318
2319
2320 client = of_find_i2c_device_by_node(rd->dn);
2321 if (client == NULL)
2322 return NOTIFY_OK;
2323
2324
2325 i2c_unregister_device(client);
2326
2327
2328 put_device(&client->dev);
2329 break;
2330 }
2331
2332 return NOTIFY_OK;
2333}
2334static struct notifier_block i2c_of_notifier = {
2335 .notifier_call = of_i2c_notify,
2336};
2337#else
2338extern struct notifier_block i2c_of_notifier;
2339#endif
2340
2341static int __init i2c_init(void)
2342{
2343 int retval;
2344
2345 retval = of_alias_get_highest_id("i2c");
2346
2347 down_write(&__i2c_board_lock);
2348 if (retval >= __i2c_first_dynamic_bus_num)
2349 __i2c_first_dynamic_bus_num = retval + 1;
2350 up_write(&__i2c_board_lock);
2351
2352 retval = bus_register(&i2c_bus_type);
2353 if (retval)
2354 return retval;
2355
2356 is_registered = true;
2357
2358#ifdef CONFIG_I2C_COMPAT
2359 i2c_adapter_compat_class = class_compat_register("i2c-adapter");
2360 if (!i2c_adapter_compat_class) {
2361 retval = -ENOMEM;
2362 goto bus_err;
2363 }
2364#endif
2365 retval = i2c_add_driver(&dummy_driver);
2366 if (retval)
2367 goto class_err;
2368
2369 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2370 WARN_ON(of_reconfig_notifier_register(&i2c_of_notifier));
2371 if (IS_ENABLED(CONFIG_ACPI))
2372 WARN_ON(acpi_reconfig_notifier_register(&i2c_acpi_notifier));
2373
2374 return 0;
2375
2376class_err:
2377#ifdef CONFIG_I2C_COMPAT
2378 class_compat_unregister(i2c_adapter_compat_class);
2379bus_err:
2380#endif
2381 is_registered = false;
2382 bus_unregister(&i2c_bus_type);
2383 return retval;
2384}
2385
2386static void __exit i2c_exit(void)
2387{
2388 if (IS_ENABLED(CONFIG_ACPI))
2389 WARN_ON(acpi_reconfig_notifier_unregister(&i2c_acpi_notifier));
2390 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2391 WARN_ON(of_reconfig_notifier_unregister(&i2c_of_notifier));
2392 i2c_del_driver(&dummy_driver);
2393#ifdef CONFIG_I2C_COMPAT
2394 class_compat_unregister(i2c_adapter_compat_class);
2395#endif
2396 bus_unregister(&i2c_bus_type);
2397 tracepoint_synchronize_unregister();
2398}
2399
2400
2401
2402
2403postcore_initcall(i2c_init);
2404module_exit(i2c_exit);
2405
2406
2407
2408
2409
2410
2411
2412#define i2c_quirk_exceeded(val, quirk) ((quirk) && ((val) > (quirk)))
2413
2414static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg)
2415{
2416 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n",
2417 err_msg, msg->addr, msg->len,
2418 msg->flags & I2C_M_RD ? "read" : "write");
2419 return -EOPNOTSUPP;
2420}
2421
2422static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2423{
2424 const struct i2c_adapter_quirks *q = adap->quirks;
2425 int max_num = q->max_num_msgs, i;
2426 bool do_len_check = true;
2427
2428 if (q->flags & I2C_AQ_COMB) {
2429 max_num = 2;
2430
2431
2432 if (num == 2) {
2433 if (q->flags & I2C_AQ_COMB_WRITE_FIRST && msgs[0].flags & I2C_M_RD)
2434 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write");
2435
2436 if (q->flags & I2C_AQ_COMB_READ_SECOND && !(msgs[1].flags & I2C_M_RD))
2437 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read");
2438
2439 if (q->flags & I2C_AQ_COMB_SAME_ADDR && msgs[0].addr != msgs[1].addr)
2440 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr");
2441
2442 if (i2c_quirk_exceeded(msgs[0].len, q->max_comb_1st_msg_len))
2443 return i2c_quirk_error(adap, &msgs[0], "msg too long");
2444
2445 if (i2c_quirk_exceeded(msgs[1].len, q->max_comb_2nd_msg_len))
2446 return i2c_quirk_error(adap, &msgs[1], "msg too long");
2447
2448 do_len_check = false;
2449 }
2450 }
2451
2452 if (i2c_quirk_exceeded(num, max_num))
2453 return i2c_quirk_error(adap, &msgs[0], "too many messages");
2454
2455 for (i = 0; i < num; i++) {
2456 u16 len = msgs[i].len;
2457
2458 if (msgs[i].flags & I2C_M_RD) {
2459 if (do_len_check && i2c_quirk_exceeded(len, q->max_read_len))
2460 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2461 } else {
2462 if (do_len_check && i2c_quirk_exceeded(len, q->max_write_len))
2463 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2464 }
2465 }
2466
2467 return 0;
2468}
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2483{
2484 unsigned long orig_jiffies;
2485 int ret, try;
2486
2487 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num))
2488 return -EOPNOTSUPP;
2489
2490
2491
2492
2493
2494 if (static_key_false(&i2c_trace_msg)) {
2495 int i;
2496 for (i = 0; i < num; i++)
2497 if (msgs[i].flags & I2C_M_RD)
2498 trace_i2c_read(adap, &msgs[i], i);
2499 else
2500 trace_i2c_write(adap, &msgs[i], i);
2501 }
2502
2503
2504 orig_jiffies = jiffies;
2505 for (ret = 0, try = 0; try <= adap->retries; try++) {
2506 ret = adap->algo->master_xfer(adap, msgs, num);
2507 if (ret != -EAGAIN)
2508 break;
2509 if (time_after(jiffies, orig_jiffies + adap->timeout))
2510 break;
2511 }
2512
2513 if (static_key_false(&i2c_trace_msg)) {
2514 int i;
2515 for (i = 0; i < ret; i++)
2516 if (msgs[i].flags & I2C_M_RD)
2517 trace_i2c_reply(adap, &msgs[i], i);
2518 trace_i2c_result(adap, i, ret);
2519 }
2520
2521 return ret;
2522}
2523EXPORT_SYMBOL(__i2c_transfer);
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2538{
2539 int ret;
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558 if (adap->algo->master_xfer) {
2559#ifdef DEBUG
2560 for (ret = 0; ret < num; ret++) {
2561 dev_dbg(&adap->dev,
2562 "master_xfer[%d] %c, addr=0x%02x, len=%d%s\n",
2563 ret, (msgs[ret].flags & I2C_M_RD) ? 'R' : 'W',
2564 msgs[ret].addr, msgs[ret].len,
2565 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
2566 }
2567#endif
2568
2569 if (in_atomic() || irqs_disabled()) {
2570 ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT);
2571 if (!ret)
2572
2573 return -EAGAIN;
2574 } else {
2575 i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
2576 }
2577
2578 ret = __i2c_transfer(adap, msgs, num);
2579 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
2580
2581 return ret;
2582 } else {
2583 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
2584 return -EOPNOTSUPP;
2585 }
2586}
2587EXPORT_SYMBOL(i2c_transfer);
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
2598{
2599 int ret;
2600 struct i2c_adapter *adap = client->adapter;
2601 struct i2c_msg msg;
2602
2603 msg.addr = client->addr;
2604 msg.flags = client->flags & I2C_M_TEN;
2605 msg.len = count;
2606 msg.buf = (char *)buf;
2607
2608 ret = i2c_transfer(adap, &msg, 1);
2609
2610
2611
2612
2613
2614 return (ret == 1) ? count : ret;
2615}
2616EXPORT_SYMBOL(i2c_master_send);
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
2627{
2628 struct i2c_adapter *adap = client->adapter;
2629 struct i2c_msg msg;
2630 int ret;
2631
2632 msg.addr = client->addr;
2633 msg.flags = client->flags & I2C_M_TEN;
2634 msg.flags |= I2C_M_RD;
2635 msg.len = count;
2636 msg.buf = buf;
2637
2638 ret = i2c_transfer(adap, &msg, 1);
2639
2640
2641
2642
2643
2644 return (ret == 1) ? count : ret;
2645}
2646EXPORT_SYMBOL(i2c_master_recv);
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
2667{
2668 int err;
2669 union i2c_smbus_data dummy;
2670
2671#ifdef CONFIG_X86
2672 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
2673 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
2674 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2675 I2C_SMBUS_BYTE_DATA, &dummy);
2676 else
2677#endif
2678 if (!((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50)
2679 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
2680 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
2681 I2C_SMBUS_QUICK, NULL);
2682 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
2683 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2684 I2C_SMBUS_BYTE, &dummy);
2685 else {
2686 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n",
2687 addr);
2688 err = -EOPNOTSUPP;
2689 }
2690
2691 return err >= 0;
2692}
2693
2694static int i2c_detect_address(struct i2c_client *temp_client,
2695 struct i2c_driver *driver)
2696{
2697 struct i2c_board_info info;
2698 struct i2c_adapter *adapter = temp_client->adapter;
2699 int addr = temp_client->addr;
2700 int err;
2701
2702
2703 err = i2c_check_7bit_addr_validity_strict(addr);
2704 if (err) {
2705 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
2706 addr);
2707 return err;
2708 }
2709
2710
2711 if (i2c_check_addr_busy(adapter, addr))
2712 return 0;
2713
2714
2715 if (!i2c_default_probe(adapter, addr))
2716 return 0;
2717
2718
2719 memset(&info, 0, sizeof(struct i2c_board_info));
2720 info.addr = addr;
2721 err = driver->detect(temp_client, &info);
2722 if (err) {
2723
2724
2725 return err == -ENODEV ? 0 : err;
2726 }
2727
2728
2729 if (info.type[0] == '\0') {
2730 dev_err(&adapter->dev,
2731 "%s detection function provided no name for 0x%x\n",
2732 driver->driver.name, addr);
2733 } else {
2734 struct i2c_client *client;
2735
2736
2737 if (adapter->class & I2C_CLASS_DEPRECATED)
2738 dev_warn(&adapter->dev,
2739 "This adapter will soon drop class based instantiation of devices. "
2740 "Please make sure client 0x%02x gets instantiated by other means. "
2741 "Check 'Documentation/i2c/instantiating-devices' for details.\n",
2742 info.addr);
2743
2744 dev_dbg(&adapter->dev, "Creating %s at 0x%02x\n",
2745 info.type, info.addr);
2746 client = i2c_new_device(adapter, &info);
2747 if (client)
2748 list_add_tail(&client->detected, &driver->clients);
2749 else
2750 dev_err(&adapter->dev, "Failed creating %s at 0x%02x\n",
2751 info.type, info.addr);
2752 }
2753 return 0;
2754}
2755
2756static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
2757{
2758 const unsigned short *address_list;
2759 struct i2c_client *temp_client;
2760 int i, err = 0;
2761 int adap_id = i2c_adapter_id(adapter);
2762
2763 address_list = driver->address_list;
2764 if (!driver->detect || !address_list)
2765 return 0;
2766
2767
2768 if (adapter->class == I2C_CLASS_DEPRECATED) {
2769 dev_dbg(&adapter->dev,
2770 "This adapter dropped support for I2C classes and won't auto-detect %s devices anymore. "
2771 "If you need it, check 'Documentation/i2c/instantiating-devices' for alternatives.\n",
2772 driver->driver.name);
2773 return 0;
2774 }
2775
2776
2777 if (!(adapter->class & driver->class))
2778 return 0;
2779
2780
2781 temp_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
2782 if (!temp_client)
2783 return -ENOMEM;
2784 temp_client->adapter = adapter;
2785
2786 for (i = 0; address_list[i] != I2C_CLIENT_END; i += 1) {
2787 dev_dbg(&adapter->dev,
2788 "found normal entry for adapter %d, addr 0x%02x\n",
2789 adap_id, address_list[i]);
2790 temp_client->addr = address_list[i];
2791 err = i2c_detect_address(temp_client, driver);
2792 if (unlikely(err))
2793 break;
2794 }
2795
2796 kfree(temp_client);
2797 return err;
2798}
2799
2800int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr)
2801{
2802 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2803 I2C_SMBUS_QUICK, NULL) >= 0;
2804}
2805EXPORT_SYMBOL_GPL(i2c_probe_func_quick_read);
2806
2807struct i2c_client *
2808i2c_new_probed_device(struct i2c_adapter *adap,
2809 struct i2c_board_info *info,
2810 unsigned short const *addr_list,
2811 int (*probe)(struct i2c_adapter *, unsigned short addr))
2812{
2813 int i;
2814
2815 if (!probe)
2816 probe = i2c_default_probe;
2817
2818 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
2819
2820 if (i2c_check_7bit_addr_validity_strict(addr_list[i]) < 0) {
2821 dev_warn(&adap->dev, "Invalid 7-bit address 0x%02x\n",
2822 addr_list[i]);
2823 continue;
2824 }
2825
2826
2827 if (i2c_check_addr_busy(adap, addr_list[i])) {
2828 dev_dbg(&adap->dev,
2829 "Address 0x%02x already in use, not probing\n",
2830 addr_list[i]);
2831 continue;
2832 }
2833
2834
2835 if (probe(adap, addr_list[i]))
2836 break;
2837 }
2838
2839 if (addr_list[i] == I2C_CLIENT_END) {
2840 dev_dbg(&adap->dev, "Probing failed, no device found\n");
2841 return NULL;
2842 }
2843
2844 info->addr = addr_list[i];
2845 return i2c_new_device(adap, info);
2846}
2847EXPORT_SYMBOL_GPL(i2c_new_probed_device);
2848
2849struct i2c_adapter *i2c_get_adapter(int nr)
2850{
2851 struct i2c_adapter *adapter;
2852
2853 mutex_lock(&core_lock);
2854 adapter = idr_find(&i2c_adapter_idr, nr);
2855 if (!adapter)
2856 goto exit;
2857
2858 if (try_module_get(adapter->owner))
2859 get_device(&adapter->dev);
2860 else
2861 adapter = NULL;
2862
2863 exit:
2864 mutex_unlock(&core_lock);
2865 return adapter;
2866}
2867EXPORT_SYMBOL(i2c_get_adapter);
2868
2869void i2c_put_adapter(struct i2c_adapter *adap)
2870{
2871 if (!adap)
2872 return;
2873
2874 put_device(&adap->dev);
2875 module_put(adap->owner);
2876}
2877EXPORT_SYMBOL(i2c_put_adapter);
2878
2879
2880
2881#define POLY (0x1070U << 3)
2882static u8 crc8(u16 data)
2883{
2884 int i;
2885
2886 for (i = 0; i < 8; i++) {
2887 if (data & 0x8000)
2888 data = data ^ POLY;
2889 data = data << 1;
2890 }
2891 return (u8)(data >> 8);
2892}
2893
2894
2895static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
2896{
2897 int i;
2898
2899 for (i = 0; i < count; i++)
2900 crc = crc8((crc ^ p[i]) << 8);
2901 return crc;
2902}
2903
2904
2905static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
2906{
2907
2908 u8 addr = i2c_8bit_addr_from_msg(msg);
2909 pec = i2c_smbus_pec(pec, &addr, 1);
2910
2911
2912 return i2c_smbus_pec(pec, msg->buf, msg->len);
2913}
2914
2915
2916static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
2917{
2918 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
2919 msg->len++;
2920}
2921
2922
2923
2924
2925
2926
2927static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
2928{
2929 u8 rpec = msg->buf[--msg->len];
2930 cpec = i2c_smbus_msg_pec(cpec, msg);
2931
2932 if (rpec != cpec) {
2933 pr_debug("Bad PEC 0x%02x vs. 0x%02x\n",
2934 rpec, cpec);
2935 return -EBADMSG;
2936 }
2937 return 0;
2938}
2939
2940
2941
2942
2943
2944
2945
2946
2947s32 i2c_smbus_read_byte(const struct i2c_client *client)
2948{
2949 union i2c_smbus_data data;
2950 int status;
2951
2952 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2953 I2C_SMBUS_READ, 0,
2954 I2C_SMBUS_BYTE, &data);
2955 return (status < 0) ? status : data.byte;
2956}
2957EXPORT_SYMBOL(i2c_smbus_read_byte);
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value)
2968{
2969 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2970 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
2971}
2972EXPORT_SYMBOL(i2c_smbus_write_byte);
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982s32 i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command)
2983{
2984 union i2c_smbus_data data;
2985 int status;
2986
2987 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2988 I2C_SMBUS_READ, command,
2989 I2C_SMBUS_BYTE_DATA, &data);
2990 return (status < 0) ? status : data.byte;
2991}
2992EXPORT_SYMBOL(i2c_smbus_read_byte_data);
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003s32 i2c_smbus_write_byte_data(const struct i2c_client *client, u8 command,
3004 u8 value)
3005{
3006 union i2c_smbus_data data;
3007 data.byte = value;
3008 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3009 I2C_SMBUS_WRITE, command,
3010 I2C_SMBUS_BYTE_DATA, &data);
3011}
3012EXPORT_SYMBOL(i2c_smbus_write_byte_data);
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022s32 i2c_smbus_read_word_data(const struct i2c_client *client, u8 command)
3023{
3024 union i2c_smbus_data data;
3025 int status;
3026
3027 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3028 I2C_SMBUS_READ, command,
3029 I2C_SMBUS_WORD_DATA, &data);
3030 return (status < 0) ? status : data.word;
3031}
3032EXPORT_SYMBOL(i2c_smbus_read_word_data);
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043s32 i2c_smbus_write_word_data(const struct i2c_client *client, u8 command,
3044 u16 value)
3045{
3046 union i2c_smbus_data data;
3047 data.word = value;
3048 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3049 I2C_SMBUS_WRITE, command,
3050 I2C_SMBUS_WORD_DATA, &data);
3051}
3052EXPORT_SYMBOL(i2c_smbus_write_word_data);
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069s32 i2c_smbus_read_block_data(const struct i2c_client *client, u8 command,
3070 u8 *values)
3071{
3072 union i2c_smbus_data data;
3073 int status;
3074
3075 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3076 I2C_SMBUS_READ, command,
3077 I2C_SMBUS_BLOCK_DATA, &data);
3078 if (status)
3079 return status;
3080
3081 memcpy(values, &data.block[1], data.block[0]);
3082 return data.block[0];
3083}
3084EXPORT_SYMBOL(i2c_smbus_read_block_data);
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096s32 i2c_smbus_write_block_data(const struct i2c_client *client, u8 command,
3097 u8 length, const u8 *values)
3098{
3099 union i2c_smbus_data data;
3100
3101 if (length > I2C_SMBUS_BLOCK_MAX)
3102 length = I2C_SMBUS_BLOCK_MAX;
3103 data.block[0] = length;
3104 memcpy(&data.block[1], values, length);
3105 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3106 I2C_SMBUS_WRITE, command,
3107 I2C_SMBUS_BLOCK_DATA, &data);
3108}
3109EXPORT_SYMBOL(i2c_smbus_write_block_data);
3110
3111
3112s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, u8 command,
3113 u8 length, u8 *values)
3114{
3115 union i2c_smbus_data data;
3116 int status;
3117
3118 if (length > I2C_SMBUS_BLOCK_MAX)
3119 length = I2C_SMBUS_BLOCK_MAX;
3120 data.block[0] = length;
3121 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3122 I2C_SMBUS_READ, command,
3123 I2C_SMBUS_I2C_BLOCK_DATA, &data);
3124 if (status < 0)
3125 return status;
3126
3127 memcpy(values, &data.block[1], data.block[0]);
3128 return data.block[0];
3129}
3130EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
3131
3132s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, u8 command,
3133 u8 length, const u8 *values)
3134{
3135 union i2c_smbus_data data;
3136
3137 if (length > I2C_SMBUS_BLOCK_MAX)
3138 length = I2C_SMBUS_BLOCK_MAX;
3139 data.block[0] = length;
3140 memcpy(data.block + 1, values, length);
3141 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3142 I2C_SMBUS_WRITE, command,
3143 I2C_SMBUS_I2C_BLOCK_DATA, &data);
3144}
3145EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
3146
3147
3148
3149static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr,
3150 unsigned short flags,
3151 char read_write, u8 command, int size,
3152 union i2c_smbus_data *data)
3153{
3154
3155
3156
3157
3158 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
3159 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
3160 int num = read_write == I2C_SMBUS_READ ? 2 : 1;
3161 int i;
3162 u8 partial_pec = 0;
3163 int status;
3164 struct i2c_msg msg[2] = {
3165 {
3166 .addr = addr,
3167 .flags = flags,
3168 .len = 1,
3169 .buf = msgbuf0,
3170 }, {
3171 .addr = addr,
3172 .flags = flags | I2C_M_RD,
3173 .len = 0,
3174 .buf = msgbuf1,
3175 },
3176 };
3177
3178 msgbuf0[0] = command;
3179 switch (size) {
3180 case I2C_SMBUS_QUICK:
3181 msg[0].len = 0;
3182
3183 msg[0].flags = flags | (read_write == I2C_SMBUS_READ ?
3184 I2C_M_RD : 0);
3185 num = 1;
3186 break;
3187 case I2C_SMBUS_BYTE:
3188 if (read_write == I2C_SMBUS_READ) {
3189
3190 msg[0].flags = I2C_M_RD | flags;
3191 num = 1;
3192 }
3193 break;
3194 case I2C_SMBUS_BYTE_DATA:
3195 if (read_write == I2C_SMBUS_READ)
3196 msg[1].len = 1;
3197 else {
3198 msg[0].len = 2;
3199 msgbuf0[1] = data->byte;
3200 }
3201 break;
3202 case I2C_SMBUS_WORD_DATA:
3203 if (read_write == I2C_SMBUS_READ)
3204 msg[1].len = 2;
3205 else {
3206 msg[0].len = 3;
3207 msgbuf0[1] = data->word & 0xff;
3208 msgbuf0[2] = data->word >> 8;
3209 }
3210 break;
3211 case I2C_SMBUS_PROC_CALL:
3212 num = 2;
3213 read_write = I2C_SMBUS_READ;
3214 msg[0].len = 3;
3215 msg[1].len = 2;
3216 msgbuf0[1] = data->word & 0xff;
3217 msgbuf0[2] = data->word >> 8;
3218 break;
3219 case I2C_SMBUS_BLOCK_DATA:
3220 if (read_write == I2C_SMBUS_READ) {
3221 msg[1].flags |= I2C_M_RECV_LEN;
3222 msg[1].len = 1;
3223
3224 } else {
3225 msg[0].len = data->block[0] + 2;
3226 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
3227 dev_err(&adapter->dev,
3228 "Invalid block write size %d\n",
3229 data->block[0]);
3230 return -EINVAL;
3231 }
3232 for (i = 1; i < msg[0].len; i++)
3233 msgbuf0[i] = data->block[i-1];
3234 }
3235 break;
3236 case I2C_SMBUS_BLOCK_PROC_CALL:
3237 num = 2;
3238 read_write = I2C_SMBUS_READ;
3239 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
3240 dev_err(&adapter->dev,
3241 "Invalid block write size %d\n",
3242 data->block[0]);
3243 return -EINVAL;
3244 }
3245 msg[0].len = data->block[0] + 2;
3246 for (i = 1; i < msg[0].len; i++)
3247 msgbuf0[i] = data->block[i-1];
3248 msg[1].flags |= I2C_M_RECV_LEN;
3249 msg[1].len = 1;
3250
3251 break;
3252 case I2C_SMBUS_I2C_BLOCK_DATA:
3253 if (read_write == I2C_SMBUS_READ) {
3254 msg[1].len = data->block[0];
3255 } else {
3256 msg[0].len = data->block[0] + 1;
3257 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
3258 dev_err(&adapter->dev,
3259 "Invalid block write size %d\n",
3260 data->block[0]);
3261 return -EINVAL;
3262 }
3263 for (i = 1; i <= data->block[0]; i++)
3264 msgbuf0[i] = data->block[i];
3265 }
3266 break;
3267 default:
3268 dev_err(&adapter->dev, "Unsupported transaction %d\n", size);
3269 return -EOPNOTSUPP;
3270 }
3271
3272 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
3273 && size != I2C_SMBUS_I2C_BLOCK_DATA);
3274 if (i) {
3275
3276 if (!(msg[0].flags & I2C_M_RD)) {
3277 if (num == 1)
3278 i2c_smbus_add_pec(&msg[0]);
3279 else
3280 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
3281 }
3282
3283 if (msg[num-1].flags & I2C_M_RD)
3284 msg[num-1].len++;
3285 }
3286
3287 status = i2c_transfer(adapter, msg, num);
3288 if (status < 0)
3289 return status;
3290
3291
3292 if (i && (msg[num-1].flags & I2C_M_RD)) {
3293 status = i2c_smbus_check_pec(partial_pec, &msg[num-1]);
3294 if (status < 0)
3295 return status;
3296 }
3297
3298 if (read_write == I2C_SMBUS_READ)
3299 switch (size) {
3300 case I2C_SMBUS_BYTE:
3301 data->byte = msgbuf0[0];
3302 break;
3303 case I2C_SMBUS_BYTE_DATA:
3304 data->byte = msgbuf1[0];
3305 break;
3306 case I2C_SMBUS_WORD_DATA:
3307 case I2C_SMBUS_PROC_CALL:
3308 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
3309 break;
3310 case I2C_SMBUS_I2C_BLOCK_DATA:
3311 for (i = 0; i < data->block[0]; i++)
3312 data->block[i+1] = msgbuf1[i];
3313 break;
3314 case I2C_SMBUS_BLOCK_DATA:
3315 case I2C_SMBUS_BLOCK_PROC_CALL:
3316 for (i = 0; i < msgbuf1[0] + 1; i++)
3317 data->block[i] = msgbuf1[i];
3318 break;
3319 }
3320 return 0;
3321}
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags,
3337 char read_write, u8 command, int protocol,
3338 union i2c_smbus_data *data)
3339{
3340 unsigned long orig_jiffies;
3341 int try;
3342 s32 res;
3343
3344
3345
3346
3347 trace_smbus_write(adapter, addr, flags, read_write,
3348 command, protocol, data);
3349 trace_smbus_read(adapter, addr, flags, read_write,
3350 command, protocol);
3351
3352 flags &= I2C_M_TEN | I2C_CLIENT_PEC | I2C_CLIENT_SCCB;
3353
3354 if (adapter->algo->smbus_xfer) {
3355 i2c_lock_bus(adapter, I2C_LOCK_SEGMENT);
3356
3357
3358 orig_jiffies = jiffies;
3359 for (res = 0, try = 0; try <= adapter->retries; try++) {
3360 res = adapter->algo->smbus_xfer(adapter, addr, flags,
3361 read_write, command,
3362 protocol, data);
3363 if (res != -EAGAIN)
3364 break;
3365 if (time_after(jiffies,
3366 orig_jiffies + adapter->timeout))
3367 break;
3368 }
3369 i2c_unlock_bus(adapter, I2C_LOCK_SEGMENT);
3370
3371 if (res != -EOPNOTSUPP || !adapter->algo->master_xfer)
3372 goto trace;
3373
3374
3375
3376
3377 }
3378
3379 res = i2c_smbus_xfer_emulated(adapter, addr, flags, read_write,
3380 command, protocol, data);
3381
3382trace:
3383
3384 trace_smbus_reply(adapter, addr, flags, read_write,
3385 command, protocol, data);
3386 trace_smbus_result(adapter, addr, flags, read_write,
3387 command, protocol, res);
3388
3389 return res;
3390}
3391EXPORT_SYMBOL(i2c_smbus_xfer);
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
3413 u8 command, u8 length, u8 *values)
3414{
3415 u8 i = 0;
3416 int status;
3417
3418 if (length > I2C_SMBUS_BLOCK_MAX)
3419 length = I2C_SMBUS_BLOCK_MAX;
3420
3421 if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_I2C_BLOCK))
3422 return i2c_smbus_read_i2c_block_data(client, command, length, values);
3423
3424 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_BYTE_DATA))
3425 return -EOPNOTSUPP;
3426
3427 if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_WORD_DATA)) {
3428 while ((i + 2) <= length) {
3429 status = i2c_smbus_read_word_data(client, command + i);
3430 if (status < 0)
3431 return status;
3432 values[i] = status & 0xff;
3433 values[i + 1] = status >> 8;
3434 i += 2;
3435 }
3436 }
3437
3438 while (i < length) {
3439 status = i2c_smbus_read_byte_data(client, command + i);
3440 if (status < 0)
3441 return status;
3442 values[i] = status;
3443 i++;
3444 }
3445
3446 return i;
3447}
3448EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data_or_emulated);
3449
3450#if IS_ENABLED(CONFIG_I2C_SLAVE)
3451int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
3452{
3453 int ret;
3454
3455 if (!client || !slave_cb) {
3456 WARN(1, "insufficent data\n");
3457 return -EINVAL;
3458 }
3459
3460 if (!(client->flags & I2C_CLIENT_SLAVE))
3461 dev_warn(&client->dev, "%s: client slave flag not set. You might see address collisions\n",
3462 __func__);
3463
3464 if (!(client->flags & I2C_CLIENT_TEN)) {
3465
3466 ret = i2c_check_7bit_addr_validity_strict(client->addr);
3467 if (ret) {
3468 dev_err(&client->dev, "%s: invalid address\n", __func__);
3469 return ret;
3470 }
3471 }
3472
3473 if (!client->adapter->algo->reg_slave) {
3474 dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
3475 return -EOPNOTSUPP;
3476 }
3477
3478 client->slave_cb = slave_cb;
3479
3480 i2c_lock_adapter(client->adapter);
3481 ret = client->adapter->algo->reg_slave(client);
3482 i2c_unlock_adapter(client->adapter);
3483
3484 if (ret) {
3485 client->slave_cb = NULL;
3486 dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
3487 }
3488
3489 return ret;
3490}
3491EXPORT_SYMBOL_GPL(i2c_slave_register);
3492
3493int i2c_slave_unregister(struct i2c_client *client)
3494{
3495 int ret;
3496
3497 if (!client->adapter->algo->unreg_slave) {
3498 dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
3499 return -EOPNOTSUPP;
3500 }
3501
3502 i2c_lock_adapter(client->adapter);
3503 ret = client->adapter->algo->unreg_slave(client);
3504 i2c_unlock_adapter(client->adapter);
3505
3506 if (ret == 0)
3507 client->slave_cb = NULL;
3508 else
3509 dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
3510
3511 return ret;
3512}
3513EXPORT_SYMBOL_GPL(i2c_slave_unregister);
3514#endif
3515
3516MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
3517MODULE_DESCRIPTION("I2C-Bus main module");
3518MODULE_LICENSE("GPL");
3519