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