]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/i2c/i2c-core.c
i2c: Stop using the redundant client list
[mirror_ubuntu-jammy-kernel.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
JD
22 SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
23 Jean Delvare <khali@linux-fr.org> */
1da177e4 24
1da177e4
LT
25#include <linux/module.h>
26#include <linux/kernel.h>
27#include <linux/errno.h>
28#include <linux/slab.h>
29#include <linux/i2c.h>
30#include <linux/init.h>
31#include <linux/idr.h>
32#include <linux/seq_file.h>
d052d1be 33#include <linux/platform_device.h>
b3585e4f 34#include <linux/mutex.h>
b8d6f45b 35#include <linux/completion.h>
cea443a8
MR
36#include <linux/hardirq.h>
37#include <linux/irqflags.h>
1da177e4 38#include <asm/uaccess.h>
87c6c229 39#include <asm/semaphore.h>
1da177e4 40
9c1600ed
DB
41#include "i2c-core.h"
42
1da177e4 43
caada32a 44static DEFINE_MUTEX(core_lock);
1da177e4
LT
45static DEFINE_IDR(i2c_adapter_idr);
46
a1d9e6e4 47#define is_newstyle_driver(d) ((d)->probe || (d)->remove)
f37dd80a
DB
48
49/* ------------------------------------------------------------------------- */
50
1da177e4
LT
51static int i2c_device_match(struct device *dev, struct device_driver *drv)
52{
7b4fbc50
DB
53 struct i2c_client *client = to_i2c_client(dev);
54 struct i2c_driver *driver = to_i2c_driver(drv);
55
56 /* make legacy i2c drivers bypass driver model probing entirely;
57 * such drivers scan each i2c adapter/bus themselves.
58 */
a1d9e6e4 59 if (!is_newstyle_driver(driver))
7b4fbc50
DB
60 return 0;
61
62 /* new style drivers use the same kind of driver matching policy
63 * as platform devices or SPI: compare device and driver IDs.
64 */
65 return strcmp(client->driver_name, drv->name) == 0;
1da177e4
LT
66}
67
7b4fbc50
DB
68#ifdef CONFIG_HOTPLUG
69
70/* uevent helps with hotplug: modprobe -q $(MODALIAS) */
7eff2e7a 71static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
7b4fbc50
DB
72{
73 struct i2c_client *client = to_i2c_client(dev);
7b4fbc50
DB
74
75 /* by definition, legacy drivers can't hotplug */
76 if (dev->driver || !client->driver_name)
77 return 0;
78
7eff2e7a 79 if (add_uevent_var(env, "MODALIAS=%s", client->driver_name))
7b4fbc50 80 return -ENOMEM;
7b4fbc50
DB
81 dev_dbg(dev, "uevent\n");
82 return 0;
83}
84
85#else
86#define i2c_device_uevent NULL
87#endif /* CONFIG_HOTPLUG */
88
f37dd80a 89static int i2c_device_probe(struct device *dev)
1da177e4 90{
7b4fbc50
DB
91 struct i2c_client *client = to_i2c_client(dev);
92 struct i2c_driver *driver = to_i2c_driver(dev->driver);
93
94 if (!driver->probe)
95 return -ENODEV;
96 client->driver = driver;
97 dev_dbg(dev, "probe\n");
98 return driver->probe(client);
f37dd80a 99}
1da177e4 100
f37dd80a
DB
101static int i2c_device_remove(struct device *dev)
102{
a1d9e6e4
DB
103 struct i2c_client *client = to_i2c_client(dev);
104 struct i2c_driver *driver;
105 int status;
106
107 if (!dev->driver)
108 return 0;
109
110 driver = to_i2c_driver(dev->driver);
111 if (driver->remove) {
112 dev_dbg(dev, "remove\n");
113 status = driver->remove(client);
114 } else {
115 dev->driver = NULL;
116 status = 0;
117 }
118 if (status == 0)
119 client->driver = NULL;
120 return status;
1da177e4
LT
121}
122
f37dd80a 123static void i2c_device_shutdown(struct device *dev)
1da177e4 124{
f37dd80a
DB
125 struct i2c_driver *driver;
126
127 if (!dev->driver)
128 return;
129 driver = to_i2c_driver(dev->driver);
130 if (driver->shutdown)
131 driver->shutdown(to_i2c_client(dev));
1da177e4
LT
132}
133
f37dd80a 134static int i2c_device_suspend(struct device * dev, pm_message_t mesg)
1da177e4 135{
f37dd80a
DB
136 struct i2c_driver *driver;
137
138 if (!dev->driver)
139 return 0;
140 driver = to_i2c_driver(dev->driver);
141 if (!driver->suspend)
142 return 0;
143 return driver->suspend(to_i2c_client(dev), mesg);
1da177e4
LT
144}
145
f37dd80a 146static int i2c_device_resume(struct device * dev)
1da177e4 147{
f37dd80a
DB
148 struct i2c_driver *driver;
149
150 if (!dev->driver)
151 return 0;
152 driver = to_i2c_driver(dev->driver);
153 if (!driver->resume)
154 return 0;
155 return driver->resume(to_i2c_client(dev));
1da177e4
LT
156}
157
7b4fbc50
DB
158static void i2c_client_release(struct device *dev)
159{
160 struct i2c_client *client = to_i2c_client(dev);
161 complete(&client->released);
162}
163
9c1600ed
DB
164static void i2c_client_dev_release(struct device *dev)
165{
166 kfree(to_i2c_client(dev));
167}
168
7b4fbc50
DB
169static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
170{
171 struct i2c_client *client = to_i2c_client(dev);
172 return sprintf(buf, "%s\n", client->name);
173}
174
175static ssize_t show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
176{
177 struct i2c_client *client = to_i2c_client(dev);
178 return client->driver_name
179 ? sprintf(buf, "%s\n", client->driver_name)
180 : 0;
181}
182
183static struct device_attribute i2c_dev_attrs[] = {
184 __ATTR(name, S_IRUGO, show_client_name, NULL),
185 /* modalias helps coldplug: modprobe $(cat .../modalias) */
186 __ATTR(modalias, S_IRUGO, show_modalias, NULL),
187 { },
188};
189
83eaaed0 190static struct bus_type i2c_bus_type = {
f37dd80a 191 .name = "i2c",
7b4fbc50 192 .dev_attrs = i2c_dev_attrs,
f37dd80a 193 .match = i2c_device_match,
7b4fbc50 194 .uevent = i2c_device_uevent,
f37dd80a
DB
195 .probe = i2c_device_probe,
196 .remove = i2c_device_remove,
197 .shutdown = i2c_device_shutdown,
198 .suspend = i2c_device_suspend,
199 .resume = i2c_device_resume,
b864c7d5
RK
200};
201
9b766b81
DB
202
203/**
204 * i2c_verify_client - return parameter as i2c_client, or NULL
205 * @dev: device, probably from some driver model iterator
206 *
207 * When traversing the driver model tree, perhaps using driver model
208 * iterators like @device_for_each_child(), you can't assume very much
209 * about the nodes you find. Use this function to avoid oopses caused
210 * by wrongly treating some non-I2C device as an i2c_client.
211 */
212struct i2c_client *i2c_verify_client(struct device *dev)
213{
214 return (dev->bus == &i2c_bus_type)
215 ? to_i2c_client(dev)
216 : NULL;
217}
218EXPORT_SYMBOL(i2c_verify_client);
219
220
9c1600ed
DB
221/**
222 * i2c_new_device - instantiate an i2c device for use with a new style driver
223 * @adap: the adapter managing the device
224 * @info: describes one I2C device; bus_num is ignored
d64f73be 225 * Context: can sleep
9c1600ed
DB
226 *
227 * Create a device to work with a new style i2c driver, where binding is
228 * handled through driver model probe()/remove() methods. This call is not
229 * appropriate for use by mainboad initialization logic, which usually runs
230 * during an arch_initcall() long before any i2c_adapter could exist.
231 *
232 * This returns the new i2c client, which may be saved for later use with
233 * i2c_unregister_device(); or NULL to indicate an error.
234 */
235struct i2c_client *
236i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
237{
238 struct i2c_client *client;
239 int status;
240
241 client = kzalloc(sizeof *client, GFP_KERNEL);
242 if (!client)
243 return NULL;
244
245 client->adapter = adap;
246
247 client->dev.platform_data = info->platform_data;
3bbb835d
DB
248 device_init_wakeup(&client->dev, info->flags & I2C_CLIENT_WAKE);
249
250 client->flags = info->flags & ~I2C_CLIENT_WAKE;
9c1600ed
DB
251 client->addr = info->addr;
252 client->irq = info->irq;
253
254 strlcpy(client->driver_name, info->driver_name,
255 sizeof(client->driver_name));
256 strlcpy(client->name, info->type, sizeof(client->name));
257
258 /* a new style driver may be bound to this device when we
259 * return from this function, or any later moment (e.g. maybe
260 * hotplugging will load the driver module). and the device
261 * refcount model is the standard driver model one.
262 */
263 status = i2c_attach_client(client);
264 if (status < 0) {
265 kfree(client);
266 client = NULL;
267 }
268 return client;
269}
270EXPORT_SYMBOL_GPL(i2c_new_device);
271
272
273/**
274 * i2c_unregister_device - reverse effect of i2c_new_device()
275 * @client: value returned from i2c_new_device()
d64f73be 276 * Context: can sleep
9c1600ed
DB
277 */
278void i2c_unregister_device(struct i2c_client *client)
a1d9e6e4
DB
279{
280 struct i2c_adapter *adapter = client->adapter;
281 struct i2c_driver *driver = client->driver;
282
283 if (driver && !is_newstyle_driver(driver)) {
284 dev_err(&client->dev, "can't unregister devices "
285 "with legacy drivers\n");
286 WARN_ON(1);
287 return;
288 }
289
290 mutex_lock(&adapter->clist_lock);
291 list_del(&client->list);
292 mutex_unlock(&adapter->clist_lock);
293
294 device_unregister(&client->dev);
295}
9c1600ed 296EXPORT_SYMBOL_GPL(i2c_unregister_device);
a1d9e6e4
DB
297
298
f37dd80a
DB
299/* ------------------------------------------------------------------------- */
300
16ffadfc
DB
301/* I2C bus adapters -- one roots each I2C or SMBUS segment */
302
83eaaed0 303static void i2c_adapter_dev_release(struct device *dev)
1da177e4 304{
ef2c8321 305 struct i2c_adapter *adap = to_i2c_adapter(dev);
1da177e4
LT
306 complete(&adap->dev_released);
307}
308
16ffadfc
DB
309static ssize_t
310show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
311{
ef2c8321 312 struct i2c_adapter *adap = to_i2c_adapter(dev);
16ffadfc
DB
313 return sprintf(buf, "%s\n", adap->name);
314}
b119dc3f 315
16ffadfc
DB
316static struct device_attribute i2c_adapter_attrs[] = {
317 __ATTR(name, S_IRUGO, show_adapter_name, NULL),
318 { },
319};
b119dc3f 320
83eaaed0 321static struct class i2c_adapter_class = {
b119dc3f
DB
322 .owner = THIS_MODULE,
323 .name = "i2c-adapter",
16ffadfc 324 .dev_attrs = i2c_adapter_attrs,
1da177e4
LT
325};
326
9c1600ed
DB
327static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
328{
329 struct i2c_devinfo *devinfo;
330
331 mutex_lock(&__i2c_board_lock);
332 list_for_each_entry(devinfo, &__i2c_board_list, list) {
333 if (devinfo->busnum == adapter->nr
334 && !i2c_new_device(adapter,
335 &devinfo->board_info))
336 printk(KERN_ERR "i2c-core: can't create i2c%d-%04x\n",
337 i2c_adapter_id(adapter),
338 devinfo->board_info.addr);
339 }
340 mutex_unlock(&__i2c_board_lock);
341}
342
026526f5
JD
343static int i2c_do_add_adapter(struct device_driver *d, void *data)
344{
345 struct i2c_driver *driver = to_i2c_driver(d);
346 struct i2c_adapter *adap = data;
347
348 if (driver->attach_adapter) {
349 /* We ignore the return code; if it fails, too bad */
350 driver->attach_adapter(adap);
351 }
352 return 0;
353}
354
6e13e641 355static int i2c_register_adapter(struct i2c_adapter *adap)
1da177e4 356{
026526f5 357 int res = 0, dummy;
1da177e4 358
5c085d36
IM
359 mutex_init(&adap->bus_lock);
360 mutex_init(&adap->clist_lock);
1da177e4
LT
361 INIT_LIST_HEAD(&adap->clients);
362
caada32a 363 mutex_lock(&core_lock);
6e13e641 364
1da177e4
LT
365 /* Add the adapter to the driver core.
366 * If the parent pointer is not set up,
367 * we add this adapter to the host bus.
368 */
b119dc3f 369 if (adap->dev.parent == NULL) {
1da177e4 370 adap->dev.parent = &platform_bus;
fe2c8d51
JD
371 pr_debug("I2C adapter driver [%s] forgot to specify "
372 "physical device\n", adap->name);
b119dc3f 373 }
1da177e4 374 sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
1da177e4 375 adap->dev.release = &i2c_adapter_dev_release;
fccb56e4 376 adap->dev.class = &i2c_adapter_class;
b119c6c9
JD
377 res = device_register(&adap->dev);
378 if (res)
379 goto out_list;
1da177e4 380
b6d7b3d1
JD
381 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
382
6e13e641
DB
383 /* create pre-declared device nodes for new-style drivers */
384 if (adap->nr < __i2c_first_dynamic_bus_num)
385 i2c_scan_static_board_info(adap);
386
7b4fbc50 387 /* let legacy drivers scan this bus for matching devices */
026526f5
JD
388 dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap,
389 i2c_do_add_adapter);
1da177e4 390
1da177e4 391out_unlock:
caada32a 392 mutex_unlock(&core_lock);
1da177e4 393 return res;
b119c6c9 394
b119c6c9 395out_list:
b119c6c9
JD
396 idr_remove(&i2c_adapter_idr, adap->nr);
397 goto out_unlock;
1da177e4
LT
398}
399
6e13e641
DB
400/**
401 * i2c_add_adapter - declare i2c adapter, use dynamic bus number
402 * @adapter: the adapter to add
d64f73be 403 * Context: can sleep
6e13e641
DB
404 *
405 * This routine is used to declare an I2C adapter when its bus number
406 * doesn't matter. Examples: for I2C adapters dynamically added by
407 * USB links or PCI plugin cards.
408 *
409 * When this returns zero, a new bus number was allocated and stored
410 * in adap->nr, and the specified adapter became available for clients.
411 * Otherwise, a negative errno value is returned.
412 */
413int i2c_add_adapter(struct i2c_adapter *adapter)
414{
415 int id, res = 0;
416
417retry:
418 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
419 return -ENOMEM;
420
caada32a 421 mutex_lock(&core_lock);
6e13e641
DB
422 /* "above" here means "above or equal to", sigh */
423 res = idr_get_new_above(&i2c_adapter_idr, adapter,
424 __i2c_first_dynamic_bus_num, &id);
caada32a 425 mutex_unlock(&core_lock);
6e13e641
DB
426
427 if (res < 0) {
428 if (res == -EAGAIN)
429 goto retry;
430 return res;
431 }
432
433 adapter->nr = id;
434 return i2c_register_adapter(adapter);
435}
436EXPORT_SYMBOL(i2c_add_adapter);
437
438/**
439 * i2c_add_numbered_adapter - declare i2c adapter, use static bus number
440 * @adap: the adapter to register (with adap->nr initialized)
d64f73be 441 * Context: can sleep
6e13e641
DB
442 *
443 * This routine is used to declare an I2C adapter when its bus number
444 * matters. Example: for I2C adapters from system-on-chip CPUs, or
445 * otherwise built in to the system's mainboard, and where i2c_board_info
446 * is used to properly configure I2C devices.
447 *
448 * If no devices have pre-been declared for this bus, then be sure to
449 * register the adapter before any dynamically allocated ones. Otherwise
450 * the required bus ID may not be available.
451 *
452 * When this returns zero, the specified adapter became available for
453 * clients using the bus number provided in adap->nr. Also, the table
454 * of I2C devices pre-declared using i2c_register_board_info() is scanned,
455 * and the appropriate driver model device nodes are created. Otherwise, a
456 * negative errno value is returned.
457 */
458int i2c_add_numbered_adapter(struct i2c_adapter *adap)
459{
460 int id;
461 int status;
462
463 if (adap->nr & ~MAX_ID_MASK)
464 return -EINVAL;
465
466retry:
467 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
468 return -ENOMEM;
469
caada32a 470 mutex_lock(&core_lock);
6e13e641
DB
471 /* "above" here means "above or equal to", sigh;
472 * we need the "equal to" result to force the result
473 */
474 status = idr_get_new_above(&i2c_adapter_idr, adap, adap->nr, &id);
475 if (status == 0 && id != adap->nr) {
476 status = -EBUSY;
477 idr_remove(&i2c_adapter_idr, id);
478 }
caada32a 479 mutex_unlock(&core_lock);
6e13e641
DB
480 if (status == -EAGAIN)
481 goto retry;
482
483 if (status == 0)
484 status = i2c_register_adapter(adap);
485 return status;
486}
487EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
488
026526f5
JD
489static int i2c_do_del_adapter(struct device_driver *d, void *data)
490{
491 struct i2c_driver *driver = to_i2c_driver(d);
492 struct i2c_adapter *adapter = data;
493 int res;
494
495 if (!driver->detach_adapter)
496 return 0;
497 res = driver->detach_adapter(adapter);
498 if (res)
499 dev_err(&adapter->dev, "detach_adapter failed (%d) "
500 "for driver [%s]\n", res, driver->driver.name);
501 return res;
502}
503
d64f73be
DB
504/**
505 * i2c_del_adapter - unregister I2C adapter
506 * @adap: the adapter being unregistered
507 * Context: can sleep
508 *
509 * This unregisters an I2C adapter which was previously registered
510 * by @i2c_add_adapter or @i2c_add_numbered_adapter.
511 */
1da177e4
LT
512int i2c_del_adapter(struct i2c_adapter *adap)
513{
514 struct list_head *item, *_n;
1da177e4
LT
515 struct i2c_client *client;
516 int res = 0;
517
caada32a 518 mutex_lock(&core_lock);
1da177e4
LT
519
520 /* First make sure that this adapter was ever added */
87c6c229 521 if (idr_find(&i2c_adapter_idr, adap->nr) != adap) {
b6d7b3d1
JD
522 pr_debug("i2c-core: attempting to delete unregistered "
523 "adapter [%s]\n", adap->name);
1da177e4
LT
524 res = -EINVAL;
525 goto out_unlock;
526 }
527
026526f5
JD
528 /* Tell drivers about this removal */
529 res = bus_for_each_drv(&i2c_bus_type, NULL, adap,
530 i2c_do_del_adapter);
531 if (res)
532 goto out_unlock;
1da177e4
LT
533
534 /* detach any active clients. This must be done first, because
a551acc2 535 * it can fail; in which case we give up. */
1da177e4 536 list_for_each_safe(item, _n, &adap->clients) {
a1d9e6e4
DB
537 struct i2c_driver *driver;
538
1da177e4 539 client = list_entry(item, struct i2c_client, list);
a1d9e6e4
DB
540 driver = client->driver;
541
542 /* new style, follow standard driver model */
543 if (!driver || is_newstyle_driver(driver)) {
544 i2c_unregister_device(client);
545 continue;
546 }
1da177e4 547
a1d9e6e4
DB
548 /* legacy drivers create and remove clients themselves */
549 if ((res = driver->detach_client(client))) {
b6d7b3d1
JD
550 dev_err(&adap->dev, "detach_client failed for client "
551 "[%s] at address 0x%02x\n", client->name,
1da177e4
LT
552 client->addr);
553 goto out_unlock;
554 }
555 }
556
557 /* clean up the sysfs representation */
558 init_completion(&adap->dev_released);
1da177e4 559 device_unregister(&adap->dev);
1da177e4
LT
560
561 /* wait for sysfs to drop all references */
562 wait_for_completion(&adap->dev_released);
1da177e4 563
6e13e641 564 /* free bus id */
1da177e4
LT
565 idr_remove(&i2c_adapter_idr, adap->nr);
566
b6d7b3d1 567 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
1da177e4
LT
568
569 out_unlock:
caada32a 570 mutex_unlock(&core_lock);
1da177e4
LT
571 return res;
572}
c0564606 573EXPORT_SYMBOL(i2c_del_adapter);
1da177e4
LT
574
575
7b4fbc50
DB
576/* ------------------------------------------------------------------------- */
577
578/*
579 * An i2c_driver is used with one or more i2c_client (device) nodes to access
580 * i2c slave chips, on a bus instance associated with some i2c_adapter. There
581 * are two models for binding the driver to its device: "new style" drivers
582 * follow the standard Linux driver model and just respond to probe() calls
583 * issued if the driver core sees they match(); "legacy" drivers create device
584 * nodes themselves.
1da177e4
LT
585 */
586
de59cf9e 587int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
1da177e4 588{
7eebcb7c 589 int res;
1da177e4 590
7b4fbc50 591 /* new style driver methods can't mix with legacy ones */
a1d9e6e4 592 if (is_newstyle_driver(driver)) {
7b4fbc50
DB
593 if (driver->attach_adapter || driver->detach_adapter
594 || driver->detach_client) {
595 printk(KERN_WARNING
596 "i2c-core: driver [%s] is confused\n",
597 driver->driver.name);
598 return -EINVAL;
599 }
600 }
601
1da177e4 602 /* add the driver to the list of i2c drivers in the driver core */
de59cf9e 603 driver->driver.owner = owner;
1da177e4 604 driver->driver.bus = &i2c_bus_type;
1da177e4 605
6e13e641
DB
606 /* for new style drivers, when registration returns the driver core
607 * will have called probe() for all matching-but-unbound devices.
608 */
1da177e4
LT
609 res = driver_register(&driver->driver);
610 if (res)
7eebcb7c 611 return res;
438d6c2c 612
caada32a 613 mutex_lock(&core_lock);
7eebcb7c 614
35d8b2e6 615 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
1da177e4 616
7b4fbc50 617 /* legacy drivers scan i2c busses directly */
8a994755 618 if (driver->attach_adapter) {
4ad4eac6
DB
619 struct i2c_adapter *adapter;
620
87c6c229
JD
621 down(&i2c_adapter_class.sem);
622 list_for_each_entry(adapter, &i2c_adapter_class.devices,
623 dev.node) {
1da177e4
LT
624 driver->attach_adapter(adapter);
625 }
87c6c229 626 up(&i2c_adapter_class.sem);
1da177e4
LT
627 }
628
caada32a 629 mutex_unlock(&core_lock);
7eebcb7c 630 return 0;
1da177e4 631}
de59cf9e 632EXPORT_SYMBOL(i2c_register_driver);
1da177e4 633
a1d9e6e4
DB
634/**
635 * i2c_del_driver - unregister I2C driver
636 * @driver: the driver being unregistered
d64f73be 637 * Context: can sleep
a1d9e6e4 638 */
b3e82096 639void i2c_del_driver(struct i2c_driver *driver)
1da177e4 640{
87c6c229 641 struct list_head *item2, *_n;
1da177e4
LT
642 struct i2c_client *client;
643 struct i2c_adapter *adap;
438d6c2c 644
caada32a 645 mutex_lock(&core_lock);
1da177e4 646
a1d9e6e4
DB
647 /* new-style driver? */
648 if (is_newstyle_driver(driver))
649 goto unregister;
650
1da177e4 651 /* Have a look at each adapter, if clients of this driver are still
438d6c2c 652 * attached. If so, detach them to be able to kill the driver
1da177e4 653 * afterwards.
1da177e4 654 */
87c6c229
JD
655 down(&i2c_adapter_class.sem);
656 list_for_each_entry(adap, &i2c_adapter_class.devices, dev.node) {
1da177e4 657 if (driver->detach_adapter) {
b3e82096 658 if (driver->detach_adapter(adap)) {
b6d7b3d1 659 dev_err(&adap->dev, "detach_adapter failed "
35d8b2e6
LR
660 "for driver [%s]\n",
661 driver->driver.name);
1da177e4
LT
662 }
663 } else {
664 list_for_each_safe(item2, _n, &adap->clients) {
665 client = list_entry(item2, struct i2c_client, list);
666 if (client->driver != driver)
667 continue;
b6d7b3d1
JD
668 dev_dbg(&adap->dev, "detaching client [%s] "
669 "at 0x%02x\n", client->name,
670 client->addr);
b3e82096 671 if (driver->detach_client(client)) {
b6d7b3d1
JD
672 dev_err(&adap->dev, "detach_client "
673 "failed for client [%s] at "
674 "0x%02x\n", client->name,
1da177e4 675 client->addr);
1da177e4
LT
676 }
677 }
678 }
679 }
87c6c229 680 up(&i2c_adapter_class.sem);
1da177e4 681
a1d9e6e4 682 unregister:
1da177e4 683 driver_unregister(&driver->driver);
35d8b2e6 684 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
1da177e4 685
caada32a 686 mutex_unlock(&core_lock);
1da177e4 687}
c0564606 688EXPORT_SYMBOL(i2c_del_driver);
1da177e4 689
7b4fbc50
DB
690/* ------------------------------------------------------------------------- */
691
9b766b81 692static int __i2c_check_addr(struct device *dev, void *addrp)
1da177e4 693{
9b766b81
DB
694 struct i2c_client *client = i2c_verify_client(dev);
695 int addr = *(int *)addrp;
1da177e4 696
9b766b81
DB
697 if (client && client->addr == addr)
698 return -EBUSY;
1da177e4
LT
699 return 0;
700}
701
5e31c2bd 702static int i2c_check_addr(struct i2c_adapter *adapter, int addr)
1da177e4 703{
9b766b81 704 return device_for_each_child(&adapter->dev, &addr, __i2c_check_addr);
1da177e4
LT
705}
706
707int i2c_attach_client(struct i2c_client *client)
708{
709 struct i2c_adapter *adapter = client->adapter;
b119c6c9 710 int res = 0;
1da177e4 711
5c085d36 712 mutex_lock(&adapter->clist_lock);
9b766b81 713 if (i2c_check_addr(client->adapter, client->addr)) {
b119c6c9
JD
714 res = -EBUSY;
715 goto out_unlock;
1da177e4
LT
716 }
717 list_add_tail(&client->list,&adapter->clients);
438d6c2c 718
1da177e4 719 client->dev.parent = &client->adapter->dev;
1da177e4 720 client->dev.bus = &i2c_bus_type;
9c1600ed
DB
721
722 if (client->driver)
723 client->dev.driver = &client->driver->driver;
724
de81d2aa 725 if (client->driver && !is_newstyle_driver(client->driver)) {
9c1600ed 726 client->dev.release = i2c_client_release;
de81d2aa
DB
727 client->dev.uevent_suppress = 1;
728 } else
9c1600ed 729 client->dev.release = i2c_client_dev_release;
438d6c2c 730
1da177e4
LT
731 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
732 "%d-%04x", i2c_adapter_id(adapter), client->addr);
b6d7b3d1
JD
733 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
734 client->name, client->dev.bus_id);
b119c6c9
JD
735 res = device_register(&client->dev);
736 if (res)
737 goto out_list;
b119c6c9 738 mutex_unlock(&adapter->clist_lock);
77ed74da
JD
739
740 if (adapter->client_register) {
741 if (adapter->client_register(client)) {
742 dev_dbg(&adapter->dev, "client_register "
743 "failed for client [%s] at 0x%02x\n",
744 client->name, client->addr);
745 }
746 }
747
748 return 0;
b119c6c9 749
b119c6c9
JD
750out_list:
751 list_del(&client->list);
752 dev_err(&adapter->dev, "Failed to attach i2c client %s at 0x%02x "
753 "(%d)\n", client->name, client->addr, res);
77ed74da
JD
754out_unlock:
755 mutex_unlock(&adapter->clist_lock);
756 return res;
1da177e4 757}
c0564606 758EXPORT_SYMBOL(i2c_attach_client);
1da177e4
LT
759
760int i2c_detach_client(struct i2c_client *client)
761{
762 struct i2c_adapter *adapter = client->adapter;
763 int res = 0;
438d6c2c 764
1da177e4
LT
765 if (adapter->client_unregister) {
766 res = adapter->client_unregister(client);
767 if (res) {
768 dev_err(&client->dev,
86749e85
JD
769 "client_unregister [%s] failed, "
770 "client not detached\n", client->name);
1da177e4
LT
771 goto out;
772 }
773 }
774
5c085d36 775 mutex_lock(&adapter->clist_lock);
1da177e4
LT
776 list_del(&client->list);
777 init_completion(&client->released);
1da177e4 778 device_unregister(&client->dev);
5c085d36 779 mutex_unlock(&adapter->clist_lock);
1da177e4
LT
780 wait_for_completion(&client->released);
781
782 out:
783 return res;
784}
c0564606 785EXPORT_SYMBOL(i2c_detach_client);
1da177e4 786
e48d3319
JD
787/**
788 * i2c_use_client - increments the reference count of the i2c client structure
789 * @client: the client being referenced
790 *
791 * Each live reference to a client should be refcounted. The driver model does
792 * that automatically as part of driver binding, so that most drivers don't
793 * need to do this explicitly: they hold a reference until they're unbound
794 * from the device.
795 *
796 * A pointer to the client with the incremented reference counter is returned.
797 */
798struct i2c_client *i2c_use_client(struct i2c_client *client)
1da177e4 799{
bdc511f4 800 get_device(&client->dev);
e48d3319 801 return client;
1da177e4 802}
c0564606 803EXPORT_SYMBOL(i2c_use_client);
1da177e4 804
e48d3319
JD
805/**
806 * i2c_release_client - release a use of the i2c client structure
807 * @client: the client being no longer referenced
808 *
809 * Must be called when a user of a client is finished with it.
810 */
811void i2c_release_client(struct i2c_client *client)
1da177e4 812{
bdc511f4 813 put_device(&client->dev);
1da177e4 814}
c0564606 815EXPORT_SYMBOL(i2c_release_client);
1da177e4 816
9b766b81
DB
817struct i2c_cmd_arg {
818 unsigned cmd;
819 void *arg;
820};
821
822static int i2c_cmd(struct device *dev, void *_arg)
823{
824 struct i2c_client *client = i2c_verify_client(dev);
825 struct i2c_cmd_arg *arg = _arg;
826
827 if (client && client->driver && client->driver->command)
828 client->driver->command(client, arg->cmd, arg->arg);
829 return 0;
830}
831
1da177e4
LT
832void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
833{
9b766b81 834 struct i2c_cmd_arg cmd_arg;
1da177e4 835
9b766b81
DB
836 cmd_arg.cmd = cmd;
837 cmd_arg.arg = arg;
838 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
1da177e4 839}
c0564606 840EXPORT_SYMBOL(i2c_clients_command);
1da177e4
LT
841
842static int __init i2c_init(void)
843{
844 int retval;
845
846 retval = bus_register(&i2c_bus_type);
1da177e4
LT
847 if (retval)
848 return retval;
849 return class_register(&i2c_adapter_class);
850}
851
852static void __exit i2c_exit(void)
853{
854 class_unregister(&i2c_adapter_class);
1da177e4
LT
855 bus_unregister(&i2c_bus_type);
856}
857
858subsys_initcall(i2c_init);
859module_exit(i2c_exit);
860
861/* ----------------------------------------------------
862 * the functional interface to the i2c busses.
863 * ----------------------------------------------------
864 */
865
866int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
867{
868 int ret;
869
870 if (adap->algo->master_xfer) {
871#ifdef DEBUG
872 for (ret = 0; ret < num; ret++) {
873 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
209d27c3
JD
874 "len=%d%s\n", ret, (msgs[ret].flags & I2C_M_RD)
875 ? 'R' : 'W', msgs[ret].addr, msgs[ret].len,
876 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
1da177e4
LT
877 }
878#endif
879
cea443a8
MR
880 if (in_atomic() || irqs_disabled()) {
881 ret = mutex_trylock(&adap->bus_lock);
882 if (!ret)
883 /* I2C activity is ongoing. */
884 return -EAGAIN;
885 } else {
886 mutex_lock_nested(&adap->bus_lock, adap->level);
887 }
888
1da177e4 889 ret = adap->algo->master_xfer(adap,msgs,num);
5c085d36 890 mutex_unlock(&adap->bus_lock);
1da177e4
LT
891
892 return ret;
893 } else {
894 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
895 return -ENOSYS;
896 }
897}
c0564606 898EXPORT_SYMBOL(i2c_transfer);
1da177e4
LT
899
900int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
901{
902 int ret;
903 struct i2c_adapter *adap=client->adapter;
904 struct i2c_msg msg;
905
815f55f2
JD
906 msg.addr = client->addr;
907 msg.flags = client->flags & I2C_M_TEN;
908 msg.len = count;
909 msg.buf = (char *)buf;
438d6c2c 910
815f55f2 911 ret = i2c_transfer(adap, &msg, 1);
1da177e4 912
815f55f2
JD
913 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
914 transmitted, else error code. */
915 return (ret == 1) ? count : ret;
1da177e4 916}
c0564606 917EXPORT_SYMBOL(i2c_master_send);
1da177e4
LT
918
919int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
920{
921 struct i2c_adapter *adap=client->adapter;
922 struct i2c_msg msg;
923 int ret;
815f55f2
JD
924
925 msg.addr = client->addr;
926 msg.flags = client->flags & I2C_M_TEN;
927 msg.flags |= I2C_M_RD;
928 msg.len = count;
929 msg.buf = buf;
930
931 ret = i2c_transfer(adap, &msg, 1);
932
933 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
934 transmitted, else error code. */
935 return (ret == 1) ? count : ret;
1da177e4 936}
c0564606 937EXPORT_SYMBOL(i2c_master_recv);
1da177e4 938
1da177e4
LT
939/* ----------------------------------------------------
940 * the i2c address scanning function
941 * Will not work for 10-bit addresses!
942 * ----------------------------------------------------
943 */
a89ba0bc
JD
944static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
945 int (*found_proc) (struct i2c_adapter *, int, int))
946{
947 int err;
948
949 /* Make sure the address is valid */
950 if (addr < 0x03 || addr > 0x77) {
951 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
952 addr);
953 return -EINVAL;
9fc6adfa
JD
954 }
955
a89ba0bc
JD
956 /* Skip if already in use */
957 if (i2c_check_addr(adapter, addr))
958 return 0;
959
960 /* Make sure there is something at this address, unless forced */
4c9337da
JD
961 if (kind < 0) {
962 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
963 I2C_SMBUS_QUICK, NULL) < 0)
964 return 0;
965
966 /* prevent 24RF08 corruption */
967 if ((addr & ~0x0f) == 0x50)
968 i2c_smbus_xfer(adapter, addr, 0, 0, 0,
969 I2C_SMBUS_QUICK, NULL);
970 }
a89ba0bc
JD
971
972 /* Finally call the custom detection function */
973 err = found_proc(adapter, addr, kind);
a89ba0bc
JD
974 /* -ENODEV can be returned if there is a chip at the given address
975 but it isn't supported by this chip driver. We catch it here as
976 this isn't an error. */
114fd183
JD
977 if (err == -ENODEV)
978 err = 0;
979
980 if (err)
981 dev_warn(&adapter->dev, "Client creation failed at 0x%x (%d)\n",
982 addr, err);
983 return err;
9fc6adfa
JD
984}
985
1da177e4 986int i2c_probe(struct i2c_adapter *adapter,
bfb6df24 987 const struct i2c_client_address_data *address_data,
1da177e4
LT
988 int (*found_proc) (struct i2c_adapter *, int, int))
989{
a89ba0bc 990 int i, err;
1da177e4
LT
991 int adap_id = i2c_adapter_id(adapter);
992
a89ba0bc
JD
993 /* Force entries are done first, and are not affected by ignore
994 entries */
995 if (address_data->forces) {
bfb6df24 996 const unsigned short * const *forces = address_data->forces;
a89ba0bc
JD
997 int kind;
998
999 for (kind = 0; forces[kind]; kind++) {
1000 for (i = 0; forces[kind][i] != I2C_CLIENT_END;
1001 i += 2) {
1002 if (forces[kind][i] == adap_id
1003 || forces[kind][i] == ANY_I2C_BUS) {
1004 dev_dbg(&adapter->dev, "found force "
1005 "parameter for adapter %d, "
1006 "addr 0x%02x, kind %d\n",
1007 adap_id, forces[kind][i + 1],
1008 kind);
1009 err = i2c_probe_address(adapter,
1010 forces[kind][i + 1],
1011 kind, found_proc);
1012 if (err)
1013 return err;
1014 }
1da177e4
LT
1015 }
1016 }
a89ba0bc 1017 }
1da177e4 1018
4366dc94
JD
1019 /* Stop here if we can't use SMBUS_QUICK */
1020 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
1021 if (address_data->probe[0] == I2C_CLIENT_END
1022 && address_data->normal_i2c[0] == I2C_CLIENT_END)
438d6c2c 1023 return 0;
4366dc94
JD
1024
1025 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
1026 "can't probe for chips\n");
1027 return -1;
1028 }
1029
a89ba0bc
JD
1030 /* Probe entries are done second, and are not affected by ignore
1031 entries either */
1032 for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
1033 if (address_data->probe[i] == adap_id
1034 || address_data->probe[i] == ANY_I2C_BUS) {
1035 dev_dbg(&adapter->dev, "found probe parameter for "
1036 "adapter %d, addr 0x%02x\n", adap_id,
1037 address_data->probe[i + 1]);
1038 err = i2c_probe_address(adapter,
1039 address_data->probe[i + 1],
1040 -1, found_proc);
1041 if (err)
1042 return err;
1da177e4 1043 }
a89ba0bc 1044 }
1da177e4 1045
a89ba0bc
JD
1046 /* Normal entries are done last, unless shadowed by an ignore entry */
1047 for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
1048 int j, ignore;
1049
1050 ignore = 0;
1051 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
1052 j += 2) {
1053 if ((address_data->ignore[j] == adap_id ||
1054 address_data->ignore[j] == ANY_I2C_BUS)
1055 && address_data->ignore[j + 1]
1056 == address_data->normal_i2c[i]) {
1057 dev_dbg(&adapter->dev, "found ignore "
1058 "parameter for adapter %d, "
1059 "addr 0x%02x\n", adap_id,
1060 address_data->ignore[j + 1]);
2369df93
MH
1061 ignore = 1;
1062 break;
1da177e4
LT
1063 }
1064 }
a89ba0bc 1065 if (ignore)
1da177e4
LT
1066 continue;
1067
a89ba0bc
JD
1068 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
1069 "addr 0x%02x\n", adap_id,
1070 address_data->normal_i2c[i]);
1071 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
1072 -1, found_proc);
1073 if (err)
1074 return err;
1da177e4 1075 }
a89ba0bc 1076
1da177e4
LT
1077 return 0;
1078}
c0564606 1079EXPORT_SYMBOL(i2c_probe);
1da177e4 1080
12b5053a
JD
1081struct i2c_client *
1082i2c_new_probed_device(struct i2c_adapter *adap,
1083 struct i2c_board_info *info,
1084 unsigned short const *addr_list)
1085{
1086 int i;
1087
1088 /* Stop here if the bus doesn't support probing */
1089 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) {
1090 dev_err(&adap->dev, "Probing not supported\n");
1091 return NULL;
1092 }
1093
1094 mutex_lock(&adap->clist_lock);
1095 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
1096 /* Check address validity */
1097 if (addr_list[i] < 0x03 || addr_list[i] > 0x77) {
1098 dev_warn(&adap->dev, "Invalid 7-bit address "
1099 "0x%02x\n", addr_list[i]);
1100 continue;
1101 }
1102
1103 /* Check address availability */
9b766b81 1104 if (i2c_check_addr(adap, addr_list[i])) {
12b5053a
JD
1105 dev_dbg(&adap->dev, "Address 0x%02x already in "
1106 "use, not probing\n", addr_list[i]);
1107 continue;
1108 }
1109
1110 /* Test address responsiveness
1111 The default probe method is a quick write, but it is known
1112 to corrupt the 24RF08 EEPROMs due to a state machine bug,
1113 and could also irreversibly write-protect some EEPROMs, so
1114 for address ranges 0x30-0x37 and 0x50-0x5f, we use a byte
1115 read instead. Also, some bus drivers don't implement
1116 quick write, so we fallback to a byte read it that case
1117 too. */
1118 if ((addr_list[i] & ~0x07) == 0x30
1119 || (addr_list[i] & ~0x0f) == 0x50
1120 || !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) {
1121 if (i2c_smbus_xfer(adap, addr_list[i], 0,
1122 I2C_SMBUS_READ, 0,
1123 I2C_SMBUS_BYTE, NULL) >= 0)
1124 break;
1125 } else {
1126 if (i2c_smbus_xfer(adap, addr_list[i], 0,
1127 I2C_SMBUS_WRITE, 0,
1128 I2C_SMBUS_QUICK, NULL) >= 0)
1129 break;
1130 }
1131 }
1132 mutex_unlock(&adap->clist_lock);
1133
1134 if (addr_list[i] == I2C_CLIENT_END) {
1135 dev_dbg(&adap->dev, "Probing failed, no device found\n");
1136 return NULL;
1137 }
1138
1139 info->addr = addr_list[i];
1140 return i2c_new_device(adap, info);
1141}
1142EXPORT_SYMBOL_GPL(i2c_new_probed_device);
1143
1da177e4
LT
1144struct i2c_adapter* i2c_get_adapter(int id)
1145{
1da177e4 1146 struct i2c_adapter *adapter;
438d6c2c 1147
caada32a 1148 mutex_lock(&core_lock);
a0920e10
MH
1149 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
1150 if (adapter && !try_module_get(adapter->owner))
1151 adapter = NULL;
1152
caada32a 1153 mutex_unlock(&core_lock);
a0920e10 1154 return adapter;
1da177e4 1155}
c0564606 1156EXPORT_SYMBOL(i2c_get_adapter);
1da177e4
LT
1157
1158void i2c_put_adapter(struct i2c_adapter *adap)
1159{
1160 module_put(adap->owner);
1161}
c0564606 1162EXPORT_SYMBOL(i2c_put_adapter);
1da177e4
LT
1163
1164/* The SMBus parts */
1165
438d6c2c 1166#define POLY (0x1070U << 3)
1da177e4
LT
1167static u8
1168crc8(u16 data)
1169{
1170 int i;
438d6c2c 1171
1da177e4 1172 for(i = 0; i < 8; i++) {
438d6c2c 1173 if (data & 0x8000)
1da177e4
LT
1174 data = data ^ POLY;
1175 data = data << 1;
1176 }
1177 return (u8)(data >> 8);
1178}
1179
421ef47b
JD
1180/* Incremental CRC8 over count bytes in the array pointed to by p */
1181static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
1da177e4
LT
1182{
1183 int i;
1184
1185 for(i = 0; i < count; i++)
421ef47b 1186 crc = crc8((crc ^ p[i]) << 8);
1da177e4
LT
1187 return crc;
1188}
1189
421ef47b
JD
1190/* Assume a 7-bit address, which is reasonable for SMBus */
1191static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
1da177e4 1192{
421ef47b
JD
1193 /* The address will be sent first */
1194 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
1195 pec = i2c_smbus_pec(pec, &addr, 1);
1196
1197 /* The data buffer follows */
1198 return i2c_smbus_pec(pec, msg->buf, msg->len);
1da177e4
LT
1199}
1200
421ef47b
JD
1201/* Used for write only transactions */
1202static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
1da177e4 1203{
421ef47b
JD
1204 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
1205 msg->len++;
1da177e4
LT
1206}
1207
421ef47b
JD
1208/* Return <0 on CRC error
1209 If there was a write before this read (most cases) we need to take the
1210 partial CRC from the write part into account.
1211 Note that this function does modify the message (we need to decrease the
1212 message length to hide the CRC byte from the caller). */
1213static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
1da177e4 1214{
421ef47b
JD
1215 u8 rpec = msg->buf[--msg->len];
1216 cpec = i2c_smbus_msg_pec(cpec, msg);
1da177e4 1217
1da177e4
LT
1218 if (rpec != cpec) {
1219 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
1220 rpec, cpec);
1221 return -1;
1222 }
438d6c2c 1223 return 0;
1da177e4
LT
1224}
1225
1226s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
1227{
1228 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
438d6c2c 1229 value,0,I2C_SMBUS_QUICK,NULL);
1da177e4 1230}
c0564606 1231EXPORT_SYMBOL(i2c_smbus_write_quick);
1da177e4
LT
1232
1233s32 i2c_smbus_read_byte(struct i2c_client *client)
1234{
1235 union i2c_smbus_data data;
1236 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1237 I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
1238 return -1;
1239 else
7eff82c8 1240 return data.byte;
1da177e4 1241}
c0564606 1242EXPORT_SYMBOL(i2c_smbus_read_byte);
1da177e4
LT
1243
1244s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
1245{
1da177e4 1246 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
421ef47b 1247 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
1da177e4 1248}
c0564606 1249EXPORT_SYMBOL(i2c_smbus_write_byte);
1da177e4
LT
1250
1251s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
1252{
1253 union i2c_smbus_data data;
1254 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1255 I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
1256 return -1;
1257 else
7eff82c8 1258 return data.byte;
1da177e4 1259}
c0564606 1260EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1da177e4
LT
1261
1262s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
1263{
1264 union i2c_smbus_data data;
1265 data.byte = value;
1266 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1267 I2C_SMBUS_WRITE,command,
1268 I2C_SMBUS_BYTE_DATA,&data);
1269}
c0564606 1270EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1da177e4
LT
1271
1272s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
1273{
1274 union i2c_smbus_data data;
1275 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1276 I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
1277 return -1;
1278 else
7eff82c8 1279 return data.word;
1da177e4 1280}
c0564606 1281EXPORT_SYMBOL(i2c_smbus_read_word_data);
1da177e4
LT
1282
1283s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
1284{
1285 union i2c_smbus_data data;
1286 data.word = value;
1287 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1288 I2C_SMBUS_WRITE,command,
1289 I2C_SMBUS_WORD_DATA,&data);
1290}
c0564606 1291EXPORT_SYMBOL(i2c_smbus_write_word_data);
1da177e4 1292
a64ec07d
DB
1293/**
1294 * i2c_smbus_read_block_data - SMBus block read request
1295 * @client: Handle to slave device
1296 * @command: Command byte issued to let the slave know what data should
1297 * be returned
1298 * @values: Byte array into which data will be read; big enough to hold
1299 * the data returned by the slave. SMBus allows at most 32 bytes.
1300 *
1301 * Returns the number of bytes read in the slave's response, else a
1302 * negative number to indicate some kind of error.
1303 *
1304 * Note that using this function requires that the client's adapter support
1305 * the I2C_FUNC_SMBUS_READ_BLOCK_DATA functionality. Not all adapter drivers
1306 * support this; its emulation through I2C messaging relies on a specific
1307 * mechanism (I2C_M_RECV_LEN) which may not be implemented.
1308 */
b86a1bc8
JD
1309s32 i2c_smbus_read_block_data(struct i2c_client *client, u8 command,
1310 u8 *values)
1311{
1312 union i2c_smbus_data data;
1313
1314 if (i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1315 I2C_SMBUS_READ, command,
1316 I2C_SMBUS_BLOCK_DATA, &data))
1317 return -1;
1318
1319 memcpy(values, &data.block[1], data.block[0]);
1320 return data.block[0];
1321}
1322EXPORT_SYMBOL(i2c_smbus_read_block_data);
1323
1da177e4 1324s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
46f5ed75 1325 u8 length, const u8 *values)
1da177e4
LT
1326{
1327 union i2c_smbus_data data;
7656032b 1328
1da177e4
LT
1329 if (length > I2C_SMBUS_BLOCK_MAX)
1330 length = I2C_SMBUS_BLOCK_MAX;
1da177e4 1331 data.block[0] = length;
7656032b 1332 memcpy(&data.block[1], values, length);
1da177e4
LT
1333 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1334 I2C_SMBUS_WRITE,command,
1335 I2C_SMBUS_BLOCK_DATA,&data);
1336}
c0564606 1337EXPORT_SYMBOL(i2c_smbus_write_block_data);
1da177e4
LT
1338
1339/* Returns the number of read bytes */
4b2643d7
JD
1340s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command,
1341 u8 length, u8 *values)
1da177e4
LT
1342{
1343 union i2c_smbus_data data;
7656032b 1344
4b2643d7
JD
1345 if (length > I2C_SMBUS_BLOCK_MAX)
1346 length = I2C_SMBUS_BLOCK_MAX;
1347 data.block[0] = length;
1da177e4
LT
1348 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1349 I2C_SMBUS_READ,command,
1350 I2C_SMBUS_I2C_BLOCK_DATA,&data))
1351 return -1;
7656032b
JD
1352
1353 memcpy(values, &data.block[1], data.block[0]);
1354 return data.block[0];
1da177e4 1355}
c0564606 1356EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1da177e4 1357
21bbd691 1358s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
46f5ed75 1359 u8 length, const u8 *values)
21bbd691
JD
1360{
1361 union i2c_smbus_data data;
1362
1363 if (length > I2C_SMBUS_BLOCK_MAX)
1364 length = I2C_SMBUS_BLOCK_MAX;
1365 data.block[0] = length;
1366 memcpy(data.block + 1, values, length);
1367 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1368 I2C_SMBUS_WRITE, command,
1369 I2C_SMBUS_I2C_BLOCK_DATA, &data);
1370}
c0564606 1371EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
21bbd691 1372
438d6c2c 1373/* Simulate a SMBus command using the i2c protocol
1da177e4 1374 No checking of parameters is done! */
438d6c2c 1375static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1da177e4 1376 unsigned short flags,
438d6c2c 1377 char read_write, u8 command, int size,
1da177e4
LT
1378 union i2c_smbus_data * data)
1379{
1380 /* So we need to generate a series of msgs. In the case of writing, we
1381 need to use only one message; when reading, we need two. We initialize
1382 most things with sane defaults, to keep the code below somewhat
1383 simpler. */
5c50d188
HI
1384 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1385 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
1da177e4 1386 int num = read_write == I2C_SMBUS_READ?2:1;
438d6c2c 1387 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1da177e4
LT
1388 { addr, flags | I2C_M_RD, 0, msgbuf1 }
1389 };
1390 int i;
421ef47b 1391 u8 partial_pec = 0;
1da177e4
LT
1392
1393 msgbuf0[0] = command;
1394 switch(size) {
1395 case I2C_SMBUS_QUICK:
1396 msg[0].len = 0;
1397 /* Special case: The read/write field is used as data */
1398 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
1399 num = 1;
1400 break;
1401 case I2C_SMBUS_BYTE:
1402 if (read_write == I2C_SMBUS_READ) {
1403 /* Special case: only a read! */
1404 msg[0].flags = I2C_M_RD | flags;
1405 num = 1;
1406 }
1407 break;
1408 case I2C_SMBUS_BYTE_DATA:
1409 if (read_write == I2C_SMBUS_READ)
1410 msg[1].len = 1;
1411 else {
1412 msg[0].len = 2;
1413 msgbuf0[1] = data->byte;
1414 }
1415 break;
1416 case I2C_SMBUS_WORD_DATA:
1417 if (read_write == I2C_SMBUS_READ)
1418 msg[1].len = 2;
1419 else {
1420 msg[0].len=3;
1421 msgbuf0[1] = data->word & 0xff;
7eff82c8 1422 msgbuf0[2] = data->word >> 8;
1da177e4
LT
1423 }
1424 break;
1425 case I2C_SMBUS_PROC_CALL:
1426 num = 2; /* Special case */
1427 read_write = I2C_SMBUS_READ;
1428 msg[0].len = 3;
1429 msg[1].len = 2;
1430 msgbuf0[1] = data->word & 0xff;
7eff82c8 1431 msgbuf0[2] = data->word >> 8;
1da177e4
LT
1432 break;
1433 case I2C_SMBUS_BLOCK_DATA:
1da177e4 1434 if (read_write == I2C_SMBUS_READ) {
209d27c3
JD
1435 msg[1].flags |= I2C_M_RECV_LEN;
1436 msg[1].len = 1; /* block length will be added by
1437 the underlying bus driver */
1da177e4
LT
1438 } else {
1439 msg[0].len = data->block[0] + 2;
1440 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1441 dev_err(&adapter->dev, "smbus_access called with "
1442 "invalid block write size (%d)\n",
1443 data->block[0]);
1444 return -1;
1445 }
5c50d188 1446 for (i = 1; i < msg[0].len; i++)
1da177e4
LT
1447 msgbuf0[i] = data->block[i-1];
1448 }
1449 break;
1450 case I2C_SMBUS_BLOCK_PROC_CALL:
209d27c3
JD
1451 num = 2; /* Another special case */
1452 read_write = I2C_SMBUS_READ;
1453 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
1454 dev_err(&adapter->dev, "%s called with invalid "
1455 "block proc call size (%d)\n", __FUNCTION__,
1456 data->block[0]);
1457 return -1;
1458 }
1459 msg[0].len = data->block[0] + 2;
1460 for (i = 1; i < msg[0].len; i++)
1461 msgbuf0[i] = data->block[i-1];
1462 msg[1].flags |= I2C_M_RECV_LEN;
1463 msg[1].len = 1; /* block length will be added by
1464 the underlying bus driver */
1465 break;
1da177e4
LT
1466 case I2C_SMBUS_I2C_BLOCK_DATA:
1467 if (read_write == I2C_SMBUS_READ) {
4b2643d7 1468 msg[1].len = data->block[0];
1da177e4
LT
1469 } else {
1470 msg[0].len = data->block[0] + 1;
30dac746 1471 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1da177e4
LT
1472 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1473 "invalid block write size (%d)\n",
1474 data->block[0]);
1475 return -1;
1476 }
1477 for (i = 1; i <= data->block[0]; i++)
1478 msgbuf0[i] = data->block[i];
1479 }
1480 break;
1481 default:
1482 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1483 size);
1484 return -1;
1485 }
1486
421ef47b
JD
1487 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1488 && size != I2C_SMBUS_I2C_BLOCK_DATA);
1489 if (i) {
1490 /* Compute PEC if first message is a write */
1491 if (!(msg[0].flags & I2C_M_RD)) {
438d6c2c 1492 if (num == 1) /* Write only */
421ef47b
JD
1493 i2c_smbus_add_pec(&msg[0]);
1494 else /* Write followed by read */
1495 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1496 }
1497 /* Ask for PEC if last message is a read */
1498 if (msg[num-1].flags & I2C_M_RD)
438d6c2c 1499 msg[num-1].len++;
421ef47b
JD
1500 }
1501
1da177e4
LT
1502 if (i2c_transfer(adapter, msg, num) < 0)
1503 return -1;
1504
421ef47b
JD
1505 /* Check PEC if last message is a read */
1506 if (i && (msg[num-1].flags & I2C_M_RD)) {
1507 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1508 return -1;
1509 }
1510
1da177e4
LT
1511 if (read_write == I2C_SMBUS_READ)
1512 switch(size) {
1513 case I2C_SMBUS_BYTE:
1514 data->byte = msgbuf0[0];
1515 break;
1516 case I2C_SMBUS_BYTE_DATA:
1517 data->byte = msgbuf1[0];
1518 break;
438d6c2c 1519 case I2C_SMBUS_WORD_DATA:
1da177e4
LT
1520 case I2C_SMBUS_PROC_CALL:
1521 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1522 break;
1523 case I2C_SMBUS_I2C_BLOCK_DATA:
4b2643d7 1524 for (i = 0; i < data->block[0]; i++)
1da177e4
LT
1525 data->block[i+1] = msgbuf1[i];
1526 break;
209d27c3
JD
1527 case I2C_SMBUS_BLOCK_DATA:
1528 case I2C_SMBUS_BLOCK_PROC_CALL:
1529 for (i = 0; i < msgbuf1[0] + 1; i++)
1530 data->block[i] = msgbuf1[i];
1531 break;
1da177e4
LT
1532 }
1533 return 0;
1534}
1535
1536
1537s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
438d6c2c 1538 char read_write, u8 command, int size,
1da177e4
LT
1539 union i2c_smbus_data * data)
1540{
1541 s32 res;
1da177e4
LT
1542
1543 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1da177e4
LT
1544
1545 if (adapter->algo->smbus_xfer) {
5c085d36 1546 mutex_lock(&adapter->bus_lock);
1da177e4
LT
1547 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1548 command,size,data);
5c085d36 1549 mutex_unlock(&adapter->bus_lock);
1da177e4
LT
1550 } else
1551 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1552 command,size,data);
1553
1da177e4
LT
1554 return res;
1555}
1da177e4 1556EXPORT_SYMBOL(i2c_smbus_xfer);
1da177e4
LT
1557
1558MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1559MODULE_DESCRIPTION("I2C-Bus main module");
1560MODULE_LICENSE("GPL");