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