1
2
3
4
5
6
7
8
9
10
11
12
13#define pr_fmt(fmt) "i2c-core: " fmt
14
15#include <dt-bindings/i2c/i2c.h>
16#include <linux/acpi.h>
17#include <linux/clk/clk-conf.h>
18#include <linux/completion.h>
19#include <linux/delay.h>
20#include <linux/err.h>
21#include <linux/errno.h>
22#include <linux/gpio/consumer.h>
23#include <linux/i2c.h>
24#include <linux/i2c-smbus.h>
25#include <linux/idr.h>
26#include <linux/init.h>
27#include <linux/interrupt.h>
28#include <linux/irqflags.h>
29#include <linux/jump_label.h>
30#include <linux/kernel.h>
31#include <linux/module.h>
32#include <linux/mutex.h>
33#include <linux/of_device.h>
34#include <linux/of.h>
35#include <linux/of_irq.h>
36#include <linux/pinctrl/consumer.h>
37#include <linux/pm_domain.h>
38#include <linux/pm_runtime.h>
39#include <linux/pm_wakeirq.h>
40#include <linux/property.h>
41#include <linux/rwsem.h>
42#include <linux/slab.h>
43
44#include "i2c-core.h"
45
46#define CREATE_TRACE_POINTS
47#include <trace/events/i2c.h>
48
49#define I2C_ADDR_OFFSET_TEN_BIT 0xa000
50#define I2C_ADDR_OFFSET_SLAVE 0x1000
51
52#define I2C_ADDR_7BITS_MAX 0x77
53#define I2C_ADDR_7BITS_COUNT (I2C_ADDR_7BITS_MAX + 1)
54
55#define I2C_ADDR_DEVICE_ID 0x7c
56
57
58
59
60
61static DEFINE_MUTEX(core_lock);
62static DEFINE_IDR(i2c_adapter_idr);
63
64static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
65
66static DEFINE_STATIC_KEY_FALSE(i2c_trace_msg_key);
67static bool is_registered;
68
69int i2c_transfer_trace_reg(void)
70{
71 static_branch_inc(&i2c_trace_msg_key);
72 return 0;
73}
74
75void i2c_transfer_trace_unreg(void)
76{
77 static_branch_dec(&i2c_trace_msg_key);
78}
79
80const char *i2c_freq_mode_string(u32 bus_freq_hz)
81{
82 switch (bus_freq_hz) {
83 case I2C_MAX_STANDARD_MODE_FREQ:
84 return "Standard Mode (100 kHz)";
85 case I2C_MAX_FAST_MODE_FREQ:
86 return "Fast Mode (400 kHz)";
87 case I2C_MAX_FAST_MODE_PLUS_FREQ:
88 return "Fast Mode Plus (1.0 MHz)";
89 case I2C_MAX_TURBO_MODE_FREQ:
90 return "Turbo Mode (1.4 MHz)";
91 case I2C_MAX_HIGH_SPEED_MODE_FREQ:
92 return "High Speed Mode (3.4 MHz)";
93 case I2C_MAX_ULTRA_FAST_MODE_FREQ:
94 return "Ultra Fast Mode (5.0 MHz)";
95 default:
96 return "Unknown Mode";
97 }
98}
99EXPORT_SYMBOL_GPL(i2c_freq_mode_string);
100
101const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
102 const struct i2c_client *client)
103{
104 if (!(id && client))
105 return NULL;
106
107 while (id->name[0]) {
108 if (strcmp(client->name, id->name) == 0)
109 return id;
110 id++;
111 }
112 return NULL;
113}
114EXPORT_SYMBOL_GPL(i2c_match_id);
115
116static int i2c_device_match(struct device *dev, struct device_driver *drv)
117{
118 struct i2c_client *client = i2c_verify_client(dev);
119 struct i2c_driver *driver;
120
121
122
123 if (i2c_of_match_device(drv->of_match_table, client))
124 return 1;
125
126
127 if (acpi_driver_match_device(dev, drv))
128 return 1;
129
130 driver = to_i2c_driver(drv);
131
132
133 if (i2c_match_id(driver->id_table, client))
134 return 1;
135
136 return 0;
137}
138
139static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
140{
141 struct i2c_client *client = to_i2c_client(dev);
142 int rc;
143
144 rc = of_device_uevent_modalias(dev, env);
145 if (rc != -ENODEV)
146 return rc;
147
148 rc = acpi_device_uevent_modalias(dev, env);
149 if (rc != -ENODEV)
150 return rc;
151
152 return add_uevent_var(env, "MODALIAS=%s%s", I2C_MODULE_PREFIX, client->name);
153}
154
155
156static int get_scl_gpio_value(struct i2c_adapter *adap)
157{
158 return gpiod_get_value_cansleep(adap->bus_recovery_info->scl_gpiod);
159}
160
161static void set_scl_gpio_value(struct i2c_adapter *adap, int val)
162{
163 gpiod_set_value_cansleep(adap->bus_recovery_info->scl_gpiod, val);
164}
165
166static int get_sda_gpio_value(struct i2c_adapter *adap)
167{
168 return gpiod_get_value_cansleep(adap->bus_recovery_info->sda_gpiod);
169}
170
171static void set_sda_gpio_value(struct i2c_adapter *adap, int val)
172{
173 gpiod_set_value_cansleep(adap->bus_recovery_info->sda_gpiod, val);
174}
175
176static int i2c_generic_bus_free(struct i2c_adapter *adap)
177{
178 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
179 int ret = -EOPNOTSUPP;
180
181 if (bri->get_bus_free)
182 ret = bri->get_bus_free(adap);
183 else if (bri->get_sda)
184 ret = bri->get_sda(adap);
185
186 if (ret < 0)
187 return ret;
188
189 return ret ? 0 : -EBUSY;
190}
191
192
193
194
195
196
197#define RECOVERY_NDELAY 5000
198#define RECOVERY_CLK_CNT 9
199
200int i2c_generic_scl_recovery(struct i2c_adapter *adap)
201{
202 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
203 int i = 0, scl = 1, ret = 0;
204
205 if (bri->prepare_recovery)
206 bri->prepare_recovery(adap);
207 if (bri->pinctrl)
208 pinctrl_select_state(bri->pinctrl, bri->pins_gpio);
209
210
211
212
213
214
215
216
217 bri->set_scl(adap, scl);
218 ndelay(RECOVERY_NDELAY);
219 if (bri->set_sda)
220 bri->set_sda(adap, scl);
221 ndelay(RECOVERY_NDELAY / 2);
222
223
224
225
226 while (i++ < RECOVERY_CLK_CNT * 2) {
227 if (scl) {
228
229 if (!bri->get_scl(adap)) {
230 dev_err(&adap->dev,
231 "SCL is stuck low, exit recovery\n");
232 ret = -EBUSY;
233 break;
234 }
235 }
236
237 scl = !scl;
238 bri->set_scl(adap, scl);
239
240 if (scl) {
241
242 ndelay(RECOVERY_NDELAY);
243 } else {
244
245 ndelay(RECOVERY_NDELAY / 2);
246 }
247 if (bri->set_sda)
248 bri->set_sda(adap, scl);
249 ndelay(RECOVERY_NDELAY / 2);
250
251 if (scl) {
252 ret = i2c_generic_bus_free(adap);
253 if (ret == 0)
254 break;
255 }
256 }
257
258
259 if (ret == -EOPNOTSUPP)
260 ret = 0;
261
262 if (bri->unprepare_recovery)
263 bri->unprepare_recovery(adap);
264 if (bri->pinctrl)
265 pinctrl_select_state(bri->pinctrl, bri->pins_default);
266
267 return ret;
268}
269EXPORT_SYMBOL_GPL(i2c_generic_scl_recovery);
270
271int i2c_recover_bus(struct i2c_adapter *adap)
272{
273 if (!adap->bus_recovery_info)
274 return -EBUSY;
275
276 dev_dbg(&adap->dev, "Trying i2c bus recovery\n");
277 return adap->bus_recovery_info->recover_bus(adap);
278}
279EXPORT_SYMBOL_GPL(i2c_recover_bus);
280
281static void i2c_gpio_init_pinctrl_recovery(struct i2c_adapter *adap)
282{
283 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
284 struct device *dev = &adap->dev;
285 struct pinctrl *p = bri->pinctrl;
286
287
288
289
290
291 if (!p) {
292 bri->pins_default = NULL;
293 bri->pins_gpio = NULL;
294 return;
295 }
296
297 if (!bri->pins_default) {
298 bri->pins_default = pinctrl_lookup_state(p,
299 PINCTRL_STATE_DEFAULT);
300 if (IS_ERR(bri->pins_default)) {
301 dev_dbg(dev, PINCTRL_STATE_DEFAULT " state not found for GPIO recovery\n");
302 bri->pins_default = NULL;
303 }
304 }
305 if (!bri->pins_gpio) {
306 bri->pins_gpio = pinctrl_lookup_state(p, "gpio");
307 if (IS_ERR(bri->pins_gpio))
308 bri->pins_gpio = pinctrl_lookup_state(p, "recovery");
309
310 if (IS_ERR(bri->pins_gpio)) {
311 dev_dbg(dev, "no gpio or recovery state found for GPIO recovery\n");
312 bri->pins_gpio = NULL;
313 }
314 }
315
316
317 if (bri->pins_default && bri->pins_gpio) {
318 dev_info(dev, "using pinctrl states for GPIO recovery");
319 } else {
320 bri->pinctrl = NULL;
321 bri->pins_default = NULL;
322 bri->pins_gpio = NULL;
323 }
324}
325
326static int i2c_gpio_init_generic_recovery(struct i2c_adapter *adap)
327{
328 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
329 struct device *dev = &adap->dev;
330 struct gpio_desc *gpiod;
331 int ret = 0;
332
333
334
335
336
337 if (bri->recover_bus && bri->recover_bus != i2c_generic_scl_recovery)
338 return 0;
339
340
341
342
343
344 if (bri->pinctrl)
345 pinctrl_select_state(bri->pinctrl, bri->pins_gpio);
346
347
348
349
350
351 if (!bri->scl_gpiod) {
352 gpiod = devm_gpiod_get(dev, "scl", GPIOD_OUT_HIGH_OPEN_DRAIN);
353 if (PTR_ERR(gpiod) == -EPROBE_DEFER) {
354 ret = -EPROBE_DEFER;
355 goto cleanup_pinctrl_state;
356 }
357 if (!IS_ERR(gpiod)) {
358 bri->scl_gpiod = gpiod;
359 bri->recover_bus = i2c_generic_scl_recovery;
360 dev_info(dev, "using generic GPIOs for recovery\n");
361 }
362 }
363
364
365 if (!bri->sda_gpiod) {
366
367
368
369
370 gpiod_direction_output(bri->scl_gpiod, 0);
371 udelay(10);
372 gpiod = devm_gpiod_get(dev, "sda", GPIOD_IN);
373
374
375 udelay(10);
376 gpiod_direction_output(bri->scl_gpiod, 1);
377
378 if (PTR_ERR(gpiod) == -EPROBE_DEFER) {
379 ret = -EPROBE_DEFER;
380 goto cleanup_pinctrl_state;
381 }
382 if (!IS_ERR(gpiod))
383 bri->sda_gpiod = gpiod;
384 }
385
386cleanup_pinctrl_state:
387
388 if (bri->pinctrl)
389 pinctrl_select_state(bri->pinctrl, bri->pins_default);
390
391 return ret;
392}
393
394static int i2c_gpio_init_recovery(struct i2c_adapter *adap)
395{
396 i2c_gpio_init_pinctrl_recovery(adap);
397 return i2c_gpio_init_generic_recovery(adap);
398}
399
400static int i2c_init_recovery(struct i2c_adapter *adap)
401{
402 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
403 bool is_error_level = true;
404 char *err_str;
405
406 if (!bri)
407 return 0;
408
409 if (i2c_gpio_init_recovery(adap) == -EPROBE_DEFER)
410 return -EPROBE_DEFER;
411
412 if (!bri->recover_bus) {
413 err_str = "no suitable method provided";
414 is_error_level = false;
415 goto err;
416 }
417
418 if (bri->scl_gpiod && bri->recover_bus == i2c_generic_scl_recovery) {
419 bri->get_scl = get_scl_gpio_value;
420 bri->set_scl = set_scl_gpio_value;
421 if (bri->sda_gpiod) {
422 bri->get_sda = get_sda_gpio_value;
423
424 if (gpiod_get_direction(bri->sda_gpiod) == 0)
425 bri->set_sda = set_sda_gpio_value;
426 }
427 } else if (bri->recover_bus == i2c_generic_scl_recovery) {
428
429 if (!bri->set_scl || !bri->get_scl) {
430 err_str = "no {get|set}_scl() found";
431 goto err;
432 }
433 if (!bri->set_sda && !bri->get_sda) {
434 err_str = "either get_sda() or set_sda() needed";
435 goto err;
436 }
437 }
438
439 return 0;
440 err:
441 if (is_error_level)
442 dev_err(&adap->dev, "Not using recovery: %s\n", err_str);
443 else
444 dev_dbg(&adap->dev, "Not using recovery: %s\n", err_str);
445 adap->bus_recovery_info = NULL;
446
447 return -EINVAL;
448}
449
450static int i2c_smbus_host_notify_to_irq(const struct i2c_client *client)
451{
452 struct i2c_adapter *adap = client->adapter;
453 unsigned int irq;
454
455 if (!adap->host_notify_domain)
456 return -ENXIO;
457
458 if (client->flags & I2C_CLIENT_TEN)
459 return -EINVAL;
460
461 irq = irq_create_mapping(adap->host_notify_domain, client->addr);
462
463 return irq > 0 ? irq : -ENXIO;
464}
465
466static int i2c_device_probe(struct device *dev)
467{
468 struct i2c_client *client = i2c_verify_client(dev);
469 struct i2c_adapter *adap;
470 struct i2c_driver *driver;
471 int status;
472
473 if (!client)
474 return 0;
475
476 adap = client->adapter;
477 client->irq = client->init_irq;
478
479 if (!client->irq) {
480 int irq = -ENOENT;
481
482 if (client->flags & I2C_CLIENT_HOST_NOTIFY) {
483 dev_dbg(dev, "Using Host Notify IRQ\n");
484
485 pm_runtime_get_sync(&client->adapter->dev);
486 irq = i2c_smbus_host_notify_to_irq(client);
487 } else if (dev->of_node) {
488 irq = of_irq_get_byname(dev->of_node, "irq");
489 if (irq == -EINVAL || irq == -ENODATA)
490 irq = of_irq_get(dev->of_node, 0);
491 } else if (ACPI_COMPANION(dev)) {
492 irq = i2c_acpi_get_irq(client);
493 }
494 if (irq == -EPROBE_DEFER) {
495 status = irq;
496 goto put_sync_adapter;
497 }
498
499 if (irq < 0)
500 irq = 0;
501
502 client->irq = irq;
503 }
504
505 driver = to_i2c_driver(dev->driver);
506
507
508
509
510
511 if (!driver->id_table &&
512 !acpi_driver_match_device(dev, dev->driver) &&
513 !i2c_of_match_device(dev->driver->of_match_table, client)) {
514 status = -ENODEV;
515 goto put_sync_adapter;
516 }
517
518 if (client->flags & I2C_CLIENT_WAKE) {
519 int wakeirq;
520
521 wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
522 if (wakeirq == -EPROBE_DEFER) {
523 status = wakeirq;
524 goto put_sync_adapter;
525 }
526
527 device_init_wakeup(&client->dev, true);
528
529 if (wakeirq > 0 && wakeirq != client->irq)
530 status = dev_pm_set_dedicated_wake_irq(dev, wakeirq);
531 else if (client->irq > 0)
532 status = dev_pm_set_wake_irq(dev, client->irq);
533 else
534 status = 0;
535
536 if (status)
537 dev_warn(&client->dev, "failed to set up wakeup irq\n");
538 }
539
540 dev_dbg(dev, "probe\n");
541
542 if (adap->bus_regulator) {
543 status = regulator_enable(adap->bus_regulator);
544 if (status < 0) {
545 dev_err(&adap->dev, "Failed to enable bus regulator\n");
546 goto err_clear_wakeup_irq;
547 }
548 }
549
550 status = of_clk_set_defaults(dev->of_node, false);
551 if (status < 0)
552 goto err_clear_wakeup_irq;
553
554 status = dev_pm_domain_attach(&client->dev, true);
555 if (status)
556 goto err_clear_wakeup_irq;
557
558 client->devres_group_id = devres_open_group(&client->dev, NULL,
559 GFP_KERNEL);
560 if (!client->devres_group_id) {
561 status = -ENOMEM;
562 goto err_detach_pm_domain;
563 }
564
565
566
567
568
569 if (driver->probe_new)
570 status = driver->probe_new(client);
571 else if (driver->probe)
572 status = driver->probe(client,
573 i2c_match_id(driver->id_table, client));
574 else
575 status = -EINVAL;
576
577
578
579
580
581
582
583
584
585 if (status)
586 goto err_release_driver_resources;
587
588 return 0;
589
590err_release_driver_resources:
591 devres_release_group(&client->dev, client->devres_group_id);
592err_detach_pm_domain:
593 dev_pm_domain_detach(&client->dev, true);
594err_clear_wakeup_irq:
595 dev_pm_clear_wake_irq(&client->dev);
596 device_init_wakeup(&client->dev, false);
597put_sync_adapter:
598 if (client->flags & I2C_CLIENT_HOST_NOTIFY)
599 pm_runtime_put_sync(&client->adapter->dev);
600
601 return status;
602}
603
604static void i2c_device_remove(struct device *dev)
605{
606 struct i2c_client *client = to_i2c_client(dev);
607 struct i2c_adapter *adap;
608 struct i2c_driver *driver;
609
610 adap = client->adapter;
611 driver = to_i2c_driver(dev->driver);
612 if (driver->remove) {
613 int status;
614
615 dev_dbg(dev, "remove\n");
616
617 status = driver->remove(client);
618 if (status)
619 dev_warn(dev, "remove failed (%pe), will be ignored\n", ERR_PTR(status));
620 }
621
622 devres_release_group(&client->dev, client->devres_group_id);
623
624 dev_pm_domain_detach(&client->dev, true);
625 if (!pm_runtime_status_suspended(&client->dev) && adap->bus_regulator)
626 regulator_disable(adap->bus_regulator);
627
628 dev_pm_clear_wake_irq(&client->dev);
629 device_init_wakeup(&client->dev, false);
630
631 client->irq = 0;
632 if (client->flags & I2C_CLIENT_HOST_NOTIFY)
633 pm_runtime_put(&client->adapter->dev);
634}
635
636#ifdef CONFIG_PM_SLEEP
637static int i2c_resume_early(struct device *dev)
638{
639 struct i2c_client *client = i2c_verify_client(dev);
640 int err;
641
642 if (!client)
643 return 0;
644
645 if (pm_runtime_status_suspended(&client->dev) &&
646 client->adapter->bus_regulator) {
647 err = regulator_enable(client->adapter->bus_regulator);
648 if (err)
649 return err;
650 }
651
652 return pm_generic_resume_early(&client->dev);
653}
654
655static int i2c_suspend_late(struct device *dev)
656{
657 struct i2c_client *client = i2c_verify_client(dev);
658 int err;
659
660 if (!client)
661 return 0;
662
663 err = pm_generic_suspend_late(&client->dev);
664 if (err)
665 return err;
666
667 if (!pm_runtime_status_suspended(&client->dev) &&
668 client->adapter->bus_regulator)
669 return regulator_disable(client->adapter->bus_regulator);
670
671 return 0;
672}
673#endif
674
675#ifdef CONFIG_PM
676static int i2c_runtime_resume(struct device *dev)
677{
678 struct i2c_client *client = i2c_verify_client(dev);
679 int err;
680
681 if (!client)
682 return 0;
683
684 if (client->adapter->bus_regulator) {
685 err = regulator_enable(client->adapter->bus_regulator);
686 if (err)
687 return err;
688 }
689
690 return pm_generic_runtime_resume(&client->dev);
691}
692
693static int i2c_runtime_suspend(struct device *dev)
694{
695 struct i2c_client *client = i2c_verify_client(dev);
696 int err;
697
698 if (!client)
699 return 0;
700
701 err = pm_generic_runtime_suspend(&client->dev);
702 if (err)
703 return err;
704
705 if (client->adapter->bus_regulator)
706 return regulator_disable(client->adapter->bus_regulator);
707 return 0;
708}
709#endif
710
711static const struct dev_pm_ops i2c_device_pm = {
712 SET_LATE_SYSTEM_SLEEP_PM_OPS(i2c_suspend_late, i2c_resume_early)
713 SET_RUNTIME_PM_OPS(i2c_runtime_suspend, i2c_runtime_resume, NULL)
714};
715
716static void i2c_device_shutdown(struct device *dev)
717{
718 struct i2c_client *client = i2c_verify_client(dev);
719 struct i2c_driver *driver;
720
721 if (!client || !dev->driver)
722 return;
723 driver = to_i2c_driver(dev->driver);
724 if (driver->shutdown)
725 driver->shutdown(client);
726 else if (client->irq > 0)
727 disable_irq(client->irq);
728}
729
730static void i2c_client_dev_release(struct device *dev)
731{
732 kfree(to_i2c_client(dev));
733}
734
735static ssize_t
736name_show(struct device *dev, struct device_attribute *attr, char *buf)
737{
738 return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
739 to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
740}
741static DEVICE_ATTR_RO(name);
742
743static ssize_t
744modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
745{
746 struct i2c_client *client = to_i2c_client(dev);
747 int len;
748
749 len = of_device_modalias(dev, buf, PAGE_SIZE);
750 if (len != -ENODEV)
751 return len;
752
753 len = acpi_device_modalias(dev, buf, PAGE_SIZE - 1);
754 if (len != -ENODEV)
755 return len;
756
757 return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
758}
759static DEVICE_ATTR_RO(modalias);
760
761static struct attribute *i2c_dev_attrs[] = {
762 &dev_attr_name.attr,
763
764 &dev_attr_modalias.attr,
765 NULL
766};
767ATTRIBUTE_GROUPS(i2c_dev);
768
769struct bus_type i2c_bus_type = {
770 .name = "i2c",
771 .match = i2c_device_match,
772 .probe = i2c_device_probe,
773 .remove = i2c_device_remove,
774 .shutdown = i2c_device_shutdown,
775 .pm = &i2c_device_pm,
776};
777EXPORT_SYMBOL_GPL(i2c_bus_type);
778
779struct device_type i2c_client_type = {
780 .groups = i2c_dev_groups,
781 .uevent = i2c_device_uevent,
782 .release = i2c_client_dev_release,
783};
784EXPORT_SYMBOL_GPL(i2c_client_type);
785
786
787
788
789
790
791
792
793
794
795
796struct i2c_client *i2c_verify_client(struct device *dev)
797{
798 return (dev->type == &i2c_client_type)
799 ? to_i2c_client(dev)
800 : NULL;
801}
802EXPORT_SYMBOL(i2c_verify_client);
803
804
805
806static unsigned short i2c_encode_flags_to_addr(struct i2c_client *client)
807{
808 unsigned short addr = client->addr;
809
810
811 if (client->flags & I2C_CLIENT_TEN)
812 addr |= I2C_ADDR_OFFSET_TEN_BIT;
813
814 if (client->flags & I2C_CLIENT_SLAVE)
815 addr |= I2C_ADDR_OFFSET_SLAVE;
816
817 return addr;
818}
819
820
821
822static int i2c_check_addr_validity(unsigned int addr, unsigned short flags)
823{
824 if (flags & I2C_CLIENT_TEN) {
825
826 if (addr > 0x3ff)
827 return -EINVAL;
828 } else {
829
830 if (addr == 0x00 || addr > 0x7f)
831 return -EINVAL;
832 }
833 return 0;
834}
835
836
837
838
839
840int i2c_check_7bit_addr_validity_strict(unsigned short addr)
841{
842
843
844
845
846
847
848
849
850
851
852 if (addr < 0x08 || addr > 0x77)
853 return -EINVAL;
854 return 0;
855}
856
857static int __i2c_check_addr_busy(struct device *dev, void *addrp)
858{
859 struct i2c_client *client = i2c_verify_client(dev);
860 int addr = *(int *)addrp;
861
862 if (client && i2c_encode_flags_to_addr(client) == addr)
863 return -EBUSY;
864 return 0;
865}
866
867
868static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
869{
870 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
871 int result;
872
873 result = device_for_each_child(&adapter->dev, &addr,
874 __i2c_check_addr_busy);
875
876 if (!result && parent)
877 result = i2c_check_mux_parents(parent, addr);
878
879 return result;
880}
881
882
883static int i2c_check_mux_children(struct device *dev, void *addrp)
884{
885 int result;
886
887 if (dev->type == &i2c_adapter_type)
888 result = device_for_each_child(dev, addrp,
889 i2c_check_mux_children);
890 else
891 result = __i2c_check_addr_busy(dev, addrp);
892
893 return result;
894}
895
896static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
897{
898 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
899 int result = 0;
900
901 if (parent)
902 result = i2c_check_mux_parents(parent, addr);
903
904 if (!result)
905 result = device_for_each_child(&adapter->dev, &addr,
906 i2c_check_mux_children);
907
908 return result;
909}
910
911
912
913
914
915
916
917static void i2c_adapter_lock_bus(struct i2c_adapter *adapter,
918 unsigned int flags)
919{
920 rt_mutex_lock_nested(&adapter->bus_lock, i2c_adapter_depth(adapter));
921}
922
923
924
925
926
927
928
929static int i2c_adapter_trylock_bus(struct i2c_adapter *adapter,
930 unsigned int flags)
931{
932 return rt_mutex_trylock(&adapter->bus_lock);
933}
934
935
936
937
938
939
940
941static void i2c_adapter_unlock_bus(struct i2c_adapter *adapter,
942 unsigned int flags)
943{
944 rt_mutex_unlock(&adapter->bus_lock);
945}
946
947static void i2c_dev_set_name(struct i2c_adapter *adap,
948 struct i2c_client *client,
949 struct i2c_board_info const *info)
950{
951 struct acpi_device *adev = ACPI_COMPANION(&client->dev);
952
953 if (info && info->dev_name) {
954 dev_set_name(&client->dev, "i2c-%s", info->dev_name);
955 return;
956 }
957
958 if (adev) {
959 dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
960 return;
961 }
962
963 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
964 i2c_encode_flags_to_addr(client));
965}
966
967int i2c_dev_irq_from_resources(const struct resource *resources,
968 unsigned int num_resources)
969{
970 struct irq_data *irqd;
971 int i;
972
973 for (i = 0; i < num_resources; i++) {
974 const struct resource *r = &resources[i];
975
976 if (resource_type(r) != IORESOURCE_IRQ)
977 continue;
978
979 if (r->flags & IORESOURCE_BITS) {
980 irqd = irq_get_irq_data(r->start);
981 if (!irqd)
982 break;
983
984 irqd_set_trigger_type(irqd, r->flags & IORESOURCE_BITS);
985 }
986
987 return r->start;
988 }
989
990 return 0;
991}
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009struct i2c_client *
1010i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
1011{
1012 struct i2c_client *client;
1013 int status;
1014
1015 client = kzalloc(sizeof *client, GFP_KERNEL);
1016 if (!client)
1017 return ERR_PTR(-ENOMEM);
1018
1019 client->adapter = adap;
1020
1021 client->dev.platform_data = info->platform_data;
1022 client->flags = info->flags;
1023 client->addr = info->addr;
1024
1025 client->init_irq = info->irq;
1026 if (!client->init_irq)
1027 client->init_irq = i2c_dev_irq_from_resources(info->resources,
1028 info->num_resources);
1029
1030 strlcpy(client->name, info->type, sizeof(client->name));
1031
1032 status = i2c_check_addr_validity(client->addr, client->flags);
1033 if (status) {
1034 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
1035 client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
1036 goto out_err_silent;
1037 }
1038
1039
1040 status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client));
1041 if (status)
1042 goto out_err;
1043
1044 client->dev.parent = &client->adapter->dev;
1045 client->dev.bus = &i2c_bus_type;
1046 client->dev.type = &i2c_client_type;
1047 client->dev.of_node = of_node_get(info->of_node);
1048 client->dev.fwnode = info->fwnode;
1049
1050 i2c_dev_set_name(adap, client, info);
1051
1052 if (info->swnode) {
1053 status = device_add_software_node(&client->dev, info->swnode);
1054 if (status) {
1055 dev_err(&adap->dev,
1056 "Failed to add software node to client %s: %d\n",
1057 client->name, status);
1058 goto out_err_put_of_node;
1059 }
1060 }
1061
1062 status = device_register(&client->dev);
1063 if (status)
1064 goto out_remove_swnode;
1065
1066 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
1067 client->name, dev_name(&client->dev));
1068
1069 return client;
1070
1071out_remove_swnode:
1072 device_remove_software_node(&client->dev);
1073out_err_put_of_node:
1074 of_node_put(info->of_node);
1075out_err:
1076 dev_err(&adap->dev,
1077 "Failed to register i2c client %s at 0x%02x (%d)\n",
1078 client->name, client->addr, status);
1079out_err_silent:
1080 kfree(client);
1081 return ERR_PTR(status);
1082}
1083EXPORT_SYMBOL_GPL(i2c_new_client_device);
1084
1085
1086
1087
1088
1089
1090void i2c_unregister_device(struct i2c_client *client)
1091{
1092 if (IS_ERR_OR_NULL(client))
1093 return;
1094
1095 if (client->dev.of_node) {
1096 of_node_clear_flag(client->dev.of_node, OF_POPULATED);
1097 of_node_put(client->dev.of_node);
1098 }
1099
1100 if (ACPI_COMPANION(&client->dev))
1101 acpi_device_clear_enumerated(ACPI_COMPANION(&client->dev));
1102 device_remove_software_node(&client->dev);
1103 device_unregister(&client->dev);
1104}
1105EXPORT_SYMBOL_GPL(i2c_unregister_device);
1106
1107
1108static const struct i2c_device_id dummy_id[] = {
1109 { "dummy", 0 },
1110 { },
1111};
1112
1113static int dummy_probe(struct i2c_client *client,
1114 const struct i2c_device_id *id)
1115{
1116 return 0;
1117}
1118
1119static int dummy_remove(struct i2c_client *client)
1120{
1121 return 0;
1122}
1123
1124static struct i2c_driver dummy_driver = {
1125 .driver.name = "dummy",
1126 .probe = dummy_probe,
1127 .remove = dummy_remove,
1128 .id_table = dummy_id,
1129};
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149struct i2c_client *i2c_new_dummy_device(struct i2c_adapter *adapter, u16 address)
1150{
1151 struct i2c_board_info info = {
1152 I2C_BOARD_INFO("dummy", address),
1153 };
1154
1155 return i2c_new_client_device(adapter, &info);
1156}
1157EXPORT_SYMBOL_GPL(i2c_new_dummy_device);
1158
1159static void devm_i2c_release_dummy(void *client)
1160{
1161 i2c_unregister_device(client);
1162}
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174struct i2c_client *devm_i2c_new_dummy_device(struct device *dev,
1175 struct i2c_adapter *adapter,
1176 u16 address)
1177{
1178 struct i2c_client *client;
1179 int ret;
1180
1181 client = i2c_new_dummy_device(adapter, address);
1182 if (IS_ERR(client))
1183 return client;
1184
1185 ret = devm_add_action_or_reset(dev, devm_i2c_release_dummy, client);
1186 if (ret)
1187 return ERR_PTR(ret);
1188
1189 return client;
1190}
1191EXPORT_SYMBOL_GPL(devm_i2c_new_dummy_device);
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215struct i2c_client *i2c_new_ancillary_device(struct i2c_client *client,
1216 const char *name,
1217 u16 default_addr)
1218{
1219 struct device_node *np = client->dev.of_node;
1220 u32 addr = default_addr;
1221 int i;
1222
1223 if (np) {
1224 i = of_property_match_string(np, "reg-names", name);
1225 if (i >= 0)
1226 of_property_read_u32_index(np, "reg", i, &addr);
1227 }
1228
1229 dev_dbg(&client->adapter->dev, "Address for %s : 0x%x\n", name, addr);
1230 return i2c_new_dummy_device(client->adapter, addr);
1231}
1232EXPORT_SYMBOL_GPL(i2c_new_ancillary_device);
1233
1234
1235
1236
1237
1238static void i2c_adapter_dev_release(struct device *dev)
1239{
1240 struct i2c_adapter *adap = to_i2c_adapter(dev);
1241 complete(&adap->dev_released);
1242}
1243
1244unsigned int i2c_adapter_depth(struct i2c_adapter *adapter)
1245{
1246 unsigned int depth = 0;
1247
1248 while ((adapter = i2c_parent_is_i2c_adapter(adapter)))
1249 depth++;
1250
1251 WARN_ONCE(depth >= MAX_LOCKDEP_SUBCLASSES,
1252 "adapter depth exceeds lockdep subclass limit\n");
1253
1254 return depth;
1255}
1256EXPORT_SYMBOL_GPL(i2c_adapter_depth);
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268static ssize_t
1269new_device_store(struct device *dev, struct device_attribute *attr,
1270 const char *buf, size_t count)
1271{
1272 struct i2c_adapter *adap = to_i2c_adapter(dev);
1273 struct i2c_board_info info;
1274 struct i2c_client *client;
1275 char *blank, end;
1276 int res;
1277
1278 memset(&info, 0, sizeof(struct i2c_board_info));
1279
1280 blank = strchr(buf, ' ');
1281 if (!blank) {
1282 dev_err(dev, "%s: Missing parameters\n", "new_device");
1283 return -EINVAL;
1284 }
1285 if (blank - buf > I2C_NAME_SIZE - 1) {
1286 dev_err(dev, "%s: Invalid device name\n", "new_device");
1287 return -EINVAL;
1288 }
1289 memcpy(info.type, buf, blank - buf);
1290
1291
1292 res = sscanf(++blank, "%hi%c", &info.addr, &end);
1293 if (res < 1) {
1294 dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
1295 return -EINVAL;
1296 }
1297 if (res > 1 && end != '\n') {
1298 dev_err(dev, "%s: Extra parameters\n", "new_device");
1299 return -EINVAL;
1300 }
1301
1302 if ((info.addr & I2C_ADDR_OFFSET_TEN_BIT) == I2C_ADDR_OFFSET_TEN_BIT) {
1303 info.addr &= ~I2C_ADDR_OFFSET_TEN_BIT;
1304 info.flags |= I2C_CLIENT_TEN;
1305 }
1306
1307 if (info.addr & I2C_ADDR_OFFSET_SLAVE) {
1308 info.addr &= ~I2C_ADDR_OFFSET_SLAVE;
1309 info.flags |= I2C_CLIENT_SLAVE;
1310 }
1311
1312 client = i2c_new_client_device(adap, &info);
1313 if (IS_ERR(client))
1314 return PTR_ERR(client);
1315
1316
1317 mutex_lock(&adap->userspace_clients_lock);
1318 list_add_tail(&client->detected, &adap->userspace_clients);
1319 mutex_unlock(&adap->userspace_clients_lock);
1320 dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
1321 info.type, info.addr);
1322
1323 return count;
1324}
1325static DEVICE_ATTR_WO(new_device);
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336static ssize_t
1337delete_device_store(struct device *dev, struct device_attribute *attr,
1338 const char *buf, size_t count)
1339{
1340 struct i2c_adapter *adap = to_i2c_adapter(dev);
1341 struct i2c_client *client, *next;
1342 unsigned short addr;
1343 char end;
1344 int res;
1345
1346
1347 res = sscanf(buf, "%hi%c", &addr, &end);
1348 if (res < 1) {
1349 dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
1350 return -EINVAL;
1351 }
1352 if (res > 1 && end != '\n') {
1353 dev_err(dev, "%s: Extra parameters\n", "delete_device");
1354 return -EINVAL;
1355 }
1356
1357
1358 res = -ENOENT;
1359 mutex_lock_nested(&adap->userspace_clients_lock,
1360 i2c_adapter_depth(adap));
1361 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1362 detected) {
1363 if (i2c_encode_flags_to_addr(client) == addr) {
1364 dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
1365 "delete_device", client->name, client->addr);
1366
1367 list_del(&client->detected);
1368 i2c_unregister_device(client);
1369 res = count;
1370 break;
1371 }
1372 }
1373 mutex_unlock(&adap->userspace_clients_lock);
1374
1375 if (res < 0)
1376 dev_err(dev, "%s: Can't find device in list\n",
1377 "delete_device");
1378 return res;
1379}
1380static DEVICE_ATTR_IGNORE_LOCKDEP(delete_device, S_IWUSR, NULL,
1381 delete_device_store);
1382
1383static struct attribute *i2c_adapter_attrs[] = {
1384 &dev_attr_name.attr,
1385 &dev_attr_new_device.attr,
1386 &dev_attr_delete_device.attr,
1387 NULL
1388};
1389ATTRIBUTE_GROUPS(i2c_adapter);
1390
1391struct device_type i2c_adapter_type = {
1392 .groups = i2c_adapter_groups,
1393 .release = i2c_adapter_dev_release,
1394};
1395EXPORT_SYMBOL_GPL(i2c_adapter_type);
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406struct i2c_adapter *i2c_verify_adapter(struct device *dev)
1407{
1408 return (dev->type == &i2c_adapter_type)
1409 ? to_i2c_adapter(dev)
1410 : NULL;
1411}
1412EXPORT_SYMBOL(i2c_verify_adapter);
1413
1414#ifdef CONFIG_I2C_COMPAT
1415static struct class_compat *i2c_adapter_compat_class;
1416#endif
1417
1418static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
1419{
1420 struct i2c_devinfo *devinfo;
1421
1422 down_read(&__i2c_board_lock);
1423 list_for_each_entry(devinfo, &__i2c_board_list, list) {
1424 if (devinfo->busnum == adapter->nr &&
1425 IS_ERR(i2c_new_client_device(adapter, &devinfo->board_info)))
1426 dev_err(&adapter->dev,
1427 "Can't create device at 0x%02x\n",
1428 devinfo->board_info.addr);
1429 }
1430 up_read(&__i2c_board_lock);
1431}
1432
1433static int i2c_do_add_adapter(struct i2c_driver *driver,
1434 struct i2c_adapter *adap)
1435{
1436
1437 i2c_detect(adap, driver);
1438
1439 return 0;
1440}
1441
1442static int __process_new_adapter(struct device_driver *d, void *data)
1443{
1444 return i2c_do_add_adapter(to_i2c_driver(d), data);
1445}
1446
1447static const struct i2c_lock_operations i2c_adapter_lock_ops = {
1448 .lock_bus = i2c_adapter_lock_bus,
1449 .trylock_bus = i2c_adapter_trylock_bus,
1450 .unlock_bus = i2c_adapter_unlock_bus,
1451};
1452
1453static void i2c_host_notify_irq_teardown(struct i2c_adapter *adap)
1454{
1455 struct irq_domain *domain = adap->host_notify_domain;
1456 irq_hw_number_t hwirq;
1457
1458 if (!domain)
1459 return;
1460
1461 for (hwirq = 0 ; hwirq < I2C_ADDR_7BITS_COUNT ; hwirq++)
1462 irq_dispose_mapping(irq_find_mapping(domain, hwirq));
1463
1464 irq_domain_remove(domain);
1465 adap->host_notify_domain = NULL;
1466}
1467
1468static int i2c_host_notify_irq_map(struct irq_domain *h,
1469 unsigned int virq,
1470 irq_hw_number_t hw_irq_num)
1471{
1472 irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq);
1473
1474 return 0;
1475}
1476
1477static const struct irq_domain_ops i2c_host_notify_irq_ops = {
1478 .map = i2c_host_notify_irq_map,
1479};
1480
1481static int i2c_setup_host_notify_irq_domain(struct i2c_adapter *adap)
1482{
1483 struct irq_domain *domain;
1484
1485 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_HOST_NOTIFY))
1486 return 0;
1487
1488 domain = irq_domain_create_linear(adap->dev.parent->fwnode,
1489 I2C_ADDR_7BITS_COUNT,
1490 &i2c_host_notify_irq_ops, adap);
1491 if (!domain)
1492 return -ENOMEM;
1493
1494 adap->host_notify_domain = domain;
1495
1496 return 0;
1497}
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr)
1510{
1511 int irq;
1512
1513 if (!adap)
1514 return -EINVAL;
1515
1516 irq = irq_find_mapping(adap->host_notify_domain, addr);
1517 if (irq <= 0)
1518 return -ENXIO;
1519
1520 generic_handle_irq(irq);
1521
1522 return 0;
1523}
1524EXPORT_SYMBOL_GPL(i2c_handle_smbus_host_notify);
1525
1526static int i2c_register_adapter(struct i2c_adapter *adap)
1527{
1528 int res = -EINVAL;
1529
1530
1531 if (WARN_ON(!is_registered)) {
1532 res = -EAGAIN;
1533 goto out_list;
1534 }
1535
1536
1537 if (WARN(!adap->name[0], "i2c adapter has no name"))
1538 goto out_list;
1539
1540 if (!adap->algo) {
1541 pr_err("adapter '%s': no algo supplied!\n", adap->name);
1542 goto out_list;
1543 }
1544
1545 if (!adap->lock_ops)
1546 adap->lock_ops = &i2c_adapter_lock_ops;
1547
1548 adap->locked_flags = 0;
1549 rt_mutex_init(&adap->bus_lock);
1550 rt_mutex_init(&adap->mux_lock);
1551 mutex_init(&adap->userspace_clients_lock);
1552 INIT_LIST_HEAD(&adap->userspace_clients);
1553
1554
1555 if (adap->timeout == 0)
1556 adap->timeout = HZ;
1557
1558
1559 res = i2c_setup_host_notify_irq_domain(adap);
1560 if (res) {
1561 pr_err("adapter '%s': can't create Host Notify IRQs (%d)\n",
1562 adap->name, res);
1563 goto out_list;
1564 }
1565
1566 dev_set_name(&adap->dev, "i2c-%d", adap->nr);
1567 adap->dev.bus = &i2c_bus_type;
1568 adap->dev.type = &i2c_adapter_type;
1569 res = device_register(&adap->dev);
1570 if (res) {
1571 pr_err("adapter '%s': can't register device (%d)\n", adap->name, res);
1572 goto out_list;
1573 }
1574
1575 res = of_i2c_setup_smbus_alert(adap);
1576 if (res)
1577 goto out_reg;
1578
1579 pm_runtime_no_callbacks(&adap->dev);
1580 pm_suspend_ignore_children(&adap->dev, true);
1581 pm_runtime_enable(&adap->dev);
1582
1583 res = i2c_init_recovery(adap);
1584 if (res == -EPROBE_DEFER)
1585 goto out_reg;
1586
1587 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
1588
1589#ifdef CONFIG_I2C_COMPAT
1590 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
1591 adap->dev.parent);
1592 if (res)
1593 dev_warn(&adap->dev,
1594 "Failed to create compatibility class link\n");
1595#endif
1596
1597
1598 of_i2c_register_devices(adap);
1599 i2c_acpi_install_space_handler(adap);
1600 i2c_acpi_register_devices(adap);
1601
1602 if (adap->nr < __i2c_first_dynamic_bus_num)
1603 i2c_scan_static_board_info(adap);
1604
1605
1606 mutex_lock(&core_lock);
1607 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
1608 mutex_unlock(&core_lock);
1609
1610 return 0;
1611
1612out_reg:
1613 init_completion(&adap->dev_released);
1614 device_unregister(&adap->dev);
1615 wait_for_completion(&adap->dev_released);
1616out_list:
1617 mutex_lock(&core_lock);
1618 idr_remove(&i2c_adapter_idr, adap->nr);
1619 mutex_unlock(&core_lock);
1620 return res;
1621}
1622
1623
1624
1625
1626
1627
1628
1629
1630static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)
1631{
1632 int id;
1633
1634 mutex_lock(&core_lock);
1635 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL);
1636 mutex_unlock(&core_lock);
1637 if (WARN(id < 0, "couldn't get idr"))
1638 return id == -ENOSPC ? -EBUSY : id;
1639
1640 return i2c_register_adapter(adap);
1641}
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657int i2c_add_adapter(struct i2c_adapter *adapter)
1658{
1659 struct device *dev = &adapter->dev;
1660 int id;
1661
1662 if (dev->of_node) {
1663 id = of_alias_get_id(dev->of_node, "i2c");
1664 if (id >= 0) {
1665 adapter->nr = id;
1666 return __i2c_add_numbered_adapter(adapter);
1667 }
1668 }
1669
1670 mutex_lock(&core_lock);
1671 id = idr_alloc(&i2c_adapter_idr, adapter,
1672 __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);
1673 mutex_unlock(&core_lock);
1674 if (WARN(id < 0, "couldn't get idr"))
1675 return id;
1676
1677 adapter->nr = id;
1678
1679 return i2c_register_adapter(adapter);
1680}
1681EXPORT_SYMBOL(i2c_add_adapter);
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706int i2c_add_numbered_adapter(struct i2c_adapter *adap)
1707{
1708 if (adap->nr == -1)
1709 return i2c_add_adapter(adap);
1710
1711 return __i2c_add_numbered_adapter(adap);
1712}
1713EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
1714
1715static void i2c_do_del_adapter(struct i2c_driver *driver,
1716 struct i2c_adapter *adapter)
1717{
1718 struct i2c_client *client, *_n;
1719
1720
1721
1722 list_for_each_entry_safe(client, _n, &driver->clients, detected) {
1723 if (client->adapter == adapter) {
1724 dev_dbg(&adapter->dev, "Removing %s at 0x%x\n",
1725 client->name, client->addr);
1726 list_del(&client->detected);
1727 i2c_unregister_device(client);
1728 }
1729 }
1730}
1731
1732static int __unregister_client(struct device *dev, void *dummy)
1733{
1734 struct i2c_client *client = i2c_verify_client(dev);
1735 if (client && strcmp(client->name, "dummy"))
1736 i2c_unregister_device(client);
1737 return 0;
1738}
1739
1740static int __unregister_dummy(struct device *dev, void *dummy)
1741{
1742 struct i2c_client *client = i2c_verify_client(dev);
1743 i2c_unregister_device(client);
1744 return 0;
1745}
1746
1747static int __process_removed_adapter(struct device_driver *d, void *data)
1748{
1749 i2c_do_del_adapter(to_i2c_driver(d), data);
1750 return 0;
1751}
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761void i2c_del_adapter(struct i2c_adapter *adap)
1762{
1763 struct i2c_adapter *found;
1764 struct i2c_client *client, *next;
1765
1766
1767 mutex_lock(&core_lock);
1768 found = idr_find(&i2c_adapter_idr, adap->nr);
1769 mutex_unlock(&core_lock);
1770 if (found != adap) {
1771 pr_debug("attempting to delete unregistered adapter [%s]\n", adap->name);
1772 return;
1773 }
1774
1775 i2c_acpi_remove_space_handler(adap);
1776
1777 mutex_lock(&core_lock);
1778 bus_for_each_drv(&i2c_bus_type, NULL, adap,
1779 __process_removed_adapter);
1780 mutex_unlock(&core_lock);
1781
1782
1783 mutex_lock_nested(&adap->userspace_clients_lock,
1784 i2c_adapter_depth(adap));
1785 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1786 detected) {
1787 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name,
1788 client->addr);
1789 list_del(&client->detected);
1790 i2c_unregister_device(client);
1791 }
1792 mutex_unlock(&adap->userspace_clients_lock);
1793
1794
1795
1796
1797
1798
1799 device_for_each_child(&adap->dev, NULL, __unregister_client);
1800 device_for_each_child(&adap->dev, NULL, __unregister_dummy);
1801
1802#ifdef CONFIG_I2C_COMPAT
1803 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
1804 adap->dev.parent);
1805#endif
1806
1807
1808 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
1809
1810 pm_runtime_disable(&adap->dev);
1811
1812 i2c_host_notify_irq_teardown(adap);
1813
1814
1815
1816
1817
1818
1819
1820
1821 init_completion(&adap->dev_released);
1822 device_unregister(&adap->dev);
1823 wait_for_completion(&adap->dev_released);
1824
1825
1826 mutex_lock(&core_lock);
1827 idr_remove(&i2c_adapter_idr, adap->nr);
1828 mutex_unlock(&core_lock);
1829
1830
1831
1832 memset(&adap->dev, 0, sizeof(adap->dev));
1833}
1834EXPORT_SYMBOL(i2c_del_adapter);
1835
1836static void devm_i2c_del_adapter(void *adapter)
1837{
1838 i2c_del_adapter(adapter);
1839}
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850int devm_i2c_add_adapter(struct device *dev, struct i2c_adapter *adapter)
1851{
1852 int ret;
1853
1854 ret = i2c_add_adapter(adapter);
1855 if (ret)
1856 return ret;
1857
1858 return devm_add_action_or_reset(dev, devm_i2c_del_adapter, adapter);
1859}
1860EXPORT_SYMBOL_GPL(devm_i2c_add_adapter);
1861
1862static void i2c_parse_timing(struct device *dev, char *prop_name, u32 *cur_val_p,
1863 u32 def_val, bool use_def)
1864{
1865 int ret;
1866
1867 ret = device_property_read_u32(dev, prop_name, cur_val_p);
1868 if (ret && use_def)
1869 *cur_val_p = def_val;
1870
1871 dev_dbg(dev, "%s: %u\n", prop_name, *cur_val_p);
1872}
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults)
1891{
1892 bool u = use_defaults;
1893 u32 d;
1894
1895 i2c_parse_timing(dev, "clock-frequency", &t->bus_freq_hz,
1896 I2C_MAX_STANDARD_MODE_FREQ, u);
1897
1898 d = t->bus_freq_hz <= I2C_MAX_STANDARD_MODE_FREQ ? 1000 :
1899 t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ ? 300 : 120;
1900 i2c_parse_timing(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns, d, u);
1901
1902 d = t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ ? 300 : 120;
1903 i2c_parse_timing(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns, d, u);
1904
1905 i2c_parse_timing(dev, "i2c-scl-internal-delay-ns",
1906 &t->scl_int_delay_ns, 0, u);
1907 i2c_parse_timing(dev, "i2c-sda-falling-time-ns", &t->sda_fall_ns,
1908 t->scl_fall_ns, u);
1909 i2c_parse_timing(dev, "i2c-sda-hold-time-ns", &t->sda_hold_ns, 0, u);
1910 i2c_parse_timing(dev, "i2c-digital-filter-width-ns",
1911 &t->digital_filter_width_ns, 0, u);
1912 i2c_parse_timing(dev, "i2c-analog-filter-cutoff-frequency",
1913 &t->analog_filter_cutoff_freq_hz, 0, u);
1914}
1915EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
1916
1917
1918
1919int i2c_for_each_dev(void *data, int (*fn)(struct device *dev, void *data))
1920{
1921 int res;
1922
1923 mutex_lock(&core_lock);
1924 res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
1925 mutex_unlock(&core_lock);
1926
1927 return res;
1928}
1929EXPORT_SYMBOL_GPL(i2c_for_each_dev);
1930
1931static int __process_new_driver(struct device *dev, void *data)
1932{
1933 if (dev->type != &i2c_adapter_type)
1934 return 0;
1935 return i2c_do_add_adapter(data, to_i2c_adapter(dev));
1936}
1937
1938
1939
1940
1941
1942
1943int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
1944{
1945 int res;
1946
1947
1948 if (WARN_ON(!is_registered))
1949 return -EAGAIN;
1950
1951
1952 driver->driver.owner = owner;
1953 driver->driver.bus = &i2c_bus_type;
1954 INIT_LIST_HEAD(&driver->clients);
1955
1956
1957
1958
1959 res = driver_register(&driver->driver);
1960 if (res)
1961 return res;
1962
1963 pr_debug("driver [%s] registered\n", driver->driver.name);
1964
1965
1966 i2c_for_each_dev(driver, __process_new_driver);
1967
1968 return 0;
1969}
1970EXPORT_SYMBOL(i2c_register_driver);
1971
1972static int __process_removed_driver(struct device *dev, void *data)
1973{
1974 if (dev->type == &i2c_adapter_type)
1975 i2c_do_del_adapter(data, to_i2c_adapter(dev));
1976 return 0;
1977}
1978
1979
1980
1981
1982
1983
1984void i2c_del_driver(struct i2c_driver *driver)
1985{
1986 i2c_for_each_dev(driver, __process_removed_driver);
1987
1988 driver_unregister(&driver->driver);
1989 pr_debug("driver [%s] unregistered\n", driver->driver.name);
1990}
1991EXPORT_SYMBOL(i2c_del_driver);
1992
1993
1994
1995struct i2c_cmd_arg {
1996 unsigned cmd;
1997 void *arg;
1998};
1999
2000static int i2c_cmd(struct device *dev, void *_arg)
2001{
2002 struct i2c_client *client = i2c_verify_client(dev);
2003 struct i2c_cmd_arg *arg = _arg;
2004 struct i2c_driver *driver;
2005
2006 if (!client || !client->dev.driver)
2007 return 0;
2008
2009 driver = to_i2c_driver(client->dev.driver);
2010 if (driver->command)
2011 driver->command(client, arg->cmd, arg->arg);
2012 return 0;
2013}
2014
2015void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
2016{
2017 struct i2c_cmd_arg cmd_arg;
2018
2019 cmd_arg.cmd = cmd;
2020 cmd_arg.arg = arg;
2021 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
2022}
2023EXPORT_SYMBOL(i2c_clients_command);
2024
2025static int __init i2c_init(void)
2026{
2027 int retval;
2028
2029 retval = of_alias_get_highest_id("i2c");
2030
2031 down_write(&__i2c_board_lock);
2032 if (retval >= __i2c_first_dynamic_bus_num)
2033 __i2c_first_dynamic_bus_num = retval + 1;
2034 up_write(&__i2c_board_lock);
2035
2036 retval = bus_register(&i2c_bus_type);
2037 if (retval)
2038 return retval;
2039
2040 is_registered = true;
2041
2042#ifdef CONFIG_I2C_COMPAT
2043 i2c_adapter_compat_class = class_compat_register("i2c-adapter");
2044 if (!i2c_adapter_compat_class) {
2045 retval = -ENOMEM;
2046 goto bus_err;
2047 }
2048#endif
2049 retval = i2c_add_driver(&dummy_driver);
2050 if (retval)
2051 goto class_err;
2052
2053 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2054 WARN_ON(of_reconfig_notifier_register(&i2c_of_notifier));
2055 if (IS_ENABLED(CONFIG_ACPI))
2056 WARN_ON(acpi_reconfig_notifier_register(&i2c_acpi_notifier));
2057
2058 return 0;
2059
2060class_err:
2061#ifdef CONFIG_I2C_COMPAT
2062 class_compat_unregister(i2c_adapter_compat_class);
2063bus_err:
2064#endif
2065 is_registered = false;
2066 bus_unregister(&i2c_bus_type);
2067 return retval;
2068}
2069
2070static void __exit i2c_exit(void)
2071{
2072 if (IS_ENABLED(CONFIG_ACPI))
2073 WARN_ON(acpi_reconfig_notifier_unregister(&i2c_acpi_notifier));
2074 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2075 WARN_ON(of_reconfig_notifier_unregister(&i2c_of_notifier));
2076 i2c_del_driver(&dummy_driver);
2077#ifdef CONFIG_I2C_COMPAT
2078 class_compat_unregister(i2c_adapter_compat_class);
2079#endif
2080 bus_unregister(&i2c_bus_type);
2081 tracepoint_synchronize_unregister();
2082}
2083
2084
2085
2086
2087postcore_initcall(i2c_init);
2088module_exit(i2c_exit);
2089
2090
2091
2092
2093
2094
2095
2096#define i2c_quirk_exceeded(val, quirk) ((quirk) && ((val) > (quirk)))
2097
2098static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg)
2099{
2100 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n",
2101 err_msg, msg->addr, msg->len,
2102 msg->flags & I2C_M_RD ? "read" : "write");
2103 return -EOPNOTSUPP;
2104}
2105
2106static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2107{
2108 const struct i2c_adapter_quirks *q = adap->quirks;
2109 int max_num = q->max_num_msgs, i;
2110 bool do_len_check = true;
2111
2112 if (q->flags & I2C_AQ_COMB) {
2113 max_num = 2;
2114
2115
2116 if (num == 2) {
2117 if (q->flags & I2C_AQ_COMB_WRITE_FIRST && msgs[0].flags & I2C_M_RD)
2118 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write");
2119
2120 if (q->flags & I2C_AQ_COMB_READ_SECOND && !(msgs[1].flags & I2C_M_RD))
2121 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read");
2122
2123 if (q->flags & I2C_AQ_COMB_SAME_ADDR && msgs[0].addr != msgs[1].addr)
2124 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr");
2125
2126 if (i2c_quirk_exceeded(msgs[0].len, q->max_comb_1st_msg_len))
2127 return i2c_quirk_error(adap, &msgs[0], "msg too long");
2128
2129 if (i2c_quirk_exceeded(msgs[1].len, q->max_comb_2nd_msg_len))
2130 return i2c_quirk_error(adap, &msgs[1], "msg too long");
2131
2132 do_len_check = false;
2133 }
2134 }
2135
2136 if (i2c_quirk_exceeded(num, max_num))
2137 return i2c_quirk_error(adap, &msgs[0], "too many messages");
2138
2139 for (i = 0; i < num; i++) {
2140 u16 len = msgs[i].len;
2141
2142 if (msgs[i].flags & I2C_M_RD) {
2143 if (do_len_check && i2c_quirk_exceeded(len, q->max_read_len))
2144 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2145
2146 if (q->flags & I2C_AQ_NO_ZERO_LEN_READ && len == 0)
2147 return i2c_quirk_error(adap, &msgs[i], "no zero length");
2148 } else {
2149 if (do_len_check && i2c_quirk_exceeded(len, q->max_write_len))
2150 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2151
2152 if (q->flags & I2C_AQ_NO_ZERO_LEN_WRITE && len == 0)
2153 return i2c_quirk_error(adap, &msgs[i], "no zero length");
2154 }
2155 }
2156
2157 return 0;
2158}
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2173{
2174 unsigned long orig_jiffies;
2175 int ret, try;
2176
2177 if (WARN_ON(!msgs || num < 1))
2178 return -EINVAL;
2179
2180 ret = __i2c_check_suspended(adap);
2181 if (ret)
2182 return ret;
2183
2184 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num))
2185 return -EOPNOTSUPP;
2186
2187
2188
2189
2190
2191
2192 if (static_branch_unlikely(&i2c_trace_msg_key)) {
2193 int i;
2194 for (i = 0; i < num; i++)
2195 if (msgs[i].flags & I2C_M_RD)
2196 trace_i2c_read(adap, &msgs[i], i);
2197 else
2198 trace_i2c_write(adap, &msgs[i], i);
2199 }
2200
2201
2202 orig_jiffies = jiffies;
2203 for (ret = 0, try = 0; try <= adap->retries; try++) {
2204 if (i2c_in_atomic_xfer_mode() && adap->algo->master_xfer_atomic)
2205 ret = adap->algo->master_xfer_atomic(adap, msgs, num);
2206 else
2207 ret = adap->algo->master_xfer(adap, msgs, num);
2208
2209 if (ret != -EAGAIN)
2210 break;
2211 if (time_after(jiffies, orig_jiffies + adap->timeout))
2212 break;
2213 }
2214
2215 if (static_branch_unlikely(&i2c_trace_msg_key)) {
2216 int i;
2217 for (i = 0; i < ret; i++)
2218 if (msgs[i].flags & I2C_M_RD)
2219 trace_i2c_reply(adap, &msgs[i], i);
2220 trace_i2c_result(adap, num, ret);
2221 }
2222
2223 return ret;
2224}
2225EXPORT_SYMBOL(__i2c_transfer);
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2240{
2241 int ret;
2242
2243 if (!adap->algo->master_xfer) {
2244 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
2245 return -EOPNOTSUPP;
2246 }
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264 ret = __i2c_lock_bus_helper(adap);
2265 if (ret)
2266 return ret;
2267
2268 ret = __i2c_transfer(adap, msgs, num);
2269 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
2270
2271 return ret;
2272}
2273EXPORT_SYMBOL(i2c_transfer);
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285int i2c_transfer_buffer_flags(const struct i2c_client *client, char *buf,
2286 int count, u16 flags)
2287{
2288 int ret;
2289 struct i2c_msg msg = {
2290 .addr = client->addr,
2291 .flags = flags | (client->flags & I2C_M_TEN),
2292 .len = count,
2293 .buf = buf,
2294 };
2295
2296 ret = i2c_transfer(client->adapter, &msg, 1);
2297
2298
2299
2300
2301
2302 return (ret == 1) ? count : ret;
2303}
2304EXPORT_SYMBOL(i2c_transfer_buffer_flags);
2305
2306
2307
2308
2309
2310
2311
2312
2313int i2c_get_device_id(const struct i2c_client *client,
2314 struct i2c_device_identity *id)
2315{
2316 struct i2c_adapter *adap = client->adapter;
2317 union i2c_smbus_data raw_id;
2318 int ret;
2319
2320 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_I2C_BLOCK))
2321 return -EOPNOTSUPP;
2322
2323 raw_id.block[0] = 3;
2324 ret = i2c_smbus_xfer(adap, I2C_ADDR_DEVICE_ID, 0,
2325 I2C_SMBUS_READ, client->addr << 1,
2326 I2C_SMBUS_I2C_BLOCK_DATA, &raw_id);
2327 if (ret)
2328 return ret;
2329
2330 id->manufacturer_id = (raw_id.block[1] << 4) | (raw_id.block[2] >> 4);
2331 id->part_id = ((raw_id.block[2] & 0xf) << 5) | (raw_id.block[3] >> 3);
2332 id->die_revision = raw_id.block[3] & 0x7;
2333 return 0;
2334}
2335EXPORT_SYMBOL_GPL(i2c_get_device_id);
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
2356{
2357 int err;
2358 union i2c_smbus_data dummy;
2359
2360#ifdef CONFIG_X86
2361 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
2362 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
2363 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2364 I2C_SMBUS_BYTE_DATA, &dummy);
2365 else
2366#endif
2367 if (!((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50)
2368 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
2369 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
2370 I2C_SMBUS_QUICK, NULL);
2371 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
2372 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2373 I2C_SMBUS_BYTE, &dummy);
2374 else {
2375 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n",
2376 addr);
2377 err = -EOPNOTSUPP;
2378 }
2379
2380 return err >= 0;
2381}
2382
2383static int i2c_detect_address(struct i2c_client *temp_client,
2384 struct i2c_driver *driver)
2385{
2386 struct i2c_board_info info;
2387 struct i2c_adapter *adapter = temp_client->adapter;
2388 int addr = temp_client->addr;
2389 int err;
2390
2391
2392 err = i2c_check_7bit_addr_validity_strict(addr);
2393 if (err) {
2394 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
2395 addr);
2396 return err;
2397 }
2398
2399
2400 if (i2c_check_addr_busy(adapter, addr))
2401 return 0;
2402
2403
2404 if (!i2c_default_probe(adapter, addr))
2405 return 0;
2406
2407
2408 memset(&info, 0, sizeof(struct i2c_board_info));
2409 info.addr = addr;
2410 err = driver->detect(temp_client, &info);
2411 if (err) {
2412
2413
2414 return err == -ENODEV ? 0 : err;
2415 }
2416
2417
2418 if (info.type[0] == '\0') {
2419 dev_err(&adapter->dev,
2420 "%s detection function provided no name for 0x%x\n",
2421 driver->driver.name, addr);
2422 } else {
2423 struct i2c_client *client;
2424
2425
2426 if (adapter->class & I2C_CLASS_DEPRECATED)
2427 dev_warn(&adapter->dev,
2428 "This adapter will soon drop class based instantiation of devices. "
2429 "Please make sure client 0x%02x gets instantiated by other means. "
2430 "Check 'Documentation/i2c/instantiating-devices.rst' for details.\n",
2431 info.addr);
2432
2433 dev_dbg(&adapter->dev, "Creating %s at 0x%02x\n",
2434 info.type, info.addr);
2435 client = i2c_new_client_device(adapter, &info);
2436 if (!IS_ERR(client))
2437 list_add_tail(&client->detected, &driver->clients);
2438 else
2439 dev_err(&adapter->dev, "Failed creating %s at 0x%02x\n",
2440 info.type, info.addr);
2441 }
2442 return 0;
2443}
2444
2445static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
2446{
2447 const unsigned short *address_list;
2448 struct i2c_client *temp_client;
2449 int i, err = 0;
2450
2451 address_list = driver->address_list;
2452 if (!driver->detect || !address_list)
2453 return 0;
2454
2455
2456 if (adapter->class == I2C_CLASS_DEPRECATED) {
2457 dev_dbg(&adapter->dev,
2458 "This adapter dropped support for I2C classes and won't auto-detect %s devices anymore. "
2459 "If you need it, check 'Documentation/i2c/instantiating-devices.rst' for alternatives.\n",
2460 driver->driver.name);
2461 return 0;
2462 }
2463
2464
2465 if (!(adapter->class & driver->class))
2466 return 0;
2467
2468
2469 temp_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
2470 if (!temp_client)
2471 return -ENOMEM;
2472 temp_client->adapter = adapter;
2473
2474 for (i = 0; address_list[i] != I2C_CLIENT_END; i += 1) {
2475 dev_dbg(&adapter->dev,
2476 "found normal entry for adapter %d, addr 0x%02x\n",
2477 i2c_adapter_id(adapter), address_list[i]);
2478 temp_client->addr = address_list[i];
2479 err = i2c_detect_address(temp_client, driver);
2480 if (unlikely(err))
2481 break;
2482 }
2483
2484 kfree(temp_client);
2485 return err;
2486}
2487
2488int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr)
2489{
2490 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2491 I2C_SMBUS_QUICK, NULL) >= 0;
2492}
2493EXPORT_SYMBOL_GPL(i2c_probe_func_quick_read);
2494
2495struct i2c_client *
2496i2c_new_scanned_device(struct i2c_adapter *adap,
2497 struct i2c_board_info *info,
2498 unsigned short const *addr_list,
2499 int (*probe)(struct i2c_adapter *adap, unsigned short addr))
2500{
2501 int i;
2502
2503 if (!probe)
2504 probe = i2c_default_probe;
2505
2506 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
2507
2508 if (i2c_check_7bit_addr_validity_strict(addr_list[i]) < 0) {
2509 dev_warn(&adap->dev, "Invalid 7-bit address 0x%02x\n",
2510 addr_list[i]);
2511 continue;
2512 }
2513
2514
2515 if (i2c_check_addr_busy(adap, addr_list[i])) {
2516 dev_dbg(&adap->dev,
2517 "Address 0x%02x already in use, not probing\n",
2518 addr_list[i]);
2519 continue;
2520 }
2521
2522
2523 if (probe(adap, addr_list[i]))
2524 break;
2525 }
2526
2527 if (addr_list[i] == I2C_CLIENT_END) {
2528 dev_dbg(&adap->dev, "Probing failed, no device found\n");
2529 return ERR_PTR(-ENODEV);
2530 }
2531
2532 info->addr = addr_list[i];
2533 return i2c_new_client_device(adap, info);
2534}
2535EXPORT_SYMBOL_GPL(i2c_new_scanned_device);
2536
2537struct i2c_adapter *i2c_get_adapter(int nr)
2538{
2539 struct i2c_adapter *adapter;
2540
2541 mutex_lock(&core_lock);
2542 adapter = idr_find(&i2c_adapter_idr, nr);
2543 if (!adapter)
2544 goto exit;
2545
2546 if (try_module_get(adapter->owner))
2547 get_device(&adapter->dev);
2548 else
2549 adapter = NULL;
2550
2551 exit:
2552 mutex_unlock(&core_lock);
2553 return adapter;
2554}
2555EXPORT_SYMBOL(i2c_get_adapter);
2556
2557void i2c_put_adapter(struct i2c_adapter *adap)
2558{
2559 if (!adap)
2560 return;
2561
2562 put_device(&adap->dev);
2563 module_put(adap->owner);
2564}
2565EXPORT_SYMBOL(i2c_put_adapter);
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579u8 *i2c_get_dma_safe_msg_buf(struct i2c_msg *msg, unsigned int threshold)
2580{
2581
2582 if (!threshold)
2583 pr_debug("DMA buffer for addr=0x%02x with length 0 is bogus\n",
2584 msg->addr);
2585 if (msg->len < threshold || msg->len == 0)
2586 return NULL;
2587
2588 if (msg->flags & I2C_M_DMA_SAFE)
2589 return msg->buf;
2590
2591 pr_debug("using bounce buffer for addr=0x%02x, len=%d\n",
2592 msg->addr, msg->len);
2593
2594 if (msg->flags & I2C_M_RD)
2595 return kzalloc(msg->len, GFP_KERNEL);
2596 else
2597 return kmemdup(msg->buf, msg->len, GFP_KERNEL);
2598}
2599EXPORT_SYMBOL_GPL(i2c_get_dma_safe_msg_buf);
2600
2601
2602
2603
2604
2605
2606
2607void i2c_put_dma_safe_msg_buf(u8 *buf, struct i2c_msg *msg, bool xferred)
2608{
2609 if (!buf || buf == msg->buf)
2610 return;
2611
2612 if (xferred && msg->flags & I2C_M_RD)
2613 memcpy(msg->buf, buf, msg->len);
2614
2615 kfree(buf);
2616}
2617EXPORT_SYMBOL_GPL(i2c_put_dma_safe_msg_buf);
2618
2619MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
2620MODULE_DESCRIPTION("I2C-Bus main module");
2621MODULE_LICENSE("GPL");
2622