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