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 int 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 return 0;
637}
638
639#ifdef CONFIG_PM_SLEEP
640static int i2c_resume_early(struct device *dev)
641{
642 struct i2c_client *client = i2c_verify_client(dev);
643 int err;
644
645 if (!client)
646 return 0;
647
648 if (pm_runtime_status_suspended(&client->dev) &&
649 client->adapter->bus_regulator) {
650 err = regulator_enable(client->adapter->bus_regulator);
651 if (err)
652 return err;
653 }
654
655 return pm_generic_resume_early(&client->dev);
656}
657
658static int i2c_suspend_late(struct device *dev)
659{
660 struct i2c_client *client = i2c_verify_client(dev);
661 int err;
662
663 if (!client)
664 return 0;
665
666 err = pm_generic_suspend_late(&client->dev);
667 if (err)
668 return err;
669
670 if (!pm_runtime_status_suspended(&client->dev) &&
671 client->adapter->bus_regulator)
672 return regulator_disable(client->adapter->bus_regulator);
673
674 return 0;
675}
676#endif
677
678#ifdef CONFIG_PM
679static int i2c_runtime_resume(struct device *dev)
680{
681 struct i2c_client *client = i2c_verify_client(dev);
682 int err;
683
684 if (!client)
685 return 0;
686
687 if (client->adapter->bus_regulator) {
688 err = regulator_enable(client->adapter->bus_regulator);
689 if (err)
690 return err;
691 }
692
693 return pm_generic_runtime_resume(&client->dev);
694}
695
696static int i2c_runtime_suspend(struct device *dev)
697{
698 struct i2c_client *client = i2c_verify_client(dev);
699 int err;
700
701 if (!client)
702 return 0;
703
704 err = pm_generic_runtime_suspend(&client->dev);
705 if (err)
706 return err;
707
708 if (client->adapter->bus_regulator)
709 return regulator_disable(client->adapter->bus_regulator);
710 return 0;
711}
712#endif
713
714static const struct dev_pm_ops i2c_device_pm = {
715 SET_LATE_SYSTEM_SLEEP_PM_OPS(i2c_suspend_late, i2c_resume_early)
716 SET_RUNTIME_PM_OPS(i2c_runtime_suspend, i2c_runtime_resume, NULL)
717};
718
719static void i2c_device_shutdown(struct device *dev)
720{
721 struct i2c_client *client = i2c_verify_client(dev);
722 struct i2c_driver *driver;
723
724 if (!client || !dev->driver)
725 return;
726 driver = to_i2c_driver(dev->driver);
727 if (driver->shutdown)
728 driver->shutdown(client);
729 else if (client->irq > 0)
730 disable_irq(client->irq);
731}
732
733static void i2c_client_dev_release(struct device *dev)
734{
735 kfree(to_i2c_client(dev));
736}
737
738static ssize_t
739name_show(struct device *dev, struct device_attribute *attr, char *buf)
740{
741 return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
742 to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
743}
744static DEVICE_ATTR_RO(name);
745
746static ssize_t
747modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
748{
749 struct i2c_client *client = to_i2c_client(dev);
750 int len;
751
752 len = of_device_modalias(dev, buf, PAGE_SIZE);
753 if (len != -ENODEV)
754 return len;
755
756 len = acpi_device_modalias(dev, buf, PAGE_SIZE - 1);
757 if (len != -ENODEV)
758 return len;
759
760 return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
761}
762static DEVICE_ATTR_RO(modalias);
763
764static struct attribute *i2c_dev_attrs[] = {
765 &dev_attr_name.attr,
766
767 &dev_attr_modalias.attr,
768 NULL
769};
770ATTRIBUTE_GROUPS(i2c_dev);
771
772struct bus_type i2c_bus_type = {
773 .name = "i2c",
774 .match = i2c_device_match,
775 .probe = i2c_device_probe,
776 .remove = i2c_device_remove,
777 .shutdown = i2c_device_shutdown,
778 .pm = &i2c_device_pm,
779};
780EXPORT_SYMBOL_GPL(i2c_bus_type);
781
782struct device_type i2c_client_type = {
783 .groups = i2c_dev_groups,
784 .uevent = i2c_device_uevent,
785 .release = i2c_client_dev_release,
786};
787EXPORT_SYMBOL_GPL(i2c_client_type);
788
789
790
791
792
793
794
795
796
797
798
799struct i2c_client *i2c_verify_client(struct device *dev)
800{
801 return (dev->type == &i2c_client_type)
802 ? to_i2c_client(dev)
803 : NULL;
804}
805EXPORT_SYMBOL(i2c_verify_client);
806
807
808
809static unsigned short i2c_encode_flags_to_addr(struct i2c_client *client)
810{
811 unsigned short addr = client->addr;
812
813
814 if (client->flags & I2C_CLIENT_TEN)
815 addr |= I2C_ADDR_OFFSET_TEN_BIT;
816
817 if (client->flags & I2C_CLIENT_SLAVE)
818 addr |= I2C_ADDR_OFFSET_SLAVE;
819
820 return addr;
821}
822
823
824
825static int i2c_check_addr_validity(unsigned int addr, unsigned short flags)
826{
827 if (flags & I2C_CLIENT_TEN) {
828
829 if (addr > 0x3ff)
830 return -EINVAL;
831 } else {
832
833 if (addr == 0x00 || addr > 0x7f)
834 return -EINVAL;
835 }
836 return 0;
837}
838
839
840
841
842
843int i2c_check_7bit_addr_validity_strict(unsigned short addr)
844{
845
846
847
848
849
850
851
852
853
854
855 if (addr < 0x08 || addr > 0x77)
856 return -EINVAL;
857 return 0;
858}
859
860static int __i2c_check_addr_busy(struct device *dev, void *addrp)
861{
862 struct i2c_client *client = i2c_verify_client(dev);
863 int addr = *(int *)addrp;
864
865 if (client && i2c_encode_flags_to_addr(client) == addr)
866 return -EBUSY;
867 return 0;
868}
869
870
871static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
872{
873 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
874 int result;
875
876 result = device_for_each_child(&adapter->dev, &addr,
877 __i2c_check_addr_busy);
878
879 if (!result && parent)
880 result = i2c_check_mux_parents(parent, addr);
881
882 return result;
883}
884
885
886static int i2c_check_mux_children(struct device *dev, void *addrp)
887{
888 int result;
889
890 if (dev->type == &i2c_adapter_type)
891 result = device_for_each_child(dev, addrp,
892 i2c_check_mux_children);
893 else
894 result = __i2c_check_addr_busy(dev, addrp);
895
896 return result;
897}
898
899static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
900{
901 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
902 int result = 0;
903
904 if (parent)
905 result = i2c_check_mux_parents(parent, addr);
906
907 if (!result)
908 result = device_for_each_child(&adapter->dev, &addr,
909 i2c_check_mux_children);
910
911 return result;
912}
913
914
915
916
917
918
919
920static void i2c_adapter_lock_bus(struct i2c_adapter *adapter,
921 unsigned int flags)
922{
923 rt_mutex_lock_nested(&adapter->bus_lock, i2c_adapter_depth(adapter));
924}
925
926
927
928
929
930
931
932static int i2c_adapter_trylock_bus(struct i2c_adapter *adapter,
933 unsigned int flags)
934{
935 return rt_mutex_trylock(&adapter->bus_lock);
936}
937
938
939
940
941
942
943
944static void i2c_adapter_unlock_bus(struct i2c_adapter *adapter,
945 unsigned int flags)
946{
947 rt_mutex_unlock(&adapter->bus_lock);
948}
949
950static void i2c_dev_set_name(struct i2c_adapter *adap,
951 struct i2c_client *client,
952 struct i2c_board_info const *info)
953{
954 struct acpi_device *adev = ACPI_COMPANION(&client->dev);
955
956 if (info && info->dev_name) {
957 dev_set_name(&client->dev, "i2c-%s", info->dev_name);
958 return;
959 }
960
961 if (adev) {
962 dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
963 return;
964 }
965
966 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
967 i2c_encode_flags_to_addr(client));
968}
969
970int i2c_dev_irq_from_resources(const struct resource *resources,
971 unsigned int num_resources)
972{
973 struct irq_data *irqd;
974 int i;
975
976 for (i = 0; i < num_resources; i++) {
977 const struct resource *r = &resources[i];
978
979 if (resource_type(r) != IORESOURCE_IRQ)
980 continue;
981
982 if (r->flags & IORESOURCE_BITS) {
983 irqd = irq_get_irq_data(r->start);
984 if (!irqd)
985 break;
986
987 irqd_set_trigger_type(irqd, r->flags & IORESOURCE_BITS);
988 }
989
990 return r->start;
991 }
992
993 return 0;
994}
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012struct i2c_client *
1013i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
1014{
1015 struct i2c_client *client;
1016 int status;
1017
1018 client = kzalloc(sizeof *client, GFP_KERNEL);
1019 if (!client)
1020 return ERR_PTR(-ENOMEM);
1021
1022 client->adapter = adap;
1023
1024 client->dev.platform_data = info->platform_data;
1025 client->flags = info->flags;
1026 client->addr = info->addr;
1027
1028 client->init_irq = info->irq;
1029 if (!client->init_irq)
1030 client->init_irq = i2c_dev_irq_from_resources(info->resources,
1031 info->num_resources);
1032
1033 strlcpy(client->name, info->type, sizeof(client->name));
1034
1035 status = i2c_check_addr_validity(client->addr, client->flags);
1036 if (status) {
1037 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
1038 client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
1039 goto out_err_silent;
1040 }
1041
1042
1043 status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client));
1044 if (status)
1045 goto out_err;
1046
1047 client->dev.parent = &client->adapter->dev;
1048 client->dev.bus = &i2c_bus_type;
1049 client->dev.type = &i2c_client_type;
1050 client->dev.of_node = of_node_get(info->of_node);
1051 client->dev.fwnode = info->fwnode;
1052
1053 i2c_dev_set_name(adap, client, info);
1054
1055 if (info->swnode) {
1056 status = device_add_software_node(&client->dev, info->swnode);
1057 if (status) {
1058 dev_err(&adap->dev,
1059 "Failed to add software node to client %s: %d\n",
1060 client->name, status);
1061 goto out_err_put_of_node;
1062 }
1063 }
1064
1065 status = device_register(&client->dev);
1066 if (status)
1067 goto out_remove_swnode;
1068
1069 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
1070 client->name, dev_name(&client->dev));
1071
1072 return client;
1073
1074out_remove_swnode:
1075 device_remove_software_node(&client->dev);
1076out_err_put_of_node:
1077 of_node_put(info->of_node);
1078out_err:
1079 dev_err(&adap->dev,
1080 "Failed to register i2c client %s at 0x%02x (%d)\n",
1081 client->name, client->addr, status);
1082out_err_silent:
1083 kfree(client);
1084 return ERR_PTR(status);
1085}
1086EXPORT_SYMBOL_GPL(i2c_new_client_device);
1087
1088
1089
1090
1091
1092
1093void i2c_unregister_device(struct i2c_client *client)
1094{
1095 if (IS_ERR_OR_NULL(client))
1096 return;
1097
1098 if (client->dev.of_node) {
1099 of_node_clear_flag(client->dev.of_node, OF_POPULATED);
1100 of_node_put(client->dev.of_node);
1101 }
1102
1103 if (ACPI_COMPANION(&client->dev))
1104 acpi_device_clear_enumerated(ACPI_COMPANION(&client->dev));
1105 device_remove_software_node(&client->dev);
1106 device_unregister(&client->dev);
1107}
1108EXPORT_SYMBOL_GPL(i2c_unregister_device);
1109
1110
1111static const struct i2c_device_id dummy_id[] = {
1112 { "dummy", 0 },
1113 { },
1114};
1115
1116static int dummy_probe(struct i2c_client *client,
1117 const struct i2c_device_id *id)
1118{
1119 return 0;
1120}
1121
1122static int dummy_remove(struct i2c_client *client)
1123{
1124 return 0;
1125}
1126
1127static struct i2c_driver dummy_driver = {
1128 .driver.name = "dummy",
1129 .probe = dummy_probe,
1130 .remove = dummy_remove,
1131 .id_table = dummy_id,
1132};
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152struct i2c_client *i2c_new_dummy_device(struct i2c_adapter *adapter, u16 address)
1153{
1154 struct i2c_board_info info = {
1155 I2C_BOARD_INFO("dummy", address),
1156 };
1157
1158 return i2c_new_client_device(adapter, &info);
1159}
1160EXPORT_SYMBOL_GPL(i2c_new_dummy_device);
1161
1162static void devm_i2c_release_dummy(void *client)
1163{
1164 i2c_unregister_device(client);
1165}
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177struct i2c_client *devm_i2c_new_dummy_device(struct device *dev,
1178 struct i2c_adapter *adapter,
1179 u16 address)
1180{
1181 struct i2c_client *client;
1182 int ret;
1183
1184 client = i2c_new_dummy_device(adapter, address);
1185 if (IS_ERR(client))
1186 return client;
1187
1188 ret = devm_add_action_or_reset(dev, devm_i2c_release_dummy, client);
1189 if (ret)
1190 return ERR_PTR(ret);
1191
1192 return client;
1193}
1194EXPORT_SYMBOL_GPL(devm_i2c_new_dummy_device);
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218struct i2c_client *i2c_new_ancillary_device(struct i2c_client *client,
1219 const char *name,
1220 u16 default_addr)
1221{
1222 struct device_node *np = client->dev.of_node;
1223 u32 addr = default_addr;
1224 int i;
1225
1226 if (np) {
1227 i = of_property_match_string(np, "reg-names", name);
1228 if (i >= 0)
1229 of_property_read_u32_index(np, "reg", i, &addr);
1230 }
1231
1232 dev_dbg(&client->adapter->dev, "Address for %s : 0x%x\n", name, addr);
1233 return i2c_new_dummy_device(client->adapter, addr);
1234}
1235EXPORT_SYMBOL_GPL(i2c_new_ancillary_device);
1236
1237
1238
1239
1240
1241static void i2c_adapter_dev_release(struct device *dev)
1242{
1243 struct i2c_adapter *adap = to_i2c_adapter(dev);
1244 complete(&adap->dev_released);
1245}
1246
1247unsigned int i2c_adapter_depth(struct i2c_adapter *adapter)
1248{
1249 unsigned int depth = 0;
1250
1251 while ((adapter = i2c_parent_is_i2c_adapter(adapter)))
1252 depth++;
1253
1254 WARN_ONCE(depth >= MAX_LOCKDEP_SUBCLASSES,
1255 "adapter depth exceeds lockdep subclass limit\n");
1256
1257 return depth;
1258}
1259EXPORT_SYMBOL_GPL(i2c_adapter_depth);
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271static ssize_t
1272new_device_store(struct device *dev, struct device_attribute *attr,
1273 const char *buf, size_t count)
1274{
1275 struct i2c_adapter *adap = to_i2c_adapter(dev);
1276 struct i2c_board_info info;
1277 struct i2c_client *client;
1278 char *blank, end;
1279 int res;
1280
1281 memset(&info, 0, sizeof(struct i2c_board_info));
1282
1283 blank = strchr(buf, ' ');
1284 if (!blank) {
1285 dev_err(dev, "%s: Missing parameters\n", "new_device");
1286 return -EINVAL;
1287 }
1288 if (blank - buf > I2C_NAME_SIZE - 1) {
1289 dev_err(dev, "%s: Invalid device name\n", "new_device");
1290 return -EINVAL;
1291 }
1292 memcpy(info.type, buf, blank - buf);
1293
1294
1295 res = sscanf(++blank, "%hi%c", &info.addr, &end);
1296 if (res < 1) {
1297 dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
1298 return -EINVAL;
1299 }
1300 if (res > 1 && end != '\n') {
1301 dev_err(dev, "%s: Extra parameters\n", "new_device");
1302 return -EINVAL;
1303 }
1304
1305 if ((info.addr & I2C_ADDR_OFFSET_TEN_BIT) == I2C_ADDR_OFFSET_TEN_BIT) {
1306 info.addr &= ~I2C_ADDR_OFFSET_TEN_BIT;
1307 info.flags |= I2C_CLIENT_TEN;
1308 }
1309
1310 if (info.addr & I2C_ADDR_OFFSET_SLAVE) {
1311 info.addr &= ~I2C_ADDR_OFFSET_SLAVE;
1312 info.flags |= I2C_CLIENT_SLAVE;
1313 }
1314
1315 client = i2c_new_client_device(adap, &info);
1316 if (IS_ERR(client))
1317 return PTR_ERR(client);
1318
1319
1320 mutex_lock(&adap->userspace_clients_lock);
1321 list_add_tail(&client->detected, &adap->userspace_clients);
1322 mutex_unlock(&adap->userspace_clients_lock);
1323 dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
1324 info.type, info.addr);
1325
1326 return count;
1327}
1328static DEVICE_ATTR_WO(new_device);
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339static ssize_t
1340delete_device_store(struct device *dev, struct device_attribute *attr,
1341 const char *buf, size_t count)
1342{
1343 struct i2c_adapter *adap = to_i2c_adapter(dev);
1344 struct i2c_client *client, *next;
1345 unsigned short addr;
1346 char end;
1347 int res;
1348
1349
1350 res = sscanf(buf, "%hi%c", &addr, &end);
1351 if (res < 1) {
1352 dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
1353 return -EINVAL;
1354 }
1355 if (res > 1 && end != '\n') {
1356 dev_err(dev, "%s: Extra parameters\n", "delete_device");
1357 return -EINVAL;
1358 }
1359
1360
1361 res = -ENOENT;
1362 mutex_lock_nested(&adap->userspace_clients_lock,
1363 i2c_adapter_depth(adap));
1364 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1365 detected) {
1366 if (i2c_encode_flags_to_addr(client) == addr) {
1367 dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
1368 "delete_device", client->name, client->addr);
1369
1370 list_del(&client->detected);
1371 i2c_unregister_device(client);
1372 res = count;
1373 break;
1374 }
1375 }
1376 mutex_unlock(&adap->userspace_clients_lock);
1377
1378 if (res < 0)
1379 dev_err(dev, "%s: Can't find device in list\n",
1380 "delete_device");
1381 return res;
1382}
1383static DEVICE_ATTR_IGNORE_LOCKDEP(delete_device, S_IWUSR, NULL,
1384 delete_device_store);
1385
1386static struct attribute *i2c_adapter_attrs[] = {
1387 &dev_attr_name.attr,
1388 &dev_attr_new_device.attr,
1389 &dev_attr_delete_device.attr,
1390 NULL
1391};
1392ATTRIBUTE_GROUPS(i2c_adapter);
1393
1394struct device_type i2c_adapter_type = {
1395 .groups = i2c_adapter_groups,
1396 .release = i2c_adapter_dev_release,
1397};
1398EXPORT_SYMBOL_GPL(i2c_adapter_type);
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409struct i2c_adapter *i2c_verify_adapter(struct device *dev)
1410{
1411 return (dev->type == &i2c_adapter_type)
1412 ? to_i2c_adapter(dev)
1413 : NULL;
1414}
1415EXPORT_SYMBOL(i2c_verify_adapter);
1416
1417#ifdef CONFIG_I2C_COMPAT
1418static struct class_compat *i2c_adapter_compat_class;
1419#endif
1420
1421static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
1422{
1423 struct i2c_devinfo *devinfo;
1424
1425 down_read(&__i2c_board_lock);
1426 list_for_each_entry(devinfo, &__i2c_board_list, list) {
1427 if (devinfo->busnum == adapter->nr &&
1428 IS_ERR(i2c_new_client_device(adapter, &devinfo->board_info)))
1429 dev_err(&adapter->dev,
1430 "Can't create device at 0x%02x\n",
1431 devinfo->board_info.addr);
1432 }
1433 up_read(&__i2c_board_lock);
1434}
1435
1436static int i2c_do_add_adapter(struct i2c_driver *driver,
1437 struct i2c_adapter *adap)
1438{
1439
1440 i2c_detect(adap, driver);
1441
1442 return 0;
1443}
1444
1445static int __process_new_adapter(struct device_driver *d, void *data)
1446{
1447 return i2c_do_add_adapter(to_i2c_driver(d), data);
1448}
1449
1450static const struct i2c_lock_operations i2c_adapter_lock_ops = {
1451 .lock_bus = i2c_adapter_lock_bus,
1452 .trylock_bus = i2c_adapter_trylock_bus,
1453 .unlock_bus = i2c_adapter_unlock_bus,
1454};
1455
1456static void i2c_host_notify_irq_teardown(struct i2c_adapter *adap)
1457{
1458 struct irq_domain *domain = adap->host_notify_domain;
1459 irq_hw_number_t hwirq;
1460
1461 if (!domain)
1462 return;
1463
1464 for (hwirq = 0 ; hwirq < I2C_ADDR_7BITS_COUNT ; hwirq++)
1465 irq_dispose_mapping(irq_find_mapping(domain, hwirq));
1466
1467 irq_domain_remove(domain);
1468 adap->host_notify_domain = NULL;
1469}
1470
1471static int i2c_host_notify_irq_map(struct irq_domain *h,
1472 unsigned int virq,
1473 irq_hw_number_t hw_irq_num)
1474{
1475 irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq);
1476
1477 return 0;
1478}
1479
1480static const struct irq_domain_ops i2c_host_notify_irq_ops = {
1481 .map = i2c_host_notify_irq_map,
1482};
1483
1484static int i2c_setup_host_notify_irq_domain(struct i2c_adapter *adap)
1485{
1486 struct irq_domain *domain;
1487
1488 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_HOST_NOTIFY))
1489 return 0;
1490
1491 domain = irq_domain_create_linear(adap->dev.parent->fwnode,
1492 I2C_ADDR_7BITS_COUNT,
1493 &i2c_host_notify_irq_ops, adap);
1494 if (!domain)
1495 return -ENOMEM;
1496
1497 adap->host_notify_domain = domain;
1498
1499 return 0;
1500}
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr)
1513{
1514 int irq;
1515
1516 if (!adap)
1517 return -EINVAL;
1518
1519 irq = irq_find_mapping(adap->host_notify_domain, addr);
1520 if (irq <= 0)
1521 return -ENXIO;
1522
1523 generic_handle_irq(irq);
1524
1525 return 0;
1526}
1527EXPORT_SYMBOL_GPL(i2c_handle_smbus_host_notify);
1528
1529static int i2c_register_adapter(struct i2c_adapter *adap)
1530{
1531 int res = -EINVAL;
1532
1533
1534 if (WARN_ON(!is_registered)) {
1535 res = -EAGAIN;
1536 goto out_list;
1537 }
1538
1539
1540 if (WARN(!adap->name[0], "i2c adapter has no name"))
1541 goto out_list;
1542
1543 if (!adap->algo) {
1544 pr_err("adapter '%s': no algo supplied!\n", adap->name);
1545 goto out_list;
1546 }
1547
1548 if (!adap->lock_ops)
1549 adap->lock_ops = &i2c_adapter_lock_ops;
1550
1551 adap->locked_flags = 0;
1552 rt_mutex_init(&adap->bus_lock);
1553 rt_mutex_init(&adap->mux_lock);
1554 mutex_init(&adap->userspace_clients_lock);
1555 INIT_LIST_HEAD(&adap->userspace_clients);
1556
1557
1558 if (adap->timeout == 0)
1559 adap->timeout = HZ;
1560
1561
1562 res = i2c_setup_host_notify_irq_domain(adap);
1563 if (res) {
1564 pr_err("adapter '%s': can't create Host Notify IRQs (%d)\n",
1565 adap->name, res);
1566 goto out_list;
1567 }
1568
1569 dev_set_name(&adap->dev, "i2c-%d", adap->nr);
1570 adap->dev.bus = &i2c_bus_type;
1571 adap->dev.type = &i2c_adapter_type;
1572 res = device_register(&adap->dev);
1573 if (res) {
1574 pr_err("adapter '%s': can't register device (%d)\n", adap->name, res);
1575 goto out_list;
1576 }
1577
1578 res = of_i2c_setup_smbus_alert(adap);
1579 if (res)
1580 goto out_reg;
1581
1582 pm_runtime_no_callbacks(&adap->dev);
1583 pm_suspend_ignore_children(&adap->dev, true);
1584 pm_runtime_enable(&adap->dev);
1585
1586 res = i2c_init_recovery(adap);
1587 if (res == -EPROBE_DEFER)
1588 goto out_reg;
1589
1590 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
1591
1592#ifdef CONFIG_I2C_COMPAT
1593 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
1594 adap->dev.parent);
1595 if (res)
1596 dev_warn(&adap->dev,
1597 "Failed to create compatibility class link\n");
1598#endif
1599
1600
1601 of_i2c_register_devices(adap);
1602 i2c_acpi_install_space_handler(adap);
1603 i2c_acpi_register_devices(adap);
1604
1605 if (adap->nr < __i2c_first_dynamic_bus_num)
1606 i2c_scan_static_board_info(adap);
1607
1608
1609 mutex_lock(&core_lock);
1610 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
1611 mutex_unlock(&core_lock);
1612
1613 return 0;
1614
1615out_reg:
1616 init_completion(&adap->dev_released);
1617 device_unregister(&adap->dev);
1618 wait_for_completion(&adap->dev_released);
1619out_list:
1620 mutex_lock(&core_lock);
1621 idr_remove(&i2c_adapter_idr, adap->nr);
1622 mutex_unlock(&core_lock);
1623 return res;
1624}
1625
1626
1627
1628
1629
1630
1631
1632
1633static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)
1634{
1635 int id;
1636
1637 mutex_lock(&core_lock);
1638 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL);
1639 mutex_unlock(&core_lock);
1640 if (WARN(id < 0, "couldn't get idr"))
1641 return id == -ENOSPC ? -EBUSY : id;
1642
1643 return i2c_register_adapter(adap);
1644}
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660int i2c_add_adapter(struct i2c_adapter *adapter)
1661{
1662 struct device *dev = &adapter->dev;
1663 int id;
1664
1665 if (dev->of_node) {
1666 id = of_alias_get_id(dev->of_node, "i2c");
1667 if (id >= 0) {
1668 adapter->nr = id;
1669 return __i2c_add_numbered_adapter(adapter);
1670 }
1671 }
1672
1673 mutex_lock(&core_lock);
1674 id = idr_alloc(&i2c_adapter_idr, adapter,
1675 __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);
1676 mutex_unlock(&core_lock);
1677 if (WARN(id < 0, "couldn't get idr"))
1678 return id;
1679
1680 adapter->nr = id;
1681
1682 return i2c_register_adapter(adapter);
1683}
1684EXPORT_SYMBOL(i2c_add_adapter);
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709int i2c_add_numbered_adapter(struct i2c_adapter *adap)
1710{
1711 if (adap->nr == -1)
1712 return i2c_add_adapter(adap);
1713
1714 return __i2c_add_numbered_adapter(adap);
1715}
1716EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
1717
1718static void i2c_do_del_adapter(struct i2c_driver *driver,
1719 struct i2c_adapter *adapter)
1720{
1721 struct i2c_client *client, *_n;
1722
1723
1724
1725 list_for_each_entry_safe(client, _n, &driver->clients, detected) {
1726 if (client->adapter == adapter) {
1727 dev_dbg(&adapter->dev, "Removing %s at 0x%x\n",
1728 client->name, client->addr);
1729 list_del(&client->detected);
1730 i2c_unregister_device(client);
1731 }
1732 }
1733}
1734
1735static int __unregister_client(struct device *dev, void *dummy)
1736{
1737 struct i2c_client *client = i2c_verify_client(dev);
1738 if (client && strcmp(client->name, "dummy"))
1739 i2c_unregister_device(client);
1740 return 0;
1741}
1742
1743static int __unregister_dummy(struct device *dev, void *dummy)
1744{
1745 struct i2c_client *client = i2c_verify_client(dev);
1746 i2c_unregister_device(client);
1747 return 0;
1748}
1749
1750static int __process_removed_adapter(struct device_driver *d, void *data)
1751{
1752 i2c_do_del_adapter(to_i2c_driver(d), data);
1753 return 0;
1754}
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764void i2c_del_adapter(struct i2c_adapter *adap)
1765{
1766 struct i2c_adapter *found;
1767 struct i2c_client *client, *next;
1768
1769
1770 mutex_lock(&core_lock);
1771 found = idr_find(&i2c_adapter_idr, adap->nr);
1772 mutex_unlock(&core_lock);
1773 if (found != adap) {
1774 pr_debug("attempting to delete unregistered adapter [%s]\n", adap->name);
1775 return;
1776 }
1777
1778 i2c_acpi_remove_space_handler(adap);
1779
1780 mutex_lock(&core_lock);
1781 bus_for_each_drv(&i2c_bus_type, NULL, adap,
1782 __process_removed_adapter);
1783 mutex_unlock(&core_lock);
1784
1785
1786 mutex_lock_nested(&adap->userspace_clients_lock,
1787 i2c_adapter_depth(adap));
1788 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1789 detected) {
1790 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name,
1791 client->addr);
1792 list_del(&client->detected);
1793 i2c_unregister_device(client);
1794 }
1795 mutex_unlock(&adap->userspace_clients_lock);
1796
1797
1798
1799
1800
1801
1802 device_for_each_child(&adap->dev, NULL, __unregister_client);
1803 device_for_each_child(&adap->dev, NULL, __unregister_dummy);
1804
1805#ifdef CONFIG_I2C_COMPAT
1806 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
1807 adap->dev.parent);
1808#endif
1809
1810
1811 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
1812
1813 pm_runtime_disable(&adap->dev);
1814
1815 i2c_host_notify_irq_teardown(adap);
1816
1817
1818
1819
1820
1821
1822
1823
1824 init_completion(&adap->dev_released);
1825 device_unregister(&adap->dev);
1826 wait_for_completion(&adap->dev_released);
1827
1828
1829 mutex_lock(&core_lock);
1830 idr_remove(&i2c_adapter_idr, adap->nr);
1831 mutex_unlock(&core_lock);
1832
1833
1834
1835 memset(&adap->dev, 0, sizeof(adap->dev));
1836}
1837EXPORT_SYMBOL(i2c_del_adapter);
1838
1839static void devm_i2c_del_adapter(void *adapter)
1840{
1841 i2c_del_adapter(adapter);
1842}
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853int devm_i2c_add_adapter(struct device *dev, struct i2c_adapter *adapter)
1854{
1855 int ret;
1856
1857 ret = i2c_add_adapter(adapter);
1858 if (ret)
1859 return ret;
1860
1861 return devm_add_action_or_reset(dev, devm_i2c_del_adapter, adapter);
1862}
1863EXPORT_SYMBOL_GPL(devm_i2c_add_adapter);
1864
1865static void i2c_parse_timing(struct device *dev, char *prop_name, u32 *cur_val_p,
1866 u32 def_val, bool use_def)
1867{
1868 int ret;
1869
1870 ret = device_property_read_u32(dev, prop_name, cur_val_p);
1871 if (ret && use_def)
1872 *cur_val_p = def_val;
1873
1874 dev_dbg(dev, "%s: %u\n", prop_name, *cur_val_p);
1875}
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults)
1894{
1895 bool u = use_defaults;
1896 u32 d;
1897
1898 i2c_parse_timing(dev, "clock-frequency", &t->bus_freq_hz,
1899 I2C_MAX_STANDARD_MODE_FREQ, u);
1900
1901 d = t->bus_freq_hz <= I2C_MAX_STANDARD_MODE_FREQ ? 1000 :
1902 t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ ? 300 : 120;
1903 i2c_parse_timing(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns, d, u);
1904
1905 d = t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ ? 300 : 120;
1906 i2c_parse_timing(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns, d, u);
1907
1908 i2c_parse_timing(dev, "i2c-scl-internal-delay-ns",
1909 &t->scl_int_delay_ns, 0, u);
1910 i2c_parse_timing(dev, "i2c-sda-falling-time-ns", &t->sda_fall_ns,
1911 t->scl_fall_ns, u);
1912 i2c_parse_timing(dev, "i2c-sda-hold-time-ns", &t->sda_hold_ns, 0, u);
1913 i2c_parse_timing(dev, "i2c-digital-filter-width-ns",
1914 &t->digital_filter_width_ns, 0, u);
1915 i2c_parse_timing(dev, "i2c-analog-filter-cutoff-frequency",
1916 &t->analog_filter_cutoff_freq_hz, 0, u);
1917}
1918EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
1919
1920
1921
1922int i2c_for_each_dev(void *data, int (*fn)(struct device *dev, void *data))
1923{
1924 int res;
1925
1926 mutex_lock(&core_lock);
1927 res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
1928 mutex_unlock(&core_lock);
1929
1930 return res;
1931}
1932EXPORT_SYMBOL_GPL(i2c_for_each_dev);
1933
1934static int __process_new_driver(struct device *dev, void *data)
1935{
1936 if (dev->type != &i2c_adapter_type)
1937 return 0;
1938 return i2c_do_add_adapter(data, to_i2c_adapter(dev));
1939}
1940
1941
1942
1943
1944
1945
1946int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
1947{
1948 int res;
1949
1950
1951 if (WARN_ON(!is_registered))
1952 return -EAGAIN;
1953
1954
1955 driver->driver.owner = owner;
1956 driver->driver.bus = &i2c_bus_type;
1957 INIT_LIST_HEAD(&driver->clients);
1958
1959
1960
1961
1962 res = driver_register(&driver->driver);
1963 if (res)
1964 return res;
1965
1966 pr_debug("driver [%s] registered\n", driver->driver.name);
1967
1968
1969 i2c_for_each_dev(driver, __process_new_driver);
1970
1971 return 0;
1972}
1973EXPORT_SYMBOL(i2c_register_driver);
1974
1975static int __process_removed_driver(struct device *dev, void *data)
1976{
1977 if (dev->type == &i2c_adapter_type)
1978 i2c_do_del_adapter(data, to_i2c_adapter(dev));
1979 return 0;
1980}
1981
1982
1983
1984
1985
1986
1987void i2c_del_driver(struct i2c_driver *driver)
1988{
1989 i2c_for_each_dev(driver, __process_removed_driver);
1990
1991 driver_unregister(&driver->driver);
1992 pr_debug("driver [%s] unregistered\n", driver->driver.name);
1993}
1994EXPORT_SYMBOL(i2c_del_driver);
1995
1996
1997
1998struct i2c_cmd_arg {
1999 unsigned cmd;
2000 void *arg;
2001};
2002
2003static int i2c_cmd(struct device *dev, void *_arg)
2004{
2005 struct i2c_client *client = i2c_verify_client(dev);
2006 struct i2c_cmd_arg *arg = _arg;
2007 struct i2c_driver *driver;
2008
2009 if (!client || !client->dev.driver)
2010 return 0;
2011
2012 driver = to_i2c_driver(client->dev.driver);
2013 if (driver->command)
2014 driver->command(client, arg->cmd, arg->arg);
2015 return 0;
2016}
2017
2018void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
2019{
2020 struct i2c_cmd_arg cmd_arg;
2021
2022 cmd_arg.cmd = cmd;
2023 cmd_arg.arg = arg;
2024 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
2025}
2026EXPORT_SYMBOL(i2c_clients_command);
2027
2028static int __init i2c_init(void)
2029{
2030 int retval;
2031
2032 retval = of_alias_get_highest_id("i2c");
2033
2034 down_write(&__i2c_board_lock);
2035 if (retval >= __i2c_first_dynamic_bus_num)
2036 __i2c_first_dynamic_bus_num = retval + 1;
2037 up_write(&__i2c_board_lock);
2038
2039 retval = bus_register(&i2c_bus_type);
2040 if (retval)
2041 return retval;
2042
2043 is_registered = true;
2044
2045#ifdef CONFIG_I2C_COMPAT
2046 i2c_adapter_compat_class = class_compat_register("i2c-adapter");
2047 if (!i2c_adapter_compat_class) {
2048 retval = -ENOMEM;
2049 goto bus_err;
2050 }
2051#endif
2052 retval = i2c_add_driver(&dummy_driver);
2053 if (retval)
2054 goto class_err;
2055
2056 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2057 WARN_ON(of_reconfig_notifier_register(&i2c_of_notifier));
2058 if (IS_ENABLED(CONFIG_ACPI))
2059 WARN_ON(acpi_reconfig_notifier_register(&i2c_acpi_notifier));
2060
2061 return 0;
2062
2063class_err:
2064#ifdef CONFIG_I2C_COMPAT
2065 class_compat_unregister(i2c_adapter_compat_class);
2066bus_err:
2067#endif
2068 is_registered = false;
2069 bus_unregister(&i2c_bus_type);
2070 return retval;
2071}
2072
2073static void __exit i2c_exit(void)
2074{
2075 if (IS_ENABLED(CONFIG_ACPI))
2076 WARN_ON(acpi_reconfig_notifier_unregister(&i2c_acpi_notifier));
2077 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2078 WARN_ON(of_reconfig_notifier_unregister(&i2c_of_notifier));
2079 i2c_del_driver(&dummy_driver);
2080#ifdef CONFIG_I2C_COMPAT
2081 class_compat_unregister(i2c_adapter_compat_class);
2082#endif
2083 bus_unregister(&i2c_bus_type);
2084 tracepoint_synchronize_unregister();
2085}
2086
2087
2088
2089
2090postcore_initcall(i2c_init);
2091module_exit(i2c_exit);
2092
2093
2094
2095
2096
2097
2098
2099#define i2c_quirk_exceeded(val, quirk) ((quirk) && ((val) > (quirk)))
2100
2101static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg)
2102{
2103 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n",
2104 err_msg, msg->addr, msg->len,
2105 msg->flags & I2C_M_RD ? "read" : "write");
2106 return -EOPNOTSUPP;
2107}
2108
2109static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2110{
2111 const struct i2c_adapter_quirks *q = adap->quirks;
2112 int max_num = q->max_num_msgs, i;
2113 bool do_len_check = true;
2114
2115 if (q->flags & I2C_AQ_COMB) {
2116 max_num = 2;
2117
2118
2119 if (num == 2) {
2120 if (q->flags & I2C_AQ_COMB_WRITE_FIRST && msgs[0].flags & I2C_M_RD)
2121 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write");
2122
2123 if (q->flags & I2C_AQ_COMB_READ_SECOND && !(msgs[1].flags & I2C_M_RD))
2124 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read");
2125
2126 if (q->flags & I2C_AQ_COMB_SAME_ADDR && msgs[0].addr != msgs[1].addr)
2127 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr");
2128
2129 if (i2c_quirk_exceeded(msgs[0].len, q->max_comb_1st_msg_len))
2130 return i2c_quirk_error(adap, &msgs[0], "msg too long");
2131
2132 if (i2c_quirk_exceeded(msgs[1].len, q->max_comb_2nd_msg_len))
2133 return i2c_quirk_error(adap, &msgs[1], "msg too long");
2134
2135 do_len_check = false;
2136 }
2137 }
2138
2139 if (i2c_quirk_exceeded(num, max_num))
2140 return i2c_quirk_error(adap, &msgs[0], "too many messages");
2141
2142 for (i = 0; i < num; i++) {
2143 u16 len = msgs[i].len;
2144
2145 if (msgs[i].flags & I2C_M_RD) {
2146 if (do_len_check && i2c_quirk_exceeded(len, q->max_read_len))
2147 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2148
2149 if (q->flags & I2C_AQ_NO_ZERO_LEN_READ && len == 0)
2150 return i2c_quirk_error(adap, &msgs[i], "no zero length");
2151 } else {
2152 if (do_len_check && i2c_quirk_exceeded(len, q->max_write_len))
2153 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2154
2155 if (q->flags & I2C_AQ_NO_ZERO_LEN_WRITE && len == 0)
2156 return i2c_quirk_error(adap, &msgs[i], "no zero length");
2157 }
2158 }
2159
2160 return 0;
2161}
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2176{
2177 unsigned long orig_jiffies;
2178 int ret, try;
2179
2180 if (WARN_ON(!msgs || num < 1))
2181 return -EINVAL;
2182
2183 ret = __i2c_check_suspended(adap);
2184 if (ret)
2185 return ret;
2186
2187 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num))
2188 return -EOPNOTSUPP;
2189
2190
2191
2192
2193
2194
2195 if (static_branch_unlikely(&i2c_trace_msg_key)) {
2196 int i;
2197 for (i = 0; i < num; i++)
2198 if (msgs[i].flags & I2C_M_RD)
2199 trace_i2c_read(adap, &msgs[i], i);
2200 else
2201 trace_i2c_write(adap, &msgs[i], i);
2202 }
2203
2204
2205 orig_jiffies = jiffies;
2206 for (ret = 0, try = 0; try <= adap->retries; try++) {
2207 if (i2c_in_atomic_xfer_mode() && adap->algo->master_xfer_atomic)
2208 ret = adap->algo->master_xfer_atomic(adap, msgs, num);
2209 else
2210 ret = adap->algo->master_xfer(adap, msgs, num);
2211
2212 if (ret != -EAGAIN)
2213 break;
2214 if (time_after(jiffies, orig_jiffies + adap->timeout))
2215 break;
2216 }
2217
2218 if (static_branch_unlikely(&i2c_trace_msg_key)) {
2219 int i;
2220 for (i = 0; i < ret; i++)
2221 if (msgs[i].flags & I2C_M_RD)
2222 trace_i2c_reply(adap, &msgs[i], i);
2223 trace_i2c_result(adap, num, ret);
2224 }
2225
2226 return ret;
2227}
2228EXPORT_SYMBOL(__i2c_transfer);
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2243{
2244 int ret;
2245
2246 if (!adap->algo->master_xfer) {
2247 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
2248 return -EOPNOTSUPP;
2249 }
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267 ret = __i2c_lock_bus_helper(adap);
2268 if (ret)
2269 return ret;
2270
2271 ret = __i2c_transfer(adap, msgs, num);
2272 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
2273
2274 return ret;
2275}
2276EXPORT_SYMBOL(i2c_transfer);
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288int i2c_transfer_buffer_flags(const struct i2c_client *client, char *buf,
2289 int count, u16 flags)
2290{
2291 int ret;
2292 struct i2c_msg msg = {
2293 .addr = client->addr,
2294 .flags = flags | (client->flags & I2C_M_TEN),
2295 .len = count,
2296 .buf = buf,
2297 };
2298
2299 ret = i2c_transfer(client->adapter, &msg, 1);
2300
2301
2302
2303
2304
2305 return (ret == 1) ? count : ret;
2306}
2307EXPORT_SYMBOL(i2c_transfer_buffer_flags);
2308
2309
2310
2311
2312
2313
2314
2315
2316int i2c_get_device_id(const struct i2c_client *client,
2317 struct i2c_device_identity *id)
2318{
2319 struct i2c_adapter *adap = client->adapter;
2320 union i2c_smbus_data raw_id;
2321 int ret;
2322
2323 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_I2C_BLOCK))
2324 return -EOPNOTSUPP;
2325
2326 raw_id.block[0] = 3;
2327 ret = i2c_smbus_xfer(adap, I2C_ADDR_DEVICE_ID, 0,
2328 I2C_SMBUS_READ, client->addr << 1,
2329 I2C_SMBUS_I2C_BLOCK_DATA, &raw_id);
2330 if (ret)
2331 return ret;
2332
2333 id->manufacturer_id = (raw_id.block[1] << 4) | (raw_id.block[2] >> 4);
2334 id->part_id = ((raw_id.block[2] & 0xf) << 5) | (raw_id.block[3] >> 3);
2335 id->die_revision = raw_id.block[3] & 0x7;
2336 return 0;
2337}
2338EXPORT_SYMBOL_GPL(i2c_get_device_id);
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
2359{
2360 int err;
2361 union i2c_smbus_data dummy;
2362
2363#ifdef CONFIG_X86
2364 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
2365 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
2366 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2367 I2C_SMBUS_BYTE_DATA, &dummy);
2368 else
2369#endif
2370 if (!((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50)
2371 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
2372 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
2373 I2C_SMBUS_QUICK, NULL);
2374 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
2375 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2376 I2C_SMBUS_BYTE, &dummy);
2377 else {
2378 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n",
2379 addr);
2380 err = -EOPNOTSUPP;
2381 }
2382
2383 return err >= 0;
2384}
2385
2386static int i2c_detect_address(struct i2c_client *temp_client,
2387 struct i2c_driver *driver)
2388{
2389 struct i2c_board_info info;
2390 struct i2c_adapter *adapter = temp_client->adapter;
2391 int addr = temp_client->addr;
2392 int err;
2393
2394
2395 err = i2c_check_7bit_addr_validity_strict(addr);
2396 if (err) {
2397 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
2398 addr);
2399 return err;
2400 }
2401
2402
2403 if (i2c_check_addr_busy(adapter, addr))
2404 return 0;
2405
2406
2407 if (!i2c_default_probe(adapter, addr))
2408 return 0;
2409
2410
2411 memset(&info, 0, sizeof(struct i2c_board_info));
2412 info.addr = addr;
2413 err = driver->detect(temp_client, &info);
2414 if (err) {
2415
2416
2417 return err == -ENODEV ? 0 : err;
2418 }
2419
2420
2421 if (info.type[0] == '\0') {
2422 dev_err(&adapter->dev,
2423 "%s detection function provided no name for 0x%x\n",
2424 driver->driver.name, addr);
2425 } else {
2426 struct i2c_client *client;
2427
2428
2429 if (adapter->class & I2C_CLASS_DEPRECATED)
2430 dev_warn(&adapter->dev,
2431 "This adapter will soon drop class based instantiation of devices. "
2432 "Please make sure client 0x%02x gets instantiated by other means. "
2433 "Check 'Documentation/i2c/instantiating-devices.rst' for details.\n",
2434 info.addr);
2435
2436 dev_dbg(&adapter->dev, "Creating %s at 0x%02x\n",
2437 info.type, info.addr);
2438 client = i2c_new_client_device(adapter, &info);
2439 if (!IS_ERR(client))
2440 list_add_tail(&client->detected, &driver->clients);
2441 else
2442 dev_err(&adapter->dev, "Failed creating %s at 0x%02x\n",
2443 info.type, info.addr);
2444 }
2445 return 0;
2446}
2447
2448static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
2449{
2450 const unsigned short *address_list;
2451 struct i2c_client *temp_client;
2452 int i, err = 0;
2453
2454 address_list = driver->address_list;
2455 if (!driver->detect || !address_list)
2456 return 0;
2457
2458
2459 if (adapter->class == I2C_CLASS_DEPRECATED) {
2460 dev_dbg(&adapter->dev,
2461 "This adapter dropped support for I2C classes and won't auto-detect %s devices anymore. "
2462 "If you need it, check 'Documentation/i2c/instantiating-devices.rst' for alternatives.\n",
2463 driver->driver.name);
2464 return 0;
2465 }
2466
2467
2468 if (!(adapter->class & driver->class))
2469 return 0;
2470
2471
2472 temp_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
2473 if (!temp_client)
2474 return -ENOMEM;
2475 temp_client->adapter = adapter;
2476
2477 for (i = 0; address_list[i] != I2C_CLIENT_END; i += 1) {
2478 dev_dbg(&adapter->dev,
2479 "found normal entry for adapter %d, addr 0x%02x\n",
2480 i2c_adapter_id(adapter), address_list[i]);
2481 temp_client->addr = address_list[i];
2482 err = i2c_detect_address(temp_client, driver);
2483 if (unlikely(err))
2484 break;
2485 }
2486
2487 kfree(temp_client);
2488 return err;
2489}
2490
2491int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr)
2492{
2493 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2494 I2C_SMBUS_QUICK, NULL) >= 0;
2495}
2496EXPORT_SYMBOL_GPL(i2c_probe_func_quick_read);
2497
2498struct i2c_client *
2499i2c_new_scanned_device(struct i2c_adapter *adap,
2500 struct i2c_board_info *info,
2501 unsigned short const *addr_list,
2502 int (*probe)(struct i2c_adapter *adap, unsigned short addr))
2503{
2504 int i;
2505
2506 if (!probe)
2507 probe = i2c_default_probe;
2508
2509 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
2510
2511 if (i2c_check_7bit_addr_validity_strict(addr_list[i]) < 0) {
2512 dev_warn(&adap->dev, "Invalid 7-bit address 0x%02x\n",
2513 addr_list[i]);
2514 continue;
2515 }
2516
2517
2518 if (i2c_check_addr_busy(adap, addr_list[i])) {
2519 dev_dbg(&adap->dev,
2520 "Address 0x%02x already in use, not probing\n",
2521 addr_list[i]);
2522 continue;
2523 }
2524
2525
2526 if (probe(adap, addr_list[i]))
2527 break;
2528 }
2529
2530 if (addr_list[i] == I2C_CLIENT_END) {
2531 dev_dbg(&adap->dev, "Probing failed, no device found\n");
2532 return ERR_PTR(-ENODEV);
2533 }
2534
2535 info->addr = addr_list[i];
2536 return i2c_new_client_device(adap, info);
2537}
2538EXPORT_SYMBOL_GPL(i2c_new_scanned_device);
2539
2540struct i2c_adapter *i2c_get_adapter(int nr)
2541{
2542 struct i2c_adapter *adapter;
2543
2544 mutex_lock(&core_lock);
2545 adapter = idr_find(&i2c_adapter_idr, nr);
2546 if (!adapter)
2547 goto exit;
2548
2549 if (try_module_get(adapter->owner))
2550 get_device(&adapter->dev);
2551 else
2552 adapter = NULL;
2553
2554 exit:
2555 mutex_unlock(&core_lock);
2556 return adapter;
2557}
2558EXPORT_SYMBOL(i2c_get_adapter);
2559
2560void i2c_put_adapter(struct i2c_adapter *adap)
2561{
2562 if (!adap)
2563 return;
2564
2565 put_device(&adap->dev);
2566 module_put(adap->owner);
2567}
2568EXPORT_SYMBOL(i2c_put_adapter);
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582u8 *i2c_get_dma_safe_msg_buf(struct i2c_msg *msg, unsigned int threshold)
2583{
2584
2585 if (!threshold)
2586 pr_debug("DMA buffer for addr=0x%02x with length 0 is bogus\n",
2587 msg->addr);
2588 if (msg->len < threshold || msg->len == 0)
2589 return NULL;
2590
2591 if (msg->flags & I2C_M_DMA_SAFE)
2592 return msg->buf;
2593
2594 pr_debug("using bounce buffer for addr=0x%02x, len=%d\n",
2595 msg->addr, msg->len);
2596
2597 if (msg->flags & I2C_M_RD)
2598 return kzalloc(msg->len, GFP_KERNEL);
2599 else
2600 return kmemdup(msg->buf, msg->len, GFP_KERNEL);
2601}
2602EXPORT_SYMBOL_GPL(i2c_get_dma_safe_msg_buf);
2603
2604
2605
2606
2607
2608
2609
2610void i2c_put_dma_safe_msg_buf(u8 *buf, struct i2c_msg *msg, bool xferred)
2611{
2612 if (!buf || buf == msg->buf)
2613 return;
2614
2615 if (xferred && msg->flags & I2C_M_RD)
2616 memcpy(msg->buf, buf, msg->len);
2617
2618 kfree(buf);
2619}
2620EXPORT_SYMBOL_GPL(i2c_put_dma_safe_msg_buf);
2621
2622MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
2623MODULE_DESCRIPTION("I2C-Bus main module");
2624MODULE_LICENSE("GPL");
2625