]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/i2c/i2c-core.c
Merge branch 's5p-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[net-next-2.6.git] / drivers / i2c / i2c-core.c
CommitLineData
1da177e4
LT
1/* i2c-core.c - a device driver for the iic-bus interface */
2/* ------------------------------------------------------------------------- */
3/* Copyright (C) 1995-99 Simon G. Vogl
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
18/* ------------------------------------------------------------------------- */
19
96de0e25 20/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
1da177e4 21 All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
421ef47b 22 SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
0826374b
ML
23 Jean Delvare <khali@linux-fr.org>
24 Mux support by Rodolfo Giometti <giometti@enneenne.com> and
25 Michael Lawnick <michael.lawnick.ext@nsn.com> */
1da177e4 26
1da177e4
LT
27#include <linux/module.h>
28#include <linux/kernel.h>
29#include <linux/errno.h>
30#include <linux/slab.h>
31#include <linux/i2c.h>
32#include <linux/init.h>
33#include <linux/idr.h>
b3585e4f 34#include <linux/mutex.h>
959e85f7 35#include <linux/of_device.h>
b8d6f45b 36#include <linux/completion.h>
cea443a8
MR
37#include <linux/hardirq.h>
38#include <linux/irqflags.h>
f18c41da 39#include <linux/rwsem.h>
6de468ae 40#include <linux/pm_runtime.h>
1da177e4
LT
41#include <asm/uaccess.h>
42
9c1600ed
DB
43#include "i2c-core.h"
44
1da177e4 45
6629dcff 46/* core_lock protects i2c_adapter_idr, and guarantees
35fc37f8
JD
47 that device detection, deletion of detected devices, and attach_adapter
48 and detach_adapter calls are serialized */
caada32a 49static DEFINE_MUTEX(core_lock);
1da177e4
LT
50static DEFINE_IDR(i2c_adapter_idr);
51
4f8cf824 52static struct device_type i2c_client_type;
4735c98f 53static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
f37dd80a
DB
54
55/* ------------------------------------------------------------------------- */
56
d2653e92
JD
57static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
58 const struct i2c_client *client)
59{
60 while (id->name[0]) {
61 if (strcmp(client->name, id->name) == 0)
62 return id;
63 id++;
64 }
65 return NULL;
66}
67
1da177e4
LT
68static int i2c_device_match(struct device *dev, struct device_driver *drv)
69{
51298d12
JD
70 struct i2c_client *client = i2c_verify_client(dev);
71 struct i2c_driver *driver;
72
73 if (!client)
74 return 0;
7b4fbc50 75
959e85f7
GL
76 /* Attempt an OF style match */
77 if (of_driver_match_device(dev, drv))
78 return 1;
79
51298d12 80 driver = to_i2c_driver(drv);
d2653e92
JD
81 /* match on an id table if there is one */
82 if (driver->id_table)
83 return i2c_match_id(driver->id_table, client) != NULL;
84
eb8a7908 85 return 0;
1da177e4
LT
86}
87
7b4fbc50
DB
88#ifdef CONFIG_HOTPLUG
89
90/* uevent helps with hotplug: modprobe -q $(MODALIAS) */
7eff2e7a 91static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
7b4fbc50
DB
92{
93 struct i2c_client *client = to_i2c_client(dev);
7b4fbc50 94
eb8a7908
JD
95 if (add_uevent_var(env, "MODALIAS=%s%s",
96 I2C_MODULE_PREFIX, client->name))
97 return -ENOMEM;
7b4fbc50
DB
98 dev_dbg(dev, "uevent\n");
99 return 0;
100}
101
102#else
103#define i2c_device_uevent NULL
104#endif /* CONFIG_HOTPLUG */
105
f37dd80a 106static int i2c_device_probe(struct device *dev)
1da177e4 107{
51298d12
JD
108 struct i2c_client *client = i2c_verify_client(dev);
109 struct i2c_driver *driver;
50c3304a 110 int status;
7b4fbc50 111
51298d12
JD
112 if (!client)
113 return 0;
114
115 driver = to_i2c_driver(dev->driver);
e0457442 116 if (!driver->probe || !driver->id_table)
7b4fbc50
DB
117 return -ENODEV;
118 client->driver = driver;
ee35425c
MP
119 if (!device_can_wakeup(&client->dev))
120 device_init_wakeup(&client->dev,
121 client->flags & I2C_CLIENT_WAKE);
7b4fbc50 122 dev_dbg(dev, "probe\n");
d2653e92 123
e0457442 124 status = driver->probe(client, i2c_match_id(driver->id_table, client));
e4a7b9b0 125 if (status) {
50c3304a 126 client->driver = NULL;
e4a7b9b0
WS
127 i2c_set_clientdata(client, NULL);
128 }
50c3304a 129 return status;
f37dd80a 130}
1da177e4 131
f37dd80a
DB
132static int i2c_device_remove(struct device *dev)
133{
51298d12 134 struct i2c_client *client = i2c_verify_client(dev);
a1d9e6e4
DB
135 struct i2c_driver *driver;
136 int status;
137
51298d12 138 if (!client || !dev->driver)
a1d9e6e4
DB
139 return 0;
140
141 driver = to_i2c_driver(dev->driver);
142 if (driver->remove) {
143 dev_dbg(dev, "remove\n");
144 status = driver->remove(client);
145 } else {
146 dev->driver = NULL;
147 status = 0;
148 }
e4a7b9b0 149 if (status == 0) {
a1d9e6e4 150 client->driver = NULL;
e4a7b9b0
WS
151 i2c_set_clientdata(client, NULL);
152 }
a1d9e6e4 153 return status;
1da177e4
LT
154}
155
f37dd80a 156static void i2c_device_shutdown(struct device *dev)
1da177e4 157{
51298d12 158 struct i2c_client *client = i2c_verify_client(dev);
f37dd80a
DB
159 struct i2c_driver *driver;
160
51298d12 161 if (!client || !dev->driver)
f37dd80a
DB
162 return;
163 driver = to_i2c_driver(dev->driver);
164 if (driver->shutdown)
51298d12 165 driver->shutdown(client);
1da177e4
LT
166}
167
2f60ba70
RW
168#ifdef CONFIG_PM_SLEEP
169static int i2c_legacy_suspend(struct device *dev, pm_message_t mesg)
54067ee2 170{
2f60ba70
RW
171 struct i2c_client *client = i2c_verify_client(dev);
172 struct i2c_driver *driver;
54067ee2 173
2f60ba70 174 if (!client || !dev->driver)
54067ee2 175 return 0;
2f60ba70
RW
176 driver = to_i2c_driver(dev->driver);
177 if (!driver->suspend)
54067ee2 178 return 0;
2f60ba70 179 return driver->suspend(client, mesg);
54067ee2 180}
181
2f60ba70 182static int i2c_legacy_resume(struct device *dev)
54067ee2 183{
2f60ba70
RW
184 struct i2c_client *client = i2c_verify_client(dev);
185 struct i2c_driver *driver;
54067ee2 186
2f60ba70 187 if (!client || !dev->driver)
54067ee2 188 return 0;
2f60ba70
RW
189 driver = to_i2c_driver(dev->driver);
190 if (!driver->resume)
54067ee2 191 return 0;
2f60ba70 192 return driver->resume(client);
54067ee2 193}
54067ee2 194
2f60ba70 195static int i2c_device_pm_suspend(struct device *dev)
6de468ae 196{
2f60ba70 197 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
6de468ae 198
64b4782f
RN
199 if (pm) {
200 if (pm_runtime_suspended(dev))
201 return 0;
202 else
203 return pm->suspend ? pm->suspend(dev) : 0;
204 }
6de468ae 205
2f60ba70 206 return i2c_legacy_suspend(dev, PMSG_SUSPEND);
6de468ae
MB
207}
208
2f60ba70 209static int i2c_device_pm_resume(struct device *dev)
6de468ae 210{
2f60ba70 211 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
6de468ae
MB
212 int ret;
213
2f60ba70
RW
214 if (pm)
215 ret = pm->resume ? pm->resume(dev) : 0;
216 else
217 ret = i2c_legacy_resume(dev);
218
2f60ba70 219 return ret;
6de468ae 220}
6de468ae 221
2f60ba70 222static int i2c_device_pm_freeze(struct device *dev)
1da177e4 223{
2f60ba70 224 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
f37dd80a 225
64b4782f
RN
226 if (pm) {
227 if (pm_runtime_suspended(dev))
228 return 0;
229 else
230 return pm->freeze ? pm->freeze(dev) : 0;
231 }
2f60ba70
RW
232
233 return i2c_legacy_suspend(dev, PMSG_FREEZE);
1da177e4
LT
234}
235
2f60ba70 236static int i2c_device_pm_thaw(struct device *dev)
1da177e4 237{
2f60ba70 238 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
f37dd80a 239
64b4782f
RN
240 if (pm) {
241 if (pm_runtime_suspended(dev))
242 return 0;
243 else
244 return pm->thaw ? pm->thaw(dev) : 0;
245 }
2f60ba70
RW
246
247 return i2c_legacy_resume(dev);
248}
249
250static int i2c_device_pm_poweroff(struct device *dev)
251{
252 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
253
64b4782f
RN
254 if (pm) {
255 if (pm_runtime_suspended(dev))
256 return 0;
257 else
258 return pm->poweroff ? pm->poweroff(dev) : 0;
259 }
2f60ba70
RW
260
261 return i2c_legacy_suspend(dev, PMSG_HIBERNATE);
262}
263
264static int i2c_device_pm_restore(struct device *dev)
265{
266 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
267 int ret;
268
269 if (pm)
270 ret = pm->restore ? pm->restore(dev) : 0;
271 else
272 ret = i2c_legacy_resume(dev);
273
274 if (!ret) {
275 pm_runtime_disable(dev);
276 pm_runtime_set_active(dev);
277 pm_runtime_enable(dev);
278 }
279
280 return ret;
1da177e4 281}
2f60ba70
RW
282#else /* !CONFIG_PM_SLEEP */
283#define i2c_device_pm_suspend NULL
284#define i2c_device_pm_resume NULL
285#define i2c_device_pm_freeze NULL
286#define i2c_device_pm_thaw NULL
287#define i2c_device_pm_poweroff NULL
288#define i2c_device_pm_restore NULL
289#endif /* !CONFIG_PM_SLEEP */
1da177e4 290
9c1600ed
DB
291static void i2c_client_dev_release(struct device *dev)
292{
293 kfree(to_i2c_client(dev));
294}
295
09b8ce0a 296static ssize_t
4f8cf824 297show_name(struct device *dev, struct device_attribute *attr, char *buf)
7b4fbc50 298{
4f8cf824
JD
299 return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
300 to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
7b4fbc50
DB
301}
302
09b8ce0a
ZX
303static ssize_t
304show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
7b4fbc50
DB
305{
306 struct i2c_client *client = to_i2c_client(dev);
eb8a7908 307 return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
7b4fbc50
DB
308}
309
4f8cf824 310static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
51298d12
JD
311static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
312
313static struct attribute *i2c_dev_attrs[] = {
314 &dev_attr_name.attr,
7b4fbc50 315 /* modalias helps coldplug: modprobe $(cat .../modalias) */
51298d12
JD
316 &dev_attr_modalias.attr,
317 NULL
318};
319
320static struct attribute_group i2c_dev_attr_group = {
321 .attrs = i2c_dev_attrs,
322};
323
324static const struct attribute_group *i2c_dev_attr_groups[] = {
325 &i2c_dev_attr_group,
326 NULL
7b4fbc50
DB
327};
328
0b2c3688 329static const struct dev_pm_ops i2c_device_pm_ops = {
54067ee2 330 .suspend = i2c_device_pm_suspend,
331 .resume = i2c_device_pm_resume,
2f60ba70
RW
332 .freeze = i2c_device_pm_freeze,
333 .thaw = i2c_device_pm_thaw,
334 .poweroff = i2c_device_pm_poweroff,
335 .restore = i2c_device_pm_restore,
336 SET_RUNTIME_PM_OPS(
337 pm_generic_runtime_suspend,
338 pm_generic_runtime_resume,
339 pm_generic_runtime_idle
340 )
54067ee2 341};
342
e9ca9eb9 343struct bus_type i2c_bus_type = {
f37dd80a
DB
344 .name = "i2c",
345 .match = i2c_device_match,
346 .probe = i2c_device_probe,
347 .remove = i2c_device_remove,
348 .shutdown = i2c_device_shutdown,
54067ee2 349 .pm = &i2c_device_pm_ops,
b864c7d5 350};
e9ca9eb9 351EXPORT_SYMBOL_GPL(i2c_bus_type);
b864c7d5 352
51298d12
JD
353static struct device_type i2c_client_type = {
354 .groups = i2c_dev_attr_groups,
355 .uevent = i2c_device_uevent,
356 .release = i2c_client_dev_release,
357};
358
9b766b81
DB
359
360/**
361 * i2c_verify_client - return parameter as i2c_client, or NULL
362 * @dev: device, probably from some driver model iterator
363 *
364 * When traversing the driver model tree, perhaps using driver model
365 * iterators like @device_for_each_child(), you can't assume very much
366 * about the nodes you find. Use this function to avoid oopses caused
367 * by wrongly treating some non-I2C device as an i2c_client.
368 */
369struct i2c_client *i2c_verify_client(struct device *dev)
370{
51298d12 371 return (dev->type == &i2c_client_type)
9b766b81
DB
372 ? to_i2c_client(dev)
373 : NULL;
374}
375EXPORT_SYMBOL(i2c_verify_client);
376
377
3a89db5f
JD
378/* This is a permissive address validity check, I2C address map constraints
379 * are purposedly not enforced, except for the general call address. */
380static int i2c_check_client_addr_validity(const struct i2c_client *client)
381{
382 if (client->flags & I2C_CLIENT_TEN) {
383 /* 10-bit address, all values are valid */
384 if (client->addr > 0x3ff)
385 return -EINVAL;
386 } else {
387 /* 7-bit address, reject the general call address */
388 if (client->addr == 0x00 || client->addr > 0x7f)
389 return -EINVAL;
390 }
391 return 0;
392}
393
656b8761
JD
394/* And this is a strict address validity check, used when probing. If a
395 * device uses a reserved address, then it shouldn't be probed. 7-bit
396 * addressing is assumed, 10-bit address devices are rare and should be
397 * explicitly enumerated. */
398static int i2c_check_addr_validity(unsigned short addr)
399{
400 /*
401 * Reserved addresses per I2C specification:
402 * 0x00 General call address / START byte
403 * 0x01 CBUS address
404 * 0x02 Reserved for different bus format
405 * 0x03 Reserved for future purposes
406 * 0x04-0x07 Hs-mode master code
407 * 0x78-0x7b 10-bit slave addressing
408 * 0x7c-0x7f Reserved for future purposes
409 */
410 if (addr < 0x08 || addr > 0x77)
411 return -EINVAL;
412 return 0;
413}
414
3b5f794b
JD
415static int __i2c_check_addr_busy(struct device *dev, void *addrp)
416{
417 struct i2c_client *client = i2c_verify_client(dev);
418 int addr = *(int *)addrp;
419
420 if (client && client->addr == addr)
421 return -EBUSY;
422 return 0;
423}
424
0826374b
ML
425/* walk up mux tree */
426static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
427{
428 int result;
429
430 result = device_for_each_child(&adapter->dev, &addr,
431 __i2c_check_addr_busy);
432
433 if (!result && i2c_parent_is_i2c_adapter(adapter))
434 result = i2c_check_mux_parents(
435 to_i2c_adapter(adapter->dev.parent), addr);
436
437 return result;
438}
439
440/* recurse down mux tree */
441static int i2c_check_mux_children(struct device *dev, void *addrp)
442{
443 int result;
444
445 if (dev->type == &i2c_adapter_type)
446 result = device_for_each_child(dev, addrp,
447 i2c_check_mux_children);
448 else
449 result = __i2c_check_addr_busy(dev, addrp);
450
451 return result;
452}
453
3b5f794b
JD
454static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
455{
0826374b
ML
456 int result = 0;
457
458 if (i2c_parent_is_i2c_adapter(adapter))
459 result = i2c_check_mux_parents(
460 to_i2c_adapter(adapter->dev.parent), addr);
461
462 if (!result)
463 result = device_for_each_child(&adapter->dev, &addr,
464 i2c_check_mux_children);
465
466 return result;
3b5f794b
JD
467}
468
fe61e07e
JD
469/**
470 * i2c_lock_adapter - Get exclusive access to an I2C bus segment
471 * @adapter: Target I2C bus segment
472 */
473void i2c_lock_adapter(struct i2c_adapter *adapter)
474{
0826374b
ML
475 if (i2c_parent_is_i2c_adapter(adapter))
476 i2c_lock_adapter(to_i2c_adapter(adapter->dev.parent));
477 else
478 rt_mutex_lock(&adapter->bus_lock);
fe61e07e
JD
479}
480EXPORT_SYMBOL_GPL(i2c_lock_adapter);
481
482/**
483 * i2c_trylock_adapter - Try to get exclusive access to an I2C bus segment
484 * @adapter: Target I2C bus segment
485 */
486static int i2c_trylock_adapter(struct i2c_adapter *adapter)
487{
0826374b
ML
488 if (i2c_parent_is_i2c_adapter(adapter))
489 return i2c_trylock_adapter(to_i2c_adapter(adapter->dev.parent));
490 else
491 return rt_mutex_trylock(&adapter->bus_lock);
fe61e07e
JD
492}
493
494/**
495 * i2c_unlock_adapter - Release exclusive access to an I2C bus segment
496 * @adapter: Target I2C bus segment
497 */
498void i2c_unlock_adapter(struct i2c_adapter *adapter)
499{
0826374b
ML
500 if (i2c_parent_is_i2c_adapter(adapter))
501 i2c_unlock_adapter(to_i2c_adapter(adapter->dev.parent));
502 else
503 rt_mutex_unlock(&adapter->bus_lock);
fe61e07e
JD
504}
505EXPORT_SYMBOL_GPL(i2c_unlock_adapter);
506
9c1600ed 507/**
f8a227e8 508 * i2c_new_device - instantiate an i2c device
9c1600ed
DB
509 * @adap: the adapter managing the device
510 * @info: describes one I2C device; bus_num is ignored
d64f73be 511 * Context: can sleep
9c1600ed 512 *
f8a227e8
JD
513 * Create an i2c device. Binding is handled through driver model
514 * probe()/remove() methods. A driver may be bound to this device when we
515 * return from this function, or any later moment (e.g. maybe hotplugging will
516 * load the driver module). This call is not appropriate for use by mainboard
517 * initialization logic, which usually runs during an arch_initcall() long
518 * before any i2c_adapter could exist.
9c1600ed
DB
519 *
520 * This returns the new i2c client, which may be saved for later use with
521 * i2c_unregister_device(); or NULL to indicate an error.
522 */
523struct i2c_client *
524i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
525{
526 struct i2c_client *client;
527 int status;
528
529 client = kzalloc(sizeof *client, GFP_KERNEL);
530 if (!client)
531 return NULL;
532
533 client->adapter = adap;
534
535 client->dev.platform_data = info->platform_data;
3bbb835d 536
11f1f2af
AV
537 if (info->archdata)
538 client->dev.archdata = *info->archdata;
539
ee35425c 540 client->flags = info->flags;
9c1600ed
DB
541 client->addr = info->addr;
542 client->irq = info->irq;
543
9c1600ed
DB
544 strlcpy(client->name, info->type, sizeof(client->name));
545
3a89db5f
JD
546 /* Check for address validity */
547 status = i2c_check_client_addr_validity(client);
548 if (status) {
549 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
550 client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
551 goto out_err_silent;
552 }
553
f8a227e8 554 /* Check for address business */
3b5f794b 555 status = i2c_check_addr_busy(adap, client->addr);
f8a227e8
JD
556 if (status)
557 goto out_err;
558
559 client->dev.parent = &client->adapter->dev;
560 client->dev.bus = &i2c_bus_type;
51298d12 561 client->dev.type = &i2c_client_type;
d12d42f7
GL
562#ifdef CONFIG_OF
563 client->dev.of_node = info->of_node;
564#endif
f8a227e8
JD
565
566 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
567 client->addr);
568 status = device_register(&client->dev);
569 if (status)
570 goto out_err;
571
f8a227e8
JD
572 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
573 client->name, dev_name(&client->dev));
574
9c1600ed 575 return client;
f8a227e8
JD
576
577out_err:
578 dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x "
579 "(%d)\n", client->name, client->addr, status);
3a89db5f 580out_err_silent:
f8a227e8
JD
581 kfree(client);
582 return NULL;
9c1600ed
DB
583}
584EXPORT_SYMBOL_GPL(i2c_new_device);
585
586
587/**
588 * i2c_unregister_device - reverse effect of i2c_new_device()
589 * @client: value returned from i2c_new_device()
d64f73be 590 * Context: can sleep
9c1600ed
DB
591 */
592void i2c_unregister_device(struct i2c_client *client)
a1d9e6e4 593{
a1d9e6e4
DB
594 device_unregister(&client->dev);
595}
9c1600ed 596EXPORT_SYMBOL_GPL(i2c_unregister_device);
a1d9e6e4
DB
597
598
60b129d7
JD
599static const struct i2c_device_id dummy_id[] = {
600 { "dummy", 0 },
601 { },
602};
603
d2653e92
JD
604static int dummy_probe(struct i2c_client *client,
605 const struct i2c_device_id *id)
606{
607 return 0;
608}
609
610static int dummy_remove(struct i2c_client *client)
e9f1373b
DB
611{
612 return 0;
613}
614
615static struct i2c_driver dummy_driver = {
616 .driver.name = "dummy",
d2653e92
JD
617 .probe = dummy_probe,
618 .remove = dummy_remove,
60b129d7 619 .id_table = dummy_id,
e9f1373b
DB
620};
621
622/**
623 * i2c_new_dummy - return a new i2c device bound to a dummy driver
624 * @adapter: the adapter managing the device
625 * @address: seven bit address to be used
e9f1373b
DB
626 * Context: can sleep
627 *
628 * This returns an I2C client bound to the "dummy" driver, intended for use
629 * with devices that consume multiple addresses. Examples of such chips
630 * include various EEPROMS (like 24c04 and 24c08 models).
631 *
632 * These dummy devices have two main uses. First, most I2C and SMBus calls
633 * except i2c_transfer() need a client handle; the dummy will be that handle.
634 * And second, this prevents the specified address from being bound to a
635 * different driver.
636 *
637 * This returns the new i2c client, which should be saved for later use with
638 * i2c_unregister_device(); or NULL to indicate an error.
639 */
09b8ce0a 640struct i2c_client *i2c_new_dummy(struct i2c_adapter *adapter, u16 address)
e9f1373b
DB
641{
642 struct i2c_board_info info = {
60b129d7 643 I2C_BOARD_INFO("dummy", address),
e9f1373b
DB
644 };
645
e9f1373b
DB
646 return i2c_new_device(adapter, &info);
647}
648EXPORT_SYMBOL_GPL(i2c_new_dummy);
649
f37dd80a
DB
650/* ------------------------------------------------------------------------- */
651
16ffadfc
DB
652/* I2C bus adapters -- one roots each I2C or SMBUS segment */
653
83eaaed0 654static void i2c_adapter_dev_release(struct device *dev)
1da177e4 655{
ef2c8321 656 struct i2c_adapter *adap = to_i2c_adapter(dev);
1da177e4
LT
657 complete(&adap->dev_released);
658}
659
99cd8e25
JD
660/*
661 * Let users instantiate I2C devices through sysfs. This can be used when
662 * platform initialization code doesn't contain the proper data for
663 * whatever reason. Also useful for drivers that do device detection and
664 * detection fails, either because the device uses an unexpected address,
665 * or this is a compatible device with different ID register values.
666 *
667 * Parameter checking may look overzealous, but we really don't want
668 * the user to provide incorrect parameters.
669 */
670static ssize_t
671i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
672 const char *buf, size_t count)
673{
674 struct i2c_adapter *adap = to_i2c_adapter(dev);
675 struct i2c_board_info info;
676 struct i2c_client *client;
677 char *blank, end;
678 int res;
679
680 dev_warn(dev, "The new_device interface is still experimental "
681 "and may change in a near future\n");
682 memset(&info, 0, sizeof(struct i2c_board_info));
683
684 blank = strchr(buf, ' ');
685 if (!blank) {
686 dev_err(dev, "%s: Missing parameters\n", "new_device");
687 return -EINVAL;
688 }
689 if (blank - buf > I2C_NAME_SIZE - 1) {
690 dev_err(dev, "%s: Invalid device name\n", "new_device");
691 return -EINVAL;
692 }
693 memcpy(info.type, buf, blank - buf);
694
695 /* Parse remaining parameters, reject extra parameters */
696 res = sscanf(++blank, "%hi%c", &info.addr, &end);
697 if (res < 1) {
698 dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
699 return -EINVAL;
700 }
701 if (res > 1 && end != '\n') {
702 dev_err(dev, "%s: Extra parameters\n", "new_device");
703 return -EINVAL;
704 }
705
99cd8e25
JD
706 client = i2c_new_device(adap, &info);
707 if (!client)
3a89db5f 708 return -EINVAL;
99cd8e25
JD
709
710 /* Keep track of the added device */
dafc50d1 711 mutex_lock(&adap->userspace_clients_lock);
6629dcff 712 list_add_tail(&client->detected, &adap->userspace_clients);
dafc50d1 713 mutex_unlock(&adap->userspace_clients_lock);
99cd8e25
JD
714 dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
715 info.type, info.addr);
716
717 return count;
718}
719
720/*
721 * And of course let the users delete the devices they instantiated, if
722 * they got it wrong. This interface can only be used to delete devices
723 * instantiated by i2c_sysfs_new_device above. This guarantees that we
724 * don't delete devices to which some kernel code still has references.
725 *
726 * Parameter checking may look overzealous, but we really don't want
727 * the user to delete the wrong device.
728 */
729static ssize_t
730i2c_sysfs_delete_device(struct device *dev, struct device_attribute *attr,
731 const char *buf, size_t count)
732{
733 struct i2c_adapter *adap = to_i2c_adapter(dev);
734 struct i2c_client *client, *next;
735 unsigned short addr;
736 char end;
737 int res;
738
739 /* Parse parameters, reject extra parameters */
740 res = sscanf(buf, "%hi%c", &addr, &end);
741 if (res < 1) {
742 dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
743 return -EINVAL;
744 }
745 if (res > 1 && end != '\n') {
746 dev_err(dev, "%s: Extra parameters\n", "delete_device");
747 return -EINVAL;
748 }
749
750 /* Make sure the device was added through sysfs */
751 res = -ENOENT;
dafc50d1 752 mutex_lock(&adap->userspace_clients_lock);
6629dcff
JD
753 list_for_each_entry_safe(client, next, &adap->userspace_clients,
754 detected) {
755 if (client->addr == addr) {
99cd8e25
JD
756 dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
757 "delete_device", client->name, client->addr);
758
759 list_del(&client->detected);
760 i2c_unregister_device(client);
761 res = count;
762 break;
763 }
764 }
dafc50d1 765 mutex_unlock(&adap->userspace_clients_lock);
99cd8e25
JD
766
767 if (res < 0)
768 dev_err(dev, "%s: Can't find device in list\n",
769 "delete_device");
770 return res;
771}
772
4f8cf824
JD
773static DEVICE_ATTR(new_device, S_IWUSR, NULL, i2c_sysfs_new_device);
774static DEVICE_ATTR(delete_device, S_IWUSR, NULL, i2c_sysfs_delete_device);
775
776static struct attribute *i2c_adapter_attrs[] = {
777 &dev_attr_name.attr,
778 &dev_attr_new_device.attr,
779 &dev_attr_delete_device.attr,
780 NULL
781};
782
783static struct attribute_group i2c_adapter_attr_group = {
784 .attrs = i2c_adapter_attrs,
785};
786
787static const struct attribute_group *i2c_adapter_attr_groups[] = {
788 &i2c_adapter_attr_group,
789 NULL
16ffadfc 790};
b119dc3f 791
0826374b 792struct device_type i2c_adapter_type = {
4f8cf824
JD
793 .groups = i2c_adapter_attr_groups,
794 .release = i2c_adapter_dev_release,
1da177e4 795};
0826374b 796EXPORT_SYMBOL_GPL(i2c_adapter_type);
1da177e4 797
2bb5095a
JD
798#ifdef CONFIG_I2C_COMPAT
799static struct class_compat *i2c_adapter_compat_class;
800#endif
801
9c1600ed
DB
802static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
803{
804 struct i2c_devinfo *devinfo;
805
f18c41da 806 down_read(&__i2c_board_lock);
9c1600ed
DB
807 list_for_each_entry(devinfo, &__i2c_board_list, list) {
808 if (devinfo->busnum == adapter->nr
809 && !i2c_new_device(adapter,
810 &devinfo->board_info))
09b8ce0a
ZX
811 dev_err(&adapter->dev,
812 "Can't create device at 0x%02x\n",
9c1600ed
DB
813 devinfo->board_info.addr);
814 }
f18c41da 815 up_read(&__i2c_board_lock);
9c1600ed
DB
816}
817
69b0089a
JD
818static int i2c_do_add_adapter(struct i2c_driver *driver,
819 struct i2c_adapter *adap)
026526f5 820{
4735c98f
JD
821 /* Detect supported devices on that bus, and instantiate them */
822 i2c_detect(adap, driver);
823
824 /* Let legacy drivers scan this bus for matching devices */
026526f5
JD
825 if (driver->attach_adapter) {
826 /* We ignore the return code; if it fails, too bad */
827 driver->attach_adapter(adap);
828 }
829 return 0;
830}
831
69b0089a
JD
832static int __process_new_adapter(struct device_driver *d, void *data)
833{
834 return i2c_do_add_adapter(to_i2c_driver(d), data);
835}
836
6e13e641 837static int i2c_register_adapter(struct i2c_adapter *adap)
1da177e4 838{
d6703281 839 int res = 0;
1da177e4 840
1d0b19c9 841 /* Can't register until after driver model init */
35fc37f8
JD
842 if (unlikely(WARN_ON(!i2c_bus_type.p))) {
843 res = -EAGAIN;
844 goto out_list;
845 }
1d0b19c9 846
194684e5 847 rt_mutex_init(&adap->bus_lock);
dafc50d1 848 mutex_init(&adap->userspace_clients_lock);
6629dcff 849 INIT_LIST_HEAD(&adap->userspace_clients);
1da177e4 850
8fcfef6e
JD
851 /* Set default timeout to 1 second if not already set */
852 if (adap->timeout == 0)
853 adap->timeout = HZ;
854
27d9c183 855 dev_set_name(&adap->dev, "i2c-%d", adap->nr);
4f8cf824
JD
856 adap->dev.bus = &i2c_bus_type;
857 adap->dev.type = &i2c_adapter_type;
b119c6c9
JD
858 res = device_register(&adap->dev);
859 if (res)
860 goto out_list;
1da177e4 861
b6d7b3d1
JD
862 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
863
2bb5095a
JD
864#ifdef CONFIG_I2C_COMPAT
865 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
866 adap->dev.parent);
867 if (res)
868 dev_warn(&adap->dev,
869 "Failed to create compatibility class link\n");
870#endif
871
729d6dd5 872 /* create pre-declared device nodes */
6e13e641
DB
873 if (adap->nr < __i2c_first_dynamic_bus_num)
874 i2c_scan_static_board_info(adap);
875
4735c98f 876 /* Notify drivers */
35fc37f8 877 mutex_lock(&core_lock);
d6703281 878 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
caada32a 879 mutex_unlock(&core_lock);
35fc37f8
JD
880
881 return 0;
b119c6c9 882
b119c6c9 883out_list:
35fc37f8 884 mutex_lock(&core_lock);
b119c6c9 885 idr_remove(&i2c_adapter_idr, adap->nr);
35fc37f8
JD
886 mutex_unlock(&core_lock);
887 return res;
1da177e4
LT
888}
889
6e13e641
DB
890/**
891 * i2c_add_adapter - declare i2c adapter, use dynamic bus number
892 * @adapter: the adapter to add
d64f73be 893 * Context: can sleep
6e13e641
DB
894 *
895 * This routine is used to declare an I2C adapter when its bus number
896 * doesn't matter. Examples: for I2C adapters dynamically added by
897 * USB links or PCI plugin cards.
898 *
899 * When this returns zero, a new bus number was allocated and stored
900 * in adap->nr, and the specified adapter became available for clients.
901 * Otherwise, a negative errno value is returned.
902 */
903int i2c_add_adapter(struct i2c_adapter *adapter)
904{
905 int id, res = 0;
906
907retry:
908 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
909 return -ENOMEM;
910
caada32a 911 mutex_lock(&core_lock);
6e13e641
DB
912 /* "above" here means "above or equal to", sigh */
913 res = idr_get_new_above(&i2c_adapter_idr, adapter,
914 __i2c_first_dynamic_bus_num, &id);
caada32a 915 mutex_unlock(&core_lock);
6e13e641
DB
916
917 if (res < 0) {
918 if (res == -EAGAIN)
919 goto retry;
920 return res;
921 }
922
923 adapter->nr = id;
924 return i2c_register_adapter(adapter);
925}
926EXPORT_SYMBOL(i2c_add_adapter);
927
928/**
929 * i2c_add_numbered_adapter - declare i2c adapter, use static bus number
930 * @adap: the adapter to register (with adap->nr initialized)
d64f73be 931 * Context: can sleep
6e13e641
DB
932 *
933 * This routine is used to declare an I2C adapter when its bus number
8c07e46f
RD
934 * matters. For example, use it for I2C adapters from system-on-chip CPUs,
935 * or otherwise built in to the system's mainboard, and where i2c_board_info
6e13e641
DB
936 * is used to properly configure I2C devices.
937 *
938 * If no devices have pre-been declared for this bus, then be sure to
939 * register the adapter before any dynamically allocated ones. Otherwise
940 * the required bus ID may not be available.
941 *
942 * When this returns zero, the specified adapter became available for
943 * clients using the bus number provided in adap->nr. Also, the table
944 * of I2C devices pre-declared using i2c_register_board_info() is scanned,
945 * and the appropriate driver model device nodes are created. Otherwise, a
946 * negative errno value is returned.
947 */
948int i2c_add_numbered_adapter(struct i2c_adapter *adap)
949{
950 int id;
951 int status;
952
953 if (adap->nr & ~MAX_ID_MASK)
954 return -EINVAL;
955
956retry:
957 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
958 return -ENOMEM;
959
caada32a 960 mutex_lock(&core_lock);
6e13e641
DB
961 /* "above" here means "above or equal to", sigh;
962 * we need the "equal to" result to force the result
963 */
964 status = idr_get_new_above(&i2c_adapter_idr, adap, adap->nr, &id);
965 if (status == 0 && id != adap->nr) {
966 status = -EBUSY;
967 idr_remove(&i2c_adapter_idr, id);
968 }
caada32a 969 mutex_unlock(&core_lock);
6e13e641
DB
970 if (status == -EAGAIN)
971 goto retry;
972
973 if (status == 0)
974 status = i2c_register_adapter(adap);
975 return status;
976}
977EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
978
69b0089a
JD
979static int i2c_do_del_adapter(struct i2c_driver *driver,
980 struct i2c_adapter *adapter)
026526f5 981{
4735c98f 982 struct i2c_client *client, *_n;
026526f5
JD
983 int res;
984
acec211c
JD
985 /* Remove the devices we created ourselves as the result of hardware
986 * probing (using a driver's detect method) */
4735c98f
JD
987 list_for_each_entry_safe(client, _n, &driver->clients, detected) {
988 if (client->adapter == adapter) {
989 dev_dbg(&adapter->dev, "Removing %s at 0x%x\n",
990 client->name, client->addr);
991 list_del(&client->detected);
992 i2c_unregister_device(client);
993 }
994 }
995
026526f5
JD
996 if (!driver->detach_adapter)
997 return 0;
998 res = driver->detach_adapter(adapter);
999 if (res)
1000 dev_err(&adapter->dev, "detach_adapter failed (%d) "
1001 "for driver [%s]\n", res, driver->driver.name);
1002 return res;
1003}
1004
e549c2b5
JD
1005static int __unregister_client(struct device *dev, void *dummy)
1006{
1007 struct i2c_client *client = i2c_verify_client(dev);
1008 if (client)
1009 i2c_unregister_device(client);
1010 return 0;
1011}
1012
69b0089a
JD
1013static int __process_removed_adapter(struct device_driver *d, void *data)
1014{
1015 return i2c_do_del_adapter(to_i2c_driver(d), data);
1016}
1017
d64f73be
DB
1018/**
1019 * i2c_del_adapter - unregister I2C adapter
1020 * @adap: the adapter being unregistered
1021 * Context: can sleep
1022 *
1023 * This unregisters an I2C adapter which was previously registered
1024 * by @i2c_add_adapter or @i2c_add_numbered_adapter.
1025 */
1da177e4
LT
1026int i2c_del_adapter(struct i2c_adapter *adap)
1027{
1da177e4 1028 int res = 0;
35fc37f8 1029 struct i2c_adapter *found;
bbd2d9c9 1030 struct i2c_client *client, *next;
1da177e4
LT
1031
1032 /* First make sure that this adapter was ever added */
35fc37f8
JD
1033 mutex_lock(&core_lock);
1034 found = idr_find(&i2c_adapter_idr, adap->nr);
1035 mutex_unlock(&core_lock);
1036 if (found != adap) {
b6d7b3d1
JD
1037 pr_debug("i2c-core: attempting to delete unregistered "
1038 "adapter [%s]\n", adap->name);
35fc37f8 1039 return -EINVAL;
1da177e4
LT
1040 }
1041
026526f5 1042 /* Tell drivers about this removal */
35fc37f8 1043 mutex_lock(&core_lock);
026526f5 1044 res = bus_for_each_drv(&i2c_bus_type, NULL, adap,
69b0089a 1045 __process_removed_adapter);
35fc37f8 1046 mutex_unlock(&core_lock);
026526f5 1047 if (res)
35fc37f8 1048 return res;
1da177e4 1049
bbd2d9c9 1050 /* Remove devices instantiated from sysfs */
dafc50d1 1051 mutex_lock(&adap->userspace_clients_lock);
6629dcff
JD
1052 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1053 detected) {
1054 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name,
1055 client->addr);
1056 list_del(&client->detected);
1057 i2c_unregister_device(client);
bbd2d9c9 1058 }
dafc50d1 1059 mutex_unlock(&adap->userspace_clients_lock);
bbd2d9c9 1060
e549c2b5
JD
1061 /* Detach any active clients. This can't fail, thus we do not
1062 checking the returned value. */
1063 res = device_for_each_child(&adap->dev, NULL, __unregister_client);
1da177e4 1064
2bb5095a
JD
1065#ifdef CONFIG_I2C_COMPAT
1066 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
1067 adap->dev.parent);
1068#endif
1069
c5567521
TLSC
1070 /* device name is gone after device_unregister */
1071 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
1072
1da177e4
LT
1073 /* clean up the sysfs representation */
1074 init_completion(&adap->dev_released);
1da177e4 1075 device_unregister(&adap->dev);
1da177e4
LT
1076
1077 /* wait for sysfs to drop all references */
1078 wait_for_completion(&adap->dev_released);
1da177e4 1079
6e13e641 1080 /* free bus id */
35fc37f8 1081 mutex_lock(&core_lock);
1da177e4 1082 idr_remove(&i2c_adapter_idr, adap->nr);
35fc37f8 1083 mutex_unlock(&core_lock);
1da177e4 1084
bd4bc3db
JD
1085 /* Clear the device structure in case this adapter is ever going to be
1086 added again */
1087 memset(&adap->dev, 0, sizeof(adap->dev));
1088
35fc37f8 1089 return 0;
1da177e4 1090}
c0564606 1091EXPORT_SYMBOL(i2c_del_adapter);
1da177e4
LT
1092
1093
7b4fbc50
DB
1094/* ------------------------------------------------------------------------- */
1095
69b0089a 1096static int __process_new_driver(struct device *dev, void *data)
7f101a97 1097{
4f8cf824
JD
1098 if (dev->type != &i2c_adapter_type)
1099 return 0;
69b0089a 1100 return i2c_do_add_adapter(data, to_i2c_adapter(dev));
7f101a97
DY
1101}
1102
7b4fbc50
DB
1103/*
1104 * An i2c_driver is used with one or more i2c_client (device) nodes to access
729d6dd5 1105 * i2c slave chips, on a bus instance associated with some i2c_adapter.
1da177e4
LT
1106 */
1107
de59cf9e 1108int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
1da177e4 1109{
7eebcb7c 1110 int res;
1da177e4 1111
1d0b19c9
DB
1112 /* Can't register until after driver model init */
1113 if (unlikely(WARN_ON(!i2c_bus_type.p)))
1114 return -EAGAIN;
1115
1da177e4 1116 /* add the driver to the list of i2c drivers in the driver core */
de59cf9e 1117 driver->driver.owner = owner;
1da177e4 1118 driver->driver.bus = &i2c_bus_type;
1da177e4 1119
729d6dd5 1120 /* When registration returns, the driver core
6e13e641
DB
1121 * will have called probe() for all matching-but-unbound devices.
1122 */
1da177e4
LT
1123 res = driver_register(&driver->driver);
1124 if (res)
7eebcb7c 1125 return res;
438d6c2c 1126
35d8b2e6 1127 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
1da177e4 1128
4735c98f
JD
1129 INIT_LIST_HEAD(&driver->clients);
1130 /* Walk the adapters that are already present */
35fc37f8 1131 mutex_lock(&core_lock);
69b0089a 1132 bus_for_each_dev(&i2c_bus_type, NULL, driver, __process_new_driver);
7f101a97 1133 mutex_unlock(&core_lock);
35fc37f8 1134
7f101a97
DY
1135 return 0;
1136}
1137EXPORT_SYMBOL(i2c_register_driver);
1138
69b0089a 1139static int __process_removed_driver(struct device *dev, void *data)
7f101a97 1140{
4f8cf824
JD
1141 if (dev->type != &i2c_adapter_type)
1142 return 0;
69b0089a 1143 return i2c_do_del_adapter(data, to_i2c_adapter(dev));
1da177e4
LT
1144}
1145
a1d9e6e4
DB
1146/**
1147 * i2c_del_driver - unregister I2C driver
1148 * @driver: the driver being unregistered
d64f73be 1149 * Context: can sleep
a1d9e6e4 1150 */
b3e82096 1151void i2c_del_driver(struct i2c_driver *driver)
1da177e4 1152{
caada32a 1153 mutex_lock(&core_lock);
69b0089a 1154 bus_for_each_dev(&i2c_bus_type, NULL, driver, __process_removed_driver);
35fc37f8 1155 mutex_unlock(&core_lock);
1da177e4
LT
1156
1157 driver_unregister(&driver->driver);
35d8b2e6 1158 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
1da177e4 1159}
c0564606 1160EXPORT_SYMBOL(i2c_del_driver);
1da177e4 1161
7b4fbc50
DB
1162/* ------------------------------------------------------------------------- */
1163
e48d3319
JD
1164/**
1165 * i2c_use_client - increments the reference count of the i2c client structure
1166 * @client: the client being referenced
1167 *
1168 * Each live reference to a client should be refcounted. The driver model does
1169 * that automatically as part of driver binding, so that most drivers don't
1170 * need to do this explicitly: they hold a reference until they're unbound
1171 * from the device.
1172 *
1173 * A pointer to the client with the incremented reference counter is returned.
1174 */
1175struct i2c_client *i2c_use_client(struct i2c_client *client)
1da177e4 1176{
6ea438ec
DB
1177 if (client && get_device(&client->dev))
1178 return client;
1179 return NULL;
1da177e4 1180}
c0564606 1181EXPORT_SYMBOL(i2c_use_client);
1da177e4 1182
e48d3319
JD
1183/**
1184 * i2c_release_client - release a use of the i2c client structure
1185 * @client: the client being no longer referenced
1186 *
1187 * Must be called when a user of a client is finished with it.
1188 */
1189void i2c_release_client(struct i2c_client *client)
1da177e4 1190{
6ea438ec
DB
1191 if (client)
1192 put_device(&client->dev);
1da177e4 1193}
c0564606 1194EXPORT_SYMBOL(i2c_release_client);
1da177e4 1195
9b766b81
DB
1196struct i2c_cmd_arg {
1197 unsigned cmd;
1198 void *arg;
1199};
1200
1201static int i2c_cmd(struct device *dev, void *_arg)
1202{
1203 struct i2c_client *client = i2c_verify_client(dev);
1204 struct i2c_cmd_arg *arg = _arg;
1205
1206 if (client && client->driver && client->driver->command)
1207 client->driver->command(client, arg->cmd, arg->arg);
1208 return 0;
1209}
1210
1da177e4
LT
1211void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
1212{
9b766b81 1213 struct i2c_cmd_arg cmd_arg;
1da177e4 1214
9b766b81
DB
1215 cmd_arg.cmd = cmd;
1216 cmd_arg.arg = arg;
1217 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
1da177e4 1218}
c0564606 1219EXPORT_SYMBOL(i2c_clients_command);
1da177e4
LT
1220
1221static int __init i2c_init(void)
1222{
1223 int retval;
1224
1225 retval = bus_register(&i2c_bus_type);
1da177e4
LT
1226 if (retval)
1227 return retval;
2bb5095a
JD
1228#ifdef CONFIG_I2C_COMPAT
1229 i2c_adapter_compat_class = class_compat_register("i2c-adapter");
1230 if (!i2c_adapter_compat_class) {
1231 retval = -ENOMEM;
1232 goto bus_err;
1233 }
1234#endif
e9f1373b
DB
1235 retval = i2c_add_driver(&dummy_driver);
1236 if (retval)
2bb5095a 1237 goto class_err;
e9f1373b
DB
1238 return 0;
1239
2bb5095a
JD
1240class_err:
1241#ifdef CONFIG_I2C_COMPAT
1242 class_compat_unregister(i2c_adapter_compat_class);
e9f1373b 1243bus_err:
2bb5095a 1244#endif
e9f1373b
DB
1245 bus_unregister(&i2c_bus_type);
1246 return retval;
1da177e4
LT
1247}
1248
1249static void __exit i2c_exit(void)
1250{
e9f1373b 1251 i2c_del_driver(&dummy_driver);
2bb5095a
JD
1252#ifdef CONFIG_I2C_COMPAT
1253 class_compat_unregister(i2c_adapter_compat_class);
1254#endif
1da177e4
LT
1255 bus_unregister(&i2c_bus_type);
1256}
1257
a10f9e7c
DB
1258/* We must initialize early, because some subsystems register i2c drivers
1259 * in subsys_initcall() code, but are linked (and initialized) before i2c.
1260 */
1261postcore_initcall(i2c_init);
1da177e4
LT
1262module_exit(i2c_exit);
1263
1264/* ----------------------------------------------------
1265 * the functional interface to the i2c busses.
1266 * ----------------------------------------------------
1267 */
1268
a1cdedac
DB
1269/**
1270 * i2c_transfer - execute a single or combined I2C message
1271 * @adap: Handle to I2C bus
1272 * @msgs: One or more messages to execute before STOP is issued to
1273 * terminate the operation; each message begins with a START.
1274 * @num: Number of messages to be executed.
1275 *
1276 * Returns negative errno, else the number of messages executed.
1277 *
1278 * Note that there is no requirement that each message be sent to
1279 * the same slave address, although that is the most common model.
1280 */
09b8ce0a 1281int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
1da177e4 1282{
66b650f0
CW
1283 unsigned long orig_jiffies;
1284 int ret, try;
1da177e4 1285
a1cdedac
DB
1286 /* REVISIT the fault reporting model here is weak:
1287 *
1288 * - When we get an error after receiving N bytes from a slave,
1289 * there is no way to report "N".
1290 *
1291 * - When we get a NAK after transmitting N bytes to a slave,
1292 * there is no way to report "N" ... or to let the master
1293 * continue executing the rest of this combined message, if
1294 * that's the appropriate response.
1295 *
1296 * - When for example "num" is two and we successfully complete
1297 * the first message but get an error part way through the
1298 * second, it's unclear whether that should be reported as
1299 * one (discarding status on the second message) or errno
1300 * (discarding status on the first one).
1301 */
1302
1da177e4
LT
1303 if (adap->algo->master_xfer) {
1304#ifdef DEBUG
1305 for (ret = 0; ret < num; ret++) {
1306 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
209d27c3
JD
1307 "len=%d%s\n", ret, (msgs[ret].flags & I2C_M_RD)
1308 ? 'R' : 'W', msgs[ret].addr, msgs[ret].len,
1309 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
1da177e4
LT
1310 }
1311#endif
1312
cea443a8 1313 if (in_atomic() || irqs_disabled()) {
fe61e07e 1314 ret = i2c_trylock_adapter(adap);
cea443a8
MR
1315 if (!ret)
1316 /* I2C activity is ongoing. */
1317 return -EAGAIN;
1318 } else {
fe61e07e 1319 i2c_lock_adapter(adap);
cea443a8
MR
1320 }
1321
66b650f0
CW
1322 /* Retry automatically on arbitration loss */
1323 orig_jiffies = jiffies;
1324 for (ret = 0, try = 0; try <= adap->retries; try++) {
1325 ret = adap->algo->master_xfer(adap, msgs, num);
1326 if (ret != -EAGAIN)
1327 break;
1328 if (time_after(jiffies, orig_jiffies + adap->timeout))
1329 break;
1330 }
fe61e07e 1331 i2c_unlock_adapter(adap);
1da177e4
LT
1332
1333 return ret;
1334 } else {
1335 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
24a5bb7b 1336 return -EOPNOTSUPP;
1da177e4
LT
1337 }
1338}
c0564606 1339EXPORT_SYMBOL(i2c_transfer);
1da177e4 1340
a1cdedac
DB
1341/**
1342 * i2c_master_send - issue a single I2C message in master transmit mode
1343 * @client: Handle to slave device
1344 * @buf: Data that will be written to the slave
0c43ea54 1345 * @count: How many bytes to write, must be less than 64k since msg.len is u16
a1cdedac
DB
1346 *
1347 * Returns negative errno, or else the number of bytes written.
1348 */
7225acf4 1349int i2c_master_send(struct i2c_client *client, const char *buf, int count)
1da177e4
LT
1350{
1351 int ret;
7225acf4 1352 struct i2c_adapter *adap = client->adapter;
1da177e4
LT
1353 struct i2c_msg msg;
1354
815f55f2
JD
1355 msg.addr = client->addr;
1356 msg.flags = client->flags & I2C_M_TEN;
1357 msg.len = count;
1358 msg.buf = (char *)buf;
438d6c2c 1359
815f55f2 1360 ret = i2c_transfer(adap, &msg, 1);
1da177e4 1361
815f55f2
JD
1362 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
1363 transmitted, else error code. */
1364 return (ret == 1) ? count : ret;
1da177e4 1365}
c0564606 1366EXPORT_SYMBOL(i2c_master_send);
1da177e4 1367
a1cdedac
DB
1368/**
1369 * i2c_master_recv - issue a single I2C message in master receive mode
1370 * @client: Handle to slave device
1371 * @buf: Where to store data read from slave
0c43ea54 1372 * @count: How many bytes to read, must be less than 64k since msg.len is u16
a1cdedac
DB
1373 *
1374 * Returns negative errno, or else the number of bytes read.
1375 */
7225acf4 1376int i2c_master_recv(struct i2c_client *client, char *buf, int count)
1da177e4 1377{
7225acf4 1378 struct i2c_adapter *adap = client->adapter;
1da177e4
LT
1379 struct i2c_msg msg;
1380 int ret;
815f55f2
JD
1381
1382 msg.addr = client->addr;
1383 msg.flags = client->flags & I2C_M_TEN;
1384 msg.flags |= I2C_M_RD;
1385 msg.len = count;
1386 msg.buf = buf;
1387
1388 ret = i2c_transfer(adap, &msg, 1);
1389
1390 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
1391 transmitted, else error code. */
1392 return (ret == 1) ? count : ret;
1da177e4 1393}
c0564606 1394EXPORT_SYMBOL(i2c_master_recv);
1da177e4 1395
1da177e4
LT
1396/* ----------------------------------------------------
1397 * the i2c address scanning function
1398 * Will not work for 10-bit addresses!
1399 * ----------------------------------------------------
1400 */
1da177e4 1401
63e4e802
JD
1402/*
1403 * Legacy default probe function, mostly relevant for SMBus. The default
1404 * probe method is a quick write, but it is known to corrupt the 24RF08
1405 * EEPROMs due to a state machine bug, and could also irreversibly
1406 * write-protect some EEPROMs, so for address ranges 0x30-0x37 and 0x50-0x5f,
1407 * we use a short byte read instead. Also, some bus drivers don't implement
1408 * quick write, so we fallback to a byte read in that case too.
1409 * On x86, there is another special case for FSC hardware monitoring chips,
1410 * which want regular byte reads (address 0x73.) Fortunately, these are the
1411 * only known chips using this I2C address on PC hardware.
1412 * Returns 1 if probe succeeded, 0 if not.
1413 */
1414static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
1415{
1416 int err;
1417 union i2c_smbus_data dummy;
1418
1419#ifdef CONFIG_X86
1420 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
1421 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
1422 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
1423 I2C_SMBUS_BYTE_DATA, &dummy);
1424 else
1425#endif
8031d79b
JD
1426 if (!((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50)
1427 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
63e4e802
JD
1428 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
1429 I2C_SMBUS_QUICK, NULL);
8031d79b
JD
1430 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
1431 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
1432 I2C_SMBUS_BYTE, &dummy);
1433 else {
1434 dev_warn(&adap->dev, "No suitable probing method supported\n");
1435 err = -EOPNOTSUPP;
1436 }
63e4e802
JD
1437
1438 return err >= 0;
1439}
1440
ccfbbd08 1441static int i2c_detect_address(struct i2c_client *temp_client,
4735c98f
JD
1442 struct i2c_driver *driver)
1443{
1444 struct i2c_board_info info;
1445 struct i2c_adapter *adapter = temp_client->adapter;
1446 int addr = temp_client->addr;
1447 int err;
1448
1449 /* Make sure the address is valid */
656b8761
JD
1450 err = i2c_check_addr_validity(addr);
1451 if (err) {
4735c98f
JD
1452 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
1453 addr);
656b8761 1454 return err;
4735c98f
JD
1455 }
1456
1457 /* Skip if already in use */
3b5f794b 1458 if (i2c_check_addr_busy(adapter, addr))
4735c98f
JD
1459 return 0;
1460
ccfbbd08 1461 /* Make sure there is something at this address */
63e4e802
JD
1462 if (!i2c_default_probe(adapter, addr))
1463 return 0;
4735c98f
JD
1464
1465 /* Finally call the custom detection function */
1466 memset(&info, 0, sizeof(struct i2c_board_info));
1467 info.addr = addr;
310ec792 1468 err = driver->detect(temp_client, &info);
4735c98f
JD
1469 if (err) {
1470 /* -ENODEV is returned if the detection fails. We catch it
1471 here as this isn't an error. */
1472 return err == -ENODEV ? 0 : err;
1473 }
1474
1475 /* Consistency check */
1476 if (info.type[0] == '\0') {
1477 dev_err(&adapter->dev, "%s detection function provided "
1478 "no name for 0x%x\n", driver->driver.name,
1479 addr);
1480 } else {
1481 struct i2c_client *client;
1482
1483 /* Detection succeeded, instantiate the device */
1484 dev_dbg(&adapter->dev, "Creating %s at 0x%02x\n",
1485 info.type, info.addr);
1486 client = i2c_new_device(adapter, &info);
1487 if (client)
1488 list_add_tail(&client->detected, &driver->clients);
1489 else
1490 dev_err(&adapter->dev, "Failed creating %s at 0x%02x\n",
1491 info.type, info.addr);
1492 }
1493 return 0;
1494}
1495
1496static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
1497{
c3813d6a 1498 const unsigned short *address_list;
4735c98f
JD
1499 struct i2c_client *temp_client;
1500 int i, err = 0;
1501 int adap_id = i2c_adapter_id(adapter);
1502
c3813d6a
JD
1503 address_list = driver->address_list;
1504 if (!driver->detect || !address_list)
4735c98f
JD
1505 return 0;
1506
1507 /* Set up a temporary client to help detect callback */
1508 temp_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
1509 if (!temp_client)
1510 return -ENOMEM;
1511 temp_client->adapter = adapter;
1512
4329cf86
JD
1513 /* Stop here if the classes do not match */
1514 if (!(adapter->class & driver->class))
1515 goto exit_free;
1516
c3813d6a 1517 for (i = 0; address_list[i] != I2C_CLIENT_END; i += 1) {
4735c98f 1518 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
c3813d6a
JD
1519 "addr 0x%02x\n", adap_id, address_list[i]);
1520 temp_client->addr = address_list[i];
ccfbbd08 1521 err = i2c_detect_address(temp_client, driver);
4735c98f
JD
1522 if (err)
1523 goto exit_free;
1524 }
1525
1526 exit_free:
1527 kfree(temp_client);
1528 return err;
1529}
1530
d44f19d5
JD
1531int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr)
1532{
1533 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
1534 I2C_SMBUS_QUICK, NULL) >= 0;
1535}
1536EXPORT_SYMBOL_GPL(i2c_probe_func_quick_read);
1537
12b5053a
JD
1538struct i2c_client *
1539i2c_new_probed_device(struct i2c_adapter *adap,
1540 struct i2c_board_info *info,
9a94241a
JD
1541 unsigned short const *addr_list,
1542 int (*probe)(struct i2c_adapter *, unsigned short addr))
12b5053a
JD
1543{
1544 int i;
1545
8031d79b 1546 if (!probe)
9a94241a 1547 probe = i2c_default_probe;
12b5053a 1548
12b5053a
JD
1549 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
1550 /* Check address validity */
656b8761 1551 if (i2c_check_addr_validity(addr_list[i]) < 0) {
12b5053a
JD
1552 dev_warn(&adap->dev, "Invalid 7-bit address "
1553 "0x%02x\n", addr_list[i]);
1554 continue;
1555 }
1556
1557 /* Check address availability */
3b5f794b 1558 if (i2c_check_addr_busy(adap, addr_list[i])) {
12b5053a
JD
1559 dev_dbg(&adap->dev, "Address 0x%02x already in "
1560 "use, not probing\n", addr_list[i]);
1561 continue;
1562 }
1563
63e4e802 1564 /* Test address responsiveness */
9a94241a 1565 if (probe(adap, addr_list[i]))
63e4e802 1566 break;
12b5053a 1567 }
12b5053a
JD
1568
1569 if (addr_list[i] == I2C_CLIENT_END) {
1570 dev_dbg(&adap->dev, "Probing failed, no device found\n");
1571 return NULL;
1572 }
1573
1574 info->addr = addr_list[i];
1575 return i2c_new_device(adap, info);
1576}
1577EXPORT_SYMBOL_GPL(i2c_new_probed_device);
1578
7225acf4 1579struct i2c_adapter *i2c_get_adapter(int id)
1da177e4 1580{
1da177e4 1581 struct i2c_adapter *adapter;
438d6c2c 1582
caada32a 1583 mutex_lock(&core_lock);
1cf92b45 1584 adapter = idr_find(&i2c_adapter_idr, id);
a0920e10
MH
1585 if (adapter && !try_module_get(adapter->owner))
1586 adapter = NULL;
1587
caada32a 1588 mutex_unlock(&core_lock);
a0920e10 1589 return adapter;
1da177e4 1590}
c0564606 1591EXPORT_SYMBOL(i2c_get_adapter);
1da177e4
LT
1592
1593void i2c_put_adapter(struct i2c_adapter *adap)
1594{
1595 module_put(adap->owner);
1596}
c0564606 1597EXPORT_SYMBOL(i2c_put_adapter);
1da177e4
LT
1598
1599/* The SMBus parts */
1600
438d6c2c 1601#define POLY (0x1070U << 3)
09b8ce0a 1602static u8 crc8(u16 data)
1da177e4
LT
1603{
1604 int i;
438d6c2c 1605
7225acf4 1606 for (i = 0; i < 8; i++) {
438d6c2c 1607 if (data & 0x8000)
1da177e4
LT
1608 data = data ^ POLY;
1609 data = data << 1;
1610 }
1611 return (u8)(data >> 8);
1612}
1613
421ef47b
JD
1614/* Incremental CRC8 over count bytes in the array pointed to by p */
1615static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
1da177e4
LT
1616{
1617 int i;
1618
7225acf4 1619 for (i = 0; i < count; i++)
421ef47b 1620 crc = crc8((crc ^ p[i]) << 8);
1da177e4
LT
1621 return crc;
1622}
1623
421ef47b
JD
1624/* Assume a 7-bit address, which is reasonable for SMBus */
1625static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
1da177e4 1626{
421ef47b
JD
1627 /* The address will be sent first */
1628 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
1629 pec = i2c_smbus_pec(pec, &addr, 1);
1630
1631 /* The data buffer follows */
1632 return i2c_smbus_pec(pec, msg->buf, msg->len);
1da177e4
LT
1633}
1634
421ef47b
JD
1635/* Used for write only transactions */
1636static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
1da177e4 1637{
421ef47b
JD
1638 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
1639 msg->len++;
1da177e4
LT
1640}
1641
421ef47b
JD
1642/* Return <0 on CRC error
1643 If there was a write before this read (most cases) we need to take the
1644 partial CRC from the write part into account.
1645 Note that this function does modify the message (we need to decrease the
1646 message length to hide the CRC byte from the caller). */
1647static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
1da177e4 1648{
421ef47b
JD
1649 u8 rpec = msg->buf[--msg->len];
1650 cpec = i2c_smbus_msg_pec(cpec, msg);
1da177e4 1651
1da177e4
LT
1652 if (rpec != cpec) {
1653 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
1654 rpec, cpec);
24a5bb7b 1655 return -EBADMSG;
1da177e4 1656 }
438d6c2c 1657 return 0;
1da177e4
LT
1658}
1659
a1cdedac
DB
1660/**
1661 * i2c_smbus_read_byte - SMBus "receive byte" protocol
1662 * @client: Handle to slave device
1663 *
1664 * This executes the SMBus "receive byte" protocol, returning negative errno
1665 * else the byte received from the device.
1666 */
1da177e4
LT
1667s32 i2c_smbus_read_byte(struct i2c_client *client)
1668{
1669 union i2c_smbus_data data;
24a5bb7b
DB
1670 int status;
1671
1672 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1673 I2C_SMBUS_READ, 0,
1674 I2C_SMBUS_BYTE, &data);
1675 return (status < 0) ? status : data.byte;
1da177e4 1676}
c0564606 1677EXPORT_SYMBOL(i2c_smbus_read_byte);
1da177e4 1678
a1cdedac
DB
1679/**
1680 * i2c_smbus_write_byte - SMBus "send byte" protocol
1681 * @client: Handle to slave device
1682 * @value: Byte to be sent
1683 *
1684 * This executes the SMBus "send byte" protocol, returning negative errno
1685 * else zero on success.
1686 */
1da177e4
LT
1687s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
1688{
7225acf4 1689 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
421ef47b 1690 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
1da177e4 1691}
c0564606 1692EXPORT_SYMBOL(i2c_smbus_write_byte);
1da177e4 1693
a1cdedac
DB
1694/**
1695 * i2c_smbus_read_byte_data - SMBus "read byte" protocol
1696 * @client: Handle to slave device
1697 * @command: Byte interpreted by slave
1698 *
1699 * This executes the SMBus "read byte" protocol, returning negative errno
1700 * else a data byte received from the device.
1701 */
1da177e4
LT
1702s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
1703{
1704 union i2c_smbus_data data;
24a5bb7b
DB
1705 int status;
1706
1707 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1708 I2C_SMBUS_READ, command,
1709 I2C_SMBUS_BYTE_DATA, &data);
1710 return (status < 0) ? status : data.byte;
1da177e4 1711}
c0564606 1712EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1da177e4 1713
a1cdedac
DB
1714/**
1715 * i2c_smbus_write_byte_data - SMBus "write byte" protocol
1716 * @client: Handle to slave device
1717 * @command: Byte interpreted by slave
1718 * @value: Byte being written
1719 *
1720 * This executes the SMBus "write byte" protocol, returning negative errno
1721 * else zero on success.
1722 */
1da177e4
LT
1723s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
1724{
1725 union i2c_smbus_data data;
1726 data.byte = value;
7225acf4
FH
1727 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1728 I2C_SMBUS_WRITE, command,
1729 I2C_SMBUS_BYTE_DATA, &data);
1da177e4 1730}
c0564606 1731EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1da177e4 1732
a1cdedac
DB
1733/**
1734 * i2c_smbus_read_word_data - SMBus "read word" protocol
1735 * @client: Handle to slave device
1736 * @command: Byte interpreted by slave
1737 *
1738 * This executes the SMBus "read word" protocol, returning negative errno
1739 * else a 16-bit unsigned "word" received from the device.
1740 */
1da177e4
LT
1741s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
1742{
1743 union i2c_smbus_data data;
24a5bb7b
DB
1744 int status;
1745
1746 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1747 I2C_SMBUS_READ, command,
1748 I2C_SMBUS_WORD_DATA, &data);
1749 return (status < 0) ? status : data.word;
1da177e4 1750}
c0564606 1751EXPORT_SYMBOL(i2c_smbus_read_word_data);
1da177e4 1752
a1cdedac
DB
1753/**
1754 * i2c_smbus_write_word_data - SMBus "write word" protocol
1755 * @client: Handle to slave device
1756 * @command: Byte interpreted by slave
1757 * @value: 16-bit "word" being written
1758 *
1759 * This executes the SMBus "write word" protocol, returning negative errno
1760 * else zero on success.
1761 */
1da177e4
LT
1762s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
1763{
1764 union i2c_smbus_data data;
1765 data.word = value;
7225acf4
FH
1766 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1767 I2C_SMBUS_WRITE, command,
1768 I2C_SMBUS_WORD_DATA, &data);
1da177e4 1769}
c0564606 1770EXPORT_SYMBOL(i2c_smbus_write_word_data);
1da177e4 1771
596c88f4
PM
1772/**
1773 * i2c_smbus_process_call - SMBus "process call" protocol
1774 * @client: Handle to slave device
1775 * @command: Byte interpreted by slave
1776 * @value: 16-bit "word" being written
1777 *
1778 * This executes the SMBus "process call" protocol, returning negative errno
1779 * else a 16-bit unsigned "word" received from the device.
1780 */
1781s32 i2c_smbus_process_call(struct i2c_client *client, u8 command, u16 value)
1782{
1783 union i2c_smbus_data data;
1784 int status;
1785 data.word = value;
1786
1787 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1788 I2C_SMBUS_WRITE, command,
1789 I2C_SMBUS_PROC_CALL, &data);
1790 return (status < 0) ? status : data.word;
1791}
1792EXPORT_SYMBOL(i2c_smbus_process_call);
1793
a64ec07d 1794/**
a1cdedac 1795 * i2c_smbus_read_block_data - SMBus "block read" protocol
a64ec07d 1796 * @client: Handle to slave device
a1cdedac 1797 * @command: Byte interpreted by slave
a64ec07d
DB
1798 * @values: Byte array into which data will be read; big enough to hold
1799 * the data returned by the slave. SMBus allows at most 32 bytes.
1800 *
a1cdedac
DB
1801 * This executes the SMBus "block read" protocol, returning negative errno
1802 * else the number of data bytes in the slave's response.
a64ec07d
DB
1803 *
1804 * Note that using this function requires that the client's adapter support
1805 * the I2C_FUNC_SMBUS_READ_BLOCK_DATA functionality. Not all adapter drivers
1806 * support this; its emulation through I2C messaging relies on a specific
1807 * mechanism (I2C_M_RECV_LEN) which may not be implemented.
1808 */
b86a1bc8
JD
1809s32 i2c_smbus_read_block_data(struct i2c_client *client, u8 command,
1810 u8 *values)
1811{
1812 union i2c_smbus_data data;
24a5bb7b 1813 int status;
b86a1bc8 1814
24a5bb7b
DB
1815 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1816 I2C_SMBUS_READ, command,
1817 I2C_SMBUS_BLOCK_DATA, &data);
1818 if (status)
1819 return status;
b86a1bc8
JD
1820
1821 memcpy(values, &data.block[1], data.block[0]);
1822 return data.block[0];
1823}
1824EXPORT_SYMBOL(i2c_smbus_read_block_data);
1825
a1cdedac
DB
1826/**
1827 * i2c_smbus_write_block_data - SMBus "block write" protocol
1828 * @client: Handle to slave device
1829 * @command: Byte interpreted by slave
1830 * @length: Size of data block; SMBus allows at most 32 bytes
1831 * @values: Byte array which will be written.
1832 *
1833 * This executes the SMBus "block write" protocol, returning negative errno
1834 * else zero on success.
1835 */
1da177e4 1836s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
46f5ed75 1837 u8 length, const u8 *values)
1da177e4
LT
1838{
1839 union i2c_smbus_data data;
7656032b 1840
1da177e4
LT
1841 if (length > I2C_SMBUS_BLOCK_MAX)
1842 length = I2C_SMBUS_BLOCK_MAX;
1da177e4 1843 data.block[0] = length;
7656032b 1844 memcpy(&data.block[1], values, length);
7225acf4
FH
1845 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1846 I2C_SMBUS_WRITE, command,
1847 I2C_SMBUS_BLOCK_DATA, &data);
1da177e4 1848}
c0564606 1849EXPORT_SYMBOL(i2c_smbus_write_block_data);
1da177e4
LT
1850
1851/* Returns the number of read bytes */
4b2643d7
JD
1852s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command,
1853 u8 length, u8 *values)
1da177e4
LT
1854{
1855 union i2c_smbus_data data;
24a5bb7b 1856 int status;
7656032b 1857
4b2643d7
JD
1858 if (length > I2C_SMBUS_BLOCK_MAX)
1859 length = I2C_SMBUS_BLOCK_MAX;
1860 data.block[0] = length;
24a5bb7b
DB
1861 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1862 I2C_SMBUS_READ, command,
1863 I2C_SMBUS_I2C_BLOCK_DATA, &data);
1864 if (status < 0)
1865 return status;
7656032b
JD
1866
1867 memcpy(values, &data.block[1], data.block[0]);
1868 return data.block[0];
1da177e4 1869}
c0564606 1870EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1da177e4 1871
21bbd691 1872s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
46f5ed75 1873 u8 length, const u8 *values)
21bbd691
JD
1874{
1875 union i2c_smbus_data data;
1876
1877 if (length > I2C_SMBUS_BLOCK_MAX)
1878 length = I2C_SMBUS_BLOCK_MAX;
1879 data.block[0] = length;
1880 memcpy(data.block + 1, values, length);
1881 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1882 I2C_SMBUS_WRITE, command,
1883 I2C_SMBUS_I2C_BLOCK_DATA, &data);
1884}
c0564606 1885EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
21bbd691 1886
438d6c2c 1887/* Simulate a SMBus command using the i2c protocol
1da177e4 1888 No checking of parameters is done! */
7225acf4
FH
1889static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr,
1890 unsigned short flags,
1891 char read_write, u8 command, int size,
1892 union i2c_smbus_data *data)
1da177e4
LT
1893{
1894 /* So we need to generate a series of msgs. In the case of writing, we
1895 need to use only one message; when reading, we need two. We initialize
1896 most things with sane defaults, to keep the code below somewhat
1897 simpler. */
5c50d188
HI
1898 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1899 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
7225acf4 1900 int num = read_write == I2C_SMBUS_READ ? 2 : 1;
438d6c2c 1901 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1da177e4
LT
1902 { addr, flags | I2C_M_RD, 0, msgbuf1 }
1903 };
1904 int i;
421ef47b 1905 u8 partial_pec = 0;
24a5bb7b 1906 int status;
1da177e4
LT
1907
1908 msgbuf0[0] = command;
7225acf4 1909 switch (size) {
1da177e4
LT
1910 case I2C_SMBUS_QUICK:
1911 msg[0].len = 0;
1912 /* Special case: The read/write field is used as data */
f29d2e02
RK
1913 msg[0].flags = flags | (read_write == I2C_SMBUS_READ ?
1914 I2C_M_RD : 0);
1da177e4
LT
1915 num = 1;
1916 break;
1917 case I2C_SMBUS_BYTE:
1918 if (read_write == I2C_SMBUS_READ) {
1919 /* Special case: only a read! */
1920 msg[0].flags = I2C_M_RD | flags;
1921 num = 1;
1922 }
1923 break;
1924 case I2C_SMBUS_BYTE_DATA:
1925 if (read_write == I2C_SMBUS_READ)
1926 msg[1].len = 1;
1927 else {
1928 msg[0].len = 2;
1929 msgbuf0[1] = data->byte;
1930 }
1931 break;
1932 case I2C_SMBUS_WORD_DATA:
1933 if (read_write == I2C_SMBUS_READ)
1934 msg[1].len = 2;
1935 else {
7225acf4 1936 msg[0].len = 3;
1da177e4 1937 msgbuf0[1] = data->word & 0xff;
7eff82c8 1938 msgbuf0[2] = data->word >> 8;
1da177e4
LT
1939 }
1940 break;
1941 case I2C_SMBUS_PROC_CALL:
1942 num = 2; /* Special case */
1943 read_write = I2C_SMBUS_READ;
1944 msg[0].len = 3;
1945 msg[1].len = 2;
1946 msgbuf0[1] = data->word & 0xff;
7eff82c8 1947 msgbuf0[2] = data->word >> 8;
1da177e4
LT
1948 break;
1949 case I2C_SMBUS_BLOCK_DATA:
1da177e4 1950 if (read_write == I2C_SMBUS_READ) {
209d27c3
JD
1951 msg[1].flags |= I2C_M_RECV_LEN;
1952 msg[1].len = 1; /* block length will be added by
1953 the underlying bus driver */
1da177e4
LT
1954 } else {
1955 msg[0].len = data->block[0] + 2;
1956 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
24a5bb7b
DB
1957 dev_err(&adapter->dev,
1958 "Invalid block write size %d\n",
1959 data->block[0]);
1960 return -EINVAL;
1da177e4 1961 }
5c50d188 1962 for (i = 1; i < msg[0].len; i++)
1da177e4
LT
1963 msgbuf0[i] = data->block[i-1];
1964 }
1965 break;
1966 case I2C_SMBUS_BLOCK_PROC_CALL:
209d27c3
JD
1967 num = 2; /* Another special case */
1968 read_write = I2C_SMBUS_READ;
1969 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
24a5bb7b
DB
1970 dev_err(&adapter->dev,
1971 "Invalid block write size %d\n",
209d27c3 1972 data->block[0]);
24a5bb7b 1973 return -EINVAL;
209d27c3
JD
1974 }
1975 msg[0].len = data->block[0] + 2;
1976 for (i = 1; i < msg[0].len; i++)
1977 msgbuf0[i] = data->block[i-1];
1978 msg[1].flags |= I2C_M_RECV_LEN;
1979 msg[1].len = 1; /* block length will be added by
1980 the underlying bus driver */
1981 break;
1da177e4
LT
1982 case I2C_SMBUS_I2C_BLOCK_DATA:
1983 if (read_write == I2C_SMBUS_READ) {
4b2643d7 1984 msg[1].len = data->block[0];
1da177e4
LT
1985 } else {
1986 msg[0].len = data->block[0] + 1;
30dac746 1987 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
24a5bb7b
DB
1988 dev_err(&adapter->dev,
1989 "Invalid block write size %d\n",
1990 data->block[0]);
1991 return -EINVAL;
1da177e4
LT
1992 }
1993 for (i = 1; i <= data->block[0]; i++)
1994 msgbuf0[i] = data->block[i];
1995 }
1996 break;
1997 default:
24a5bb7b
DB
1998 dev_err(&adapter->dev, "Unsupported transaction %d\n", size);
1999 return -EOPNOTSUPP;
1da177e4
LT
2000 }
2001
421ef47b
JD
2002 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
2003 && size != I2C_SMBUS_I2C_BLOCK_DATA);
2004 if (i) {
2005 /* Compute PEC if first message is a write */
2006 if (!(msg[0].flags & I2C_M_RD)) {
438d6c2c 2007 if (num == 1) /* Write only */
421ef47b
JD
2008 i2c_smbus_add_pec(&msg[0]);
2009 else /* Write followed by read */
2010 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
2011 }
2012 /* Ask for PEC if last message is a read */
2013 if (msg[num-1].flags & I2C_M_RD)
438d6c2c 2014 msg[num-1].len++;
421ef47b
JD
2015 }
2016
24a5bb7b
DB
2017 status = i2c_transfer(adapter, msg, num);
2018 if (status < 0)
2019 return status;
1da177e4 2020
421ef47b
JD
2021 /* Check PEC if last message is a read */
2022 if (i && (msg[num-1].flags & I2C_M_RD)) {
24a5bb7b
DB
2023 status = i2c_smbus_check_pec(partial_pec, &msg[num-1]);
2024 if (status < 0)
2025 return status;
421ef47b
JD
2026 }
2027
1da177e4 2028 if (read_write == I2C_SMBUS_READ)
7225acf4
FH
2029 switch (size) {
2030 case I2C_SMBUS_BYTE:
2031 data->byte = msgbuf0[0];
2032 break;
2033 case I2C_SMBUS_BYTE_DATA:
2034 data->byte = msgbuf1[0];
2035 break;
2036 case I2C_SMBUS_WORD_DATA:
2037 case I2C_SMBUS_PROC_CALL:
2038 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
2039 break;
2040 case I2C_SMBUS_I2C_BLOCK_DATA:
2041 for (i = 0; i < data->block[0]; i++)
2042 data->block[i+1] = msgbuf1[i];
2043 break;
2044 case I2C_SMBUS_BLOCK_DATA:
2045 case I2C_SMBUS_BLOCK_PROC_CALL:
2046 for (i = 0; i < msgbuf1[0] + 1; i++)
2047 data->block[i] = msgbuf1[i];
2048 break;
1da177e4
LT
2049 }
2050 return 0;
2051}
2052
a1cdedac
DB
2053/**
2054 * i2c_smbus_xfer - execute SMBus protocol operations
2055 * @adapter: Handle to I2C bus
2056 * @addr: Address of SMBus slave on that bus
2057 * @flags: I2C_CLIENT_* flags (usually zero or I2C_CLIENT_PEC)
2058 * @read_write: I2C_SMBUS_READ or I2C_SMBUS_WRITE
2059 * @command: Byte interpreted by slave, for protocols which use such bytes
2060 * @protocol: SMBus protocol operation to execute, such as I2C_SMBUS_PROC_CALL
2061 * @data: Data to be read or written
2062 *
2063 * This executes an SMBus protocol operation, and returns a negative
2064 * errno code else zero on success.
2065 */
09b8ce0a 2066s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags,
a1cdedac 2067 char read_write, u8 command, int protocol,
09b8ce0a 2068 union i2c_smbus_data *data)
1da177e4 2069{
66b650f0
CW
2070 unsigned long orig_jiffies;
2071 int try;
1da177e4 2072 s32 res;
1da177e4
LT
2073
2074 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1da177e4
LT
2075
2076 if (adapter->algo->smbus_xfer) {
fe61e07e 2077 i2c_lock_adapter(adapter);
66b650f0
CW
2078
2079 /* Retry automatically on arbitration loss */
2080 orig_jiffies = jiffies;
2081 for (res = 0, try = 0; try <= adapter->retries; try++) {
2082 res = adapter->algo->smbus_xfer(adapter, addr, flags,
2083 read_write, command,
2084 protocol, data);
2085 if (res != -EAGAIN)
2086 break;
2087 if (time_after(jiffies,
2088 orig_jiffies + adapter->timeout))
2089 break;
2090 }
fe61e07e 2091 i2c_unlock_adapter(adapter);
1da177e4 2092 } else
7225acf4 2093 res = i2c_smbus_xfer_emulated(adapter, addr, flags, read_write,
a1cdedac 2094 command, protocol, data);
1da177e4 2095
1da177e4
LT
2096 return res;
2097}
1da177e4 2098EXPORT_SYMBOL(i2c_smbus_xfer);
1da177e4
LT
2099
2100MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
2101MODULE_DESCRIPTION("I2C-Bus main module");
2102MODULE_LICENSE("GPL");