[PATCH] i2c: Speed up block transfers
[linux-2.6.22.y-op.git] / drivers / i2c / i2c-core.c
blob2b0c555aa0117382a9319a03ec7f84358e5ccb51
1 /* i2c-core.c - a device driver for the iic-bus interface */
2 /* ------------------------------------------------------------------------- */
3 /* Copyright (C) 1995-99 Simon G. Vogl
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.
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.
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 /* ------------------------------------------------------------------------- */
20 /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
21 All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
22 SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
23 Jean Delvare <khali@linux-fr.org> */
25 #include <linux/module.h>
26 #include <linux/kernel.h>
27 #include <linux/errno.h>
28 #include <linux/slab.h>
29 #include <linux/i2c.h>
30 #include <linux/init.h>
31 #include <linux/idr.h>
32 #include <linux/seq_file.h>
33 #include <linux/platform_device.h>
34 #include <linux/mutex.h>
35 #include <asm/uaccess.h>
38 static LIST_HEAD(adapters);
39 static LIST_HEAD(drivers);
40 static DEFINE_MUTEX(core_lists);
41 static DEFINE_IDR(i2c_adapter_idr);
43 /* match always succeeds, as we want the probe() to tell if we really accept this match */
44 static int i2c_device_match(struct device *dev, struct device_driver *drv)
46 return 1;
49 static int i2c_bus_suspend(struct device * dev, pm_message_t state)
51 int rc = 0;
53 if (dev->driver && dev->driver->suspend)
54 rc = dev->driver->suspend(dev, state);
55 return rc;
58 static int i2c_bus_resume(struct device * dev)
60 int rc = 0;
62 if (dev->driver && dev->driver->resume)
63 rc = dev->driver->resume(dev);
64 return rc;
67 static int i2c_device_probe(struct device *dev)
69 return -ENODEV;
72 static int i2c_device_remove(struct device *dev)
74 return 0;
77 struct bus_type i2c_bus_type = {
78 .name = "i2c",
79 .match = i2c_device_match,
80 .probe = i2c_device_probe,
81 .remove = i2c_device_remove,
82 .suspend = i2c_bus_suspend,
83 .resume = i2c_bus_resume,
86 void i2c_adapter_dev_release(struct device *dev)
88 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
89 complete(&adap->dev_released);
92 struct device_driver i2c_adapter_driver = {
93 .owner = THIS_MODULE,
94 .name = "i2c_adapter",
95 .bus = &i2c_bus_type,
98 static void i2c_adapter_class_dev_release(struct class_device *dev)
100 struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev);
101 complete(&adap->class_dev_released);
104 struct class i2c_adapter_class = {
105 .owner = THIS_MODULE,
106 .name = "i2c-adapter",
107 .release = &i2c_adapter_class_dev_release,
110 static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
112 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
113 return sprintf(buf, "%s\n", adap->name);
115 static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);
118 static void i2c_client_release(struct device *dev)
120 struct i2c_client *client = to_i2c_client(dev);
121 complete(&client->released);
124 static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
126 struct i2c_client *client = to_i2c_client(dev);
127 return sprintf(buf, "%s\n", client->name);
131 * We can't use the DEVICE_ATTR() macro here as we want the same filename for a
132 * different type of a device. So beware if the DEVICE_ATTR() macro ever
133 * changes, this definition will also have to change.
135 static struct device_attribute dev_attr_client_name = {
136 .attr = {.name = "name", .mode = S_IRUGO, .owner = THIS_MODULE },
137 .show = &show_client_name,
141 /* ---------------------------------------------------
142 * registering functions
143 * ---------------------------------------------------
146 /* -----
147 * i2c_add_adapter is called from within the algorithm layer,
148 * when a new hw adapter registers. A new device is register to be
149 * available for clients.
151 int i2c_add_adapter(struct i2c_adapter *adap)
153 int id, res = 0;
154 struct list_head *item;
155 struct i2c_driver *driver;
157 mutex_lock(&core_lists);
159 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) {
160 res = -ENOMEM;
161 goto out_unlock;
164 res = idr_get_new(&i2c_adapter_idr, adap, &id);
165 if (res < 0) {
166 if (res == -EAGAIN)
167 res = -ENOMEM;
168 goto out_unlock;
171 adap->nr = id & MAX_ID_MASK;
172 init_MUTEX(&adap->bus_lock);
173 init_MUTEX(&adap->clist_lock);
174 list_add_tail(&adap->list,&adapters);
175 INIT_LIST_HEAD(&adap->clients);
177 /* Add the adapter to the driver core.
178 * If the parent pointer is not set up,
179 * we add this adapter to the host bus.
181 if (adap->dev.parent == NULL)
182 adap->dev.parent = &platform_bus;
183 sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
184 adap->dev.driver = &i2c_adapter_driver;
185 adap->dev.release = &i2c_adapter_dev_release;
186 device_register(&adap->dev);
187 device_create_file(&adap->dev, &dev_attr_name);
189 /* Add this adapter to the i2c_adapter class */
190 memset(&adap->class_dev, 0x00, sizeof(struct class_device));
191 adap->class_dev.dev = &adap->dev;
192 adap->class_dev.class = &i2c_adapter_class;
193 strlcpy(adap->class_dev.class_id, adap->dev.bus_id, BUS_ID_SIZE);
194 class_device_register(&adap->class_dev);
196 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
198 /* inform drivers of new adapters */
199 list_for_each(item,&drivers) {
200 driver = list_entry(item, struct i2c_driver, list);
201 if (driver->attach_adapter)
202 /* We ignore the return code; if it fails, too bad */
203 driver->attach_adapter(adap);
206 out_unlock:
207 mutex_unlock(&core_lists);
208 return res;
212 int i2c_del_adapter(struct i2c_adapter *adap)
214 struct list_head *item, *_n;
215 struct i2c_adapter *adap_from_list;
216 struct i2c_driver *driver;
217 struct i2c_client *client;
218 int res = 0;
220 mutex_lock(&core_lists);
222 /* First make sure that this adapter was ever added */
223 list_for_each_entry(adap_from_list, &adapters, list) {
224 if (adap_from_list == adap)
225 break;
227 if (adap_from_list != adap) {
228 pr_debug("i2c-core: attempting to delete unregistered "
229 "adapter [%s]\n", adap->name);
230 res = -EINVAL;
231 goto out_unlock;
234 list_for_each(item,&drivers) {
235 driver = list_entry(item, struct i2c_driver, list);
236 if (driver->detach_adapter)
237 if ((res = driver->detach_adapter(adap))) {
238 dev_err(&adap->dev, "detach_adapter failed "
239 "for driver [%s]\n",
240 driver->driver.name);
241 goto out_unlock;
245 /* detach any active clients. This must be done first, because
246 * it can fail; in which case we give up. */
247 list_for_each_safe(item, _n, &adap->clients) {
248 client = list_entry(item, struct i2c_client, list);
250 if ((res=client->driver->detach_client(client))) {
251 dev_err(&adap->dev, "detach_client failed for client "
252 "[%s] at address 0x%02x\n", client->name,
253 client->addr);
254 goto out_unlock;
258 /* clean up the sysfs representation */
259 init_completion(&adap->dev_released);
260 init_completion(&adap->class_dev_released);
261 class_device_unregister(&adap->class_dev);
262 device_remove_file(&adap->dev, &dev_attr_name);
263 device_unregister(&adap->dev);
264 list_del(&adap->list);
266 /* wait for sysfs to drop all references */
267 wait_for_completion(&adap->dev_released);
268 wait_for_completion(&adap->class_dev_released);
270 /* free dynamically allocated bus id */
271 idr_remove(&i2c_adapter_idr, adap->nr);
273 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
275 out_unlock:
276 mutex_unlock(&core_lists);
277 return res;
281 /* -----
282 * What follows is the "upwards" interface: commands for talking to clients,
283 * which implement the functions to access the physical information of the
284 * chips.
287 int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
289 struct list_head *item;
290 struct i2c_adapter *adapter;
291 int res = 0;
293 mutex_lock(&core_lists);
295 /* add the driver to the list of i2c drivers in the driver core */
296 driver->driver.owner = owner;
297 driver->driver.bus = &i2c_bus_type;
299 res = driver_register(&driver->driver);
300 if (res)
301 goto out_unlock;
303 list_add_tail(&driver->list,&drivers);
304 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
306 /* now look for instances of driver on our adapters */
307 if (driver->attach_adapter) {
308 list_for_each(item,&adapters) {
309 adapter = list_entry(item, struct i2c_adapter, list);
310 driver->attach_adapter(adapter);
314 out_unlock:
315 mutex_unlock(&core_lists);
316 return res;
318 EXPORT_SYMBOL(i2c_register_driver);
320 int i2c_del_driver(struct i2c_driver *driver)
322 struct list_head *item1, *item2, *_n;
323 struct i2c_client *client;
324 struct i2c_adapter *adap;
326 int res = 0;
328 mutex_lock(&core_lists);
330 /* Have a look at each adapter, if clients of this driver are still
331 * attached. If so, detach them to be able to kill the driver
332 * afterwards.
334 list_for_each(item1,&adapters) {
335 adap = list_entry(item1, struct i2c_adapter, list);
336 if (driver->detach_adapter) {
337 if ((res = driver->detach_adapter(adap))) {
338 dev_err(&adap->dev, "detach_adapter failed "
339 "for driver [%s]\n",
340 driver->driver.name);
341 goto out_unlock;
343 } else {
344 list_for_each_safe(item2, _n, &adap->clients) {
345 client = list_entry(item2, struct i2c_client, list);
346 if (client->driver != driver)
347 continue;
348 dev_dbg(&adap->dev, "detaching client [%s] "
349 "at 0x%02x\n", client->name,
350 client->addr);
351 if ((res = driver->detach_client(client))) {
352 dev_err(&adap->dev, "detach_client "
353 "failed for client [%s] at "
354 "0x%02x\n", client->name,
355 client->addr);
356 goto out_unlock;
362 driver_unregister(&driver->driver);
363 list_del(&driver->list);
364 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
366 out_unlock:
367 mutex_unlock(&core_lists);
368 return 0;
371 static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr)
373 struct list_head *item;
374 struct i2c_client *client;
376 list_for_each(item,&adapter->clients) {
377 client = list_entry(item, struct i2c_client, list);
378 if (client->addr == addr)
379 return -EBUSY;
381 return 0;
384 int i2c_check_addr(struct i2c_adapter *adapter, int addr)
386 int rval;
388 down(&adapter->clist_lock);
389 rval = __i2c_check_addr(adapter, addr);
390 up(&adapter->clist_lock);
392 return rval;
395 int i2c_attach_client(struct i2c_client *client)
397 struct i2c_adapter *adapter = client->adapter;
399 down(&adapter->clist_lock);
400 if (__i2c_check_addr(client->adapter, client->addr)) {
401 up(&adapter->clist_lock);
402 return -EBUSY;
404 list_add_tail(&client->list,&adapter->clients);
405 up(&adapter->clist_lock);
407 if (adapter->client_register) {
408 if (adapter->client_register(client)) {
409 dev_dbg(&adapter->dev, "client_register "
410 "failed for client [%s] at 0x%02x\n",
411 client->name, client->addr);
415 client->usage_count = 0;
417 client->dev.parent = &client->adapter->dev;
418 client->dev.driver = &client->driver->driver;
419 client->dev.bus = &i2c_bus_type;
420 client->dev.release = &i2c_client_release;
422 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
423 "%d-%04x", i2c_adapter_id(adapter), client->addr);
424 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
425 client->name, client->dev.bus_id);
426 device_register(&client->dev);
427 device_create_file(&client->dev, &dev_attr_client_name);
429 return 0;
433 int i2c_detach_client(struct i2c_client *client)
435 struct i2c_adapter *adapter = client->adapter;
436 int res = 0;
438 if (client->usage_count > 0) {
439 dev_warn(&client->dev, "Client [%s] still busy, "
440 "can't detach\n", client->name);
441 return -EBUSY;
444 if (adapter->client_unregister) {
445 res = adapter->client_unregister(client);
446 if (res) {
447 dev_err(&client->dev,
448 "client_unregister [%s] failed, "
449 "client not detached\n", client->name);
450 goto out;
454 down(&adapter->clist_lock);
455 list_del(&client->list);
456 init_completion(&client->released);
457 device_remove_file(&client->dev, &dev_attr_client_name);
458 device_unregister(&client->dev);
459 up(&adapter->clist_lock);
460 wait_for_completion(&client->released);
462 out:
463 return res;
466 static int i2c_inc_use_client(struct i2c_client *client)
469 if (!try_module_get(client->driver->driver.owner))
470 return -ENODEV;
471 if (!try_module_get(client->adapter->owner)) {
472 module_put(client->driver->driver.owner);
473 return -ENODEV;
476 return 0;
479 static void i2c_dec_use_client(struct i2c_client *client)
481 module_put(client->driver->driver.owner);
482 module_put(client->adapter->owner);
485 int i2c_use_client(struct i2c_client *client)
487 int ret;
489 ret = i2c_inc_use_client(client);
490 if (ret)
491 return ret;
493 client->usage_count++;
495 return 0;
498 int i2c_release_client(struct i2c_client *client)
500 if (!client->usage_count) {
501 pr_debug("i2c-core: %s used one too many times\n",
502 __FUNCTION__);
503 return -EPERM;
506 client->usage_count--;
507 i2c_dec_use_client(client);
509 return 0;
512 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
514 struct list_head *item;
515 struct i2c_client *client;
517 down(&adap->clist_lock);
518 list_for_each(item,&adap->clients) {
519 client = list_entry(item, struct i2c_client, list);
520 if (!try_module_get(client->driver->driver.owner))
521 continue;
522 if (NULL != client->driver->command) {
523 up(&adap->clist_lock);
524 client->driver->command(client,cmd,arg);
525 down(&adap->clist_lock);
527 module_put(client->driver->driver.owner);
529 up(&adap->clist_lock);
532 static int __init i2c_init(void)
534 int retval;
536 retval = bus_register(&i2c_bus_type);
537 if (retval)
538 return retval;
539 retval = driver_register(&i2c_adapter_driver);
540 if (retval)
541 return retval;
542 return class_register(&i2c_adapter_class);
545 static void __exit i2c_exit(void)
547 class_unregister(&i2c_adapter_class);
548 driver_unregister(&i2c_adapter_driver);
549 bus_unregister(&i2c_bus_type);
552 subsys_initcall(i2c_init);
553 module_exit(i2c_exit);
555 /* ----------------------------------------------------
556 * the functional interface to the i2c busses.
557 * ----------------------------------------------------
560 int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
562 int ret;
564 if (adap->algo->master_xfer) {
565 #ifdef DEBUG
566 for (ret = 0; ret < num; ret++) {
567 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
568 "len=%d\n", ret, msgs[ret].flags & I2C_M_RD ?
569 'R' : 'W', msgs[ret].addr, msgs[ret].len);
571 #endif
573 down(&adap->bus_lock);
574 ret = adap->algo->master_xfer(adap,msgs,num);
575 up(&adap->bus_lock);
577 return ret;
578 } else {
579 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
580 return -ENOSYS;
584 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
586 int ret;
587 struct i2c_adapter *adap=client->adapter;
588 struct i2c_msg msg;
590 msg.addr = client->addr;
591 msg.flags = client->flags & I2C_M_TEN;
592 msg.len = count;
593 msg.buf = (char *)buf;
595 ret = i2c_transfer(adap, &msg, 1);
597 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
598 transmitted, else error code. */
599 return (ret == 1) ? count : ret;
602 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
604 struct i2c_adapter *adap=client->adapter;
605 struct i2c_msg msg;
606 int ret;
608 msg.addr = client->addr;
609 msg.flags = client->flags & I2C_M_TEN;
610 msg.flags |= I2C_M_RD;
611 msg.len = count;
612 msg.buf = buf;
614 ret = i2c_transfer(adap, &msg, 1);
616 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
617 transmitted, else error code. */
618 return (ret == 1) ? count : ret;
622 int i2c_control(struct i2c_client *client,
623 unsigned int cmd, unsigned long arg)
625 int ret = 0;
626 struct i2c_adapter *adap = client->adapter;
628 dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
629 switch (cmd) {
630 case I2C_RETRIES:
631 adap->retries = arg;
632 break;
633 case I2C_TIMEOUT:
634 adap->timeout = arg;
635 break;
636 default:
637 if (adap->algo->algo_control!=NULL)
638 ret = adap->algo->algo_control(adap,cmd,arg);
640 return ret;
643 /* ----------------------------------------------------
644 * the i2c address scanning function
645 * Will not work for 10-bit addresses!
646 * ----------------------------------------------------
648 static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
649 int (*found_proc) (struct i2c_adapter *, int, int))
651 int err;
653 /* Make sure the address is valid */
654 if (addr < 0x03 || addr > 0x77) {
655 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
656 addr);
657 return -EINVAL;
660 /* Skip if already in use */
661 if (i2c_check_addr(adapter, addr))
662 return 0;
664 /* Make sure there is something at this address, unless forced */
665 if (kind < 0) {
666 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
667 I2C_SMBUS_QUICK, NULL) < 0)
668 return 0;
670 /* prevent 24RF08 corruption */
671 if ((addr & ~0x0f) == 0x50)
672 i2c_smbus_xfer(adapter, addr, 0, 0, 0,
673 I2C_SMBUS_QUICK, NULL);
676 /* Finally call the custom detection function */
677 err = found_proc(adapter, addr, kind);
679 /* -ENODEV can be returned if there is a chip at the given address
680 but it isn't supported by this chip driver. We catch it here as
681 this isn't an error. */
682 return (err == -ENODEV) ? 0 : err;
685 int i2c_probe(struct i2c_adapter *adapter,
686 struct i2c_client_address_data *address_data,
687 int (*found_proc) (struct i2c_adapter *, int, int))
689 int i, err;
690 int adap_id = i2c_adapter_id(adapter);
692 /* Force entries are done first, and are not affected by ignore
693 entries */
694 if (address_data->forces) {
695 unsigned short **forces = address_data->forces;
696 int kind;
698 for (kind = 0; forces[kind]; kind++) {
699 for (i = 0; forces[kind][i] != I2C_CLIENT_END;
700 i += 2) {
701 if (forces[kind][i] == adap_id
702 || forces[kind][i] == ANY_I2C_BUS) {
703 dev_dbg(&adapter->dev, "found force "
704 "parameter for adapter %d, "
705 "addr 0x%02x, kind %d\n",
706 adap_id, forces[kind][i + 1],
707 kind);
708 err = i2c_probe_address(adapter,
709 forces[kind][i + 1],
710 kind, found_proc);
711 if (err)
712 return err;
718 /* Stop here if we can't use SMBUS_QUICK */
719 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
720 if (address_data->probe[0] == I2C_CLIENT_END
721 && address_data->normal_i2c[0] == I2C_CLIENT_END)
722 return 0;
724 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
725 "can't probe for chips\n");
726 return -1;
729 /* Probe entries are done second, and are not affected by ignore
730 entries either */
731 for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
732 if (address_data->probe[i] == adap_id
733 || address_data->probe[i] == ANY_I2C_BUS) {
734 dev_dbg(&adapter->dev, "found probe parameter for "
735 "adapter %d, addr 0x%02x\n", adap_id,
736 address_data->probe[i + 1]);
737 err = i2c_probe_address(adapter,
738 address_data->probe[i + 1],
739 -1, found_proc);
740 if (err)
741 return err;
745 /* Normal entries are done last, unless shadowed by an ignore entry */
746 for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
747 int j, ignore;
749 ignore = 0;
750 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
751 j += 2) {
752 if ((address_data->ignore[j] == adap_id ||
753 address_data->ignore[j] == ANY_I2C_BUS)
754 && address_data->ignore[j + 1]
755 == address_data->normal_i2c[i]) {
756 dev_dbg(&adapter->dev, "found ignore "
757 "parameter for adapter %d, "
758 "addr 0x%02x\n", adap_id,
759 address_data->ignore[j + 1]);
761 ignore = 1;
762 break;
764 if (ignore)
765 continue;
767 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
768 "addr 0x%02x\n", adap_id,
769 address_data->normal_i2c[i]);
770 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
771 -1, found_proc);
772 if (err)
773 return err;
776 return 0;
779 struct i2c_adapter* i2c_get_adapter(int id)
781 struct i2c_adapter *adapter;
783 mutex_lock(&core_lists);
784 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
785 if (adapter && !try_module_get(adapter->owner))
786 adapter = NULL;
788 mutex_unlock(&core_lists);
789 return adapter;
792 void i2c_put_adapter(struct i2c_adapter *adap)
794 module_put(adap->owner);
797 /* The SMBus parts */
799 #define POLY (0x1070U << 3)
800 static u8
801 crc8(u16 data)
803 int i;
805 for(i = 0; i < 8; i++) {
806 if (data & 0x8000)
807 data = data ^ POLY;
808 data = data << 1;
810 return (u8)(data >> 8);
813 /* Incremental CRC8 over count bytes in the array pointed to by p */
814 static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
816 int i;
818 for(i = 0; i < count; i++)
819 crc = crc8((crc ^ p[i]) << 8);
820 return crc;
823 /* Assume a 7-bit address, which is reasonable for SMBus */
824 static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
826 /* The address will be sent first */
827 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
828 pec = i2c_smbus_pec(pec, &addr, 1);
830 /* The data buffer follows */
831 return i2c_smbus_pec(pec, msg->buf, msg->len);
834 /* Used for write only transactions */
835 static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
837 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
838 msg->len++;
841 /* Return <0 on CRC error
842 If there was a write before this read (most cases) we need to take the
843 partial CRC from the write part into account.
844 Note that this function does modify the message (we need to decrease the
845 message length to hide the CRC byte from the caller). */
846 static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
848 u8 rpec = msg->buf[--msg->len];
849 cpec = i2c_smbus_msg_pec(cpec, msg);
851 if (rpec != cpec) {
852 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
853 rpec, cpec);
854 return -1;
856 return 0;
859 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
861 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
862 value,0,I2C_SMBUS_QUICK,NULL);
865 s32 i2c_smbus_read_byte(struct i2c_client *client)
867 union i2c_smbus_data data;
868 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
869 I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
870 return -1;
871 else
872 return 0x0FF & data.byte;
875 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
877 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
878 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
881 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
883 union i2c_smbus_data data;
884 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
885 I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
886 return -1;
887 else
888 return 0x0FF & data.byte;
891 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
893 union i2c_smbus_data data;
894 data.byte = value;
895 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
896 I2C_SMBUS_WRITE,command,
897 I2C_SMBUS_BYTE_DATA,&data);
900 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
902 union i2c_smbus_data data;
903 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
904 I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
905 return -1;
906 else
907 return 0x0FFFF & data.word;
910 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
912 union i2c_smbus_data data;
913 data.word = value;
914 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
915 I2C_SMBUS_WRITE,command,
916 I2C_SMBUS_WORD_DATA,&data);
919 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
920 u8 length, u8 *values)
922 union i2c_smbus_data data;
924 if (length > I2C_SMBUS_BLOCK_MAX)
925 length = I2C_SMBUS_BLOCK_MAX;
926 data.block[0] = length;
927 memcpy(&data.block[1], values, length);
928 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
929 I2C_SMBUS_WRITE,command,
930 I2C_SMBUS_BLOCK_DATA,&data);
933 /* Returns the number of read bytes */
934 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
936 union i2c_smbus_data data;
938 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
939 I2C_SMBUS_READ,command,
940 I2C_SMBUS_I2C_BLOCK_DATA,&data))
941 return -1;
943 memcpy(values, &data.block[1], data.block[0]);
944 return data.block[0];
947 s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
948 u8 length, u8 *values)
950 union i2c_smbus_data data;
952 if (length > I2C_SMBUS_BLOCK_MAX)
953 length = I2C_SMBUS_BLOCK_MAX;
954 data.block[0] = length;
955 memcpy(data.block + 1, values, length);
956 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
957 I2C_SMBUS_WRITE, command,
958 I2C_SMBUS_I2C_BLOCK_DATA, &data);
961 /* Simulate a SMBus command using the i2c protocol
962 No checking of parameters is done! */
963 static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
964 unsigned short flags,
965 char read_write, u8 command, int size,
966 union i2c_smbus_data * data)
968 /* So we need to generate a series of msgs. In the case of writing, we
969 need to use only one message; when reading, we need two. We initialize
970 most things with sane defaults, to keep the code below somewhat
971 simpler. */
972 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
973 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
974 int num = read_write == I2C_SMBUS_READ?2:1;
975 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
976 { addr, flags | I2C_M_RD, 0, msgbuf1 }
978 int i;
979 u8 partial_pec = 0;
981 msgbuf0[0] = command;
982 switch(size) {
983 case I2C_SMBUS_QUICK:
984 msg[0].len = 0;
985 /* Special case: The read/write field is used as data */
986 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
987 num = 1;
988 break;
989 case I2C_SMBUS_BYTE:
990 if (read_write == I2C_SMBUS_READ) {
991 /* Special case: only a read! */
992 msg[0].flags = I2C_M_RD | flags;
993 num = 1;
995 break;
996 case I2C_SMBUS_BYTE_DATA:
997 if (read_write == I2C_SMBUS_READ)
998 msg[1].len = 1;
999 else {
1000 msg[0].len = 2;
1001 msgbuf0[1] = data->byte;
1003 break;
1004 case I2C_SMBUS_WORD_DATA:
1005 if (read_write == I2C_SMBUS_READ)
1006 msg[1].len = 2;
1007 else {
1008 msg[0].len=3;
1009 msgbuf0[1] = data->word & 0xff;
1010 msgbuf0[2] = (data->word >> 8) & 0xff;
1012 break;
1013 case I2C_SMBUS_PROC_CALL:
1014 num = 2; /* Special case */
1015 read_write = I2C_SMBUS_READ;
1016 msg[0].len = 3;
1017 msg[1].len = 2;
1018 msgbuf0[1] = data->word & 0xff;
1019 msgbuf0[2] = (data->word >> 8) & 0xff;
1020 break;
1021 case I2C_SMBUS_BLOCK_DATA:
1022 if (read_write == I2C_SMBUS_READ) {
1023 dev_err(&adapter->dev, "Block read not supported "
1024 "under I2C emulation!\n");
1025 return -1;
1026 } else {
1027 msg[0].len = data->block[0] + 2;
1028 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1029 dev_err(&adapter->dev, "smbus_access called with "
1030 "invalid block write size (%d)\n",
1031 data->block[0]);
1032 return -1;
1034 for (i = 1; i < msg[0].len; i++)
1035 msgbuf0[i] = data->block[i-1];
1037 break;
1038 case I2C_SMBUS_BLOCK_PROC_CALL:
1039 dev_dbg(&adapter->dev, "Block process call not supported "
1040 "under I2C emulation!\n");
1041 return -1;
1042 case I2C_SMBUS_I2C_BLOCK_DATA:
1043 if (read_write == I2C_SMBUS_READ) {
1044 msg[1].len = I2C_SMBUS_BLOCK_MAX;
1045 } else {
1046 msg[0].len = data->block[0] + 1;
1047 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1048 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1049 "invalid block write size (%d)\n",
1050 data->block[0]);
1051 return -1;
1053 for (i = 1; i <= data->block[0]; i++)
1054 msgbuf0[i] = data->block[i];
1056 break;
1057 default:
1058 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1059 size);
1060 return -1;
1063 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1064 && size != I2C_SMBUS_I2C_BLOCK_DATA);
1065 if (i) {
1066 /* Compute PEC if first message is a write */
1067 if (!(msg[0].flags & I2C_M_RD)) {
1068 if (num == 1) /* Write only */
1069 i2c_smbus_add_pec(&msg[0]);
1070 else /* Write followed by read */
1071 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1073 /* Ask for PEC if last message is a read */
1074 if (msg[num-1].flags & I2C_M_RD)
1075 msg[num-1].len++;
1078 if (i2c_transfer(adapter, msg, num) < 0)
1079 return -1;
1081 /* Check PEC if last message is a read */
1082 if (i && (msg[num-1].flags & I2C_M_RD)) {
1083 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1084 return -1;
1087 if (read_write == I2C_SMBUS_READ)
1088 switch(size) {
1089 case I2C_SMBUS_BYTE:
1090 data->byte = msgbuf0[0];
1091 break;
1092 case I2C_SMBUS_BYTE_DATA:
1093 data->byte = msgbuf1[0];
1094 break;
1095 case I2C_SMBUS_WORD_DATA:
1096 case I2C_SMBUS_PROC_CALL:
1097 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1098 break;
1099 case I2C_SMBUS_I2C_BLOCK_DATA:
1100 /* fixed at 32 for now */
1101 data->block[0] = I2C_SMBUS_BLOCK_MAX;
1102 for (i = 0; i < I2C_SMBUS_BLOCK_MAX; i++)
1103 data->block[i+1] = msgbuf1[i];
1104 break;
1106 return 0;
1110 s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1111 char read_write, u8 command, int size,
1112 union i2c_smbus_data * data)
1114 s32 res;
1116 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1118 if (adapter->algo->smbus_xfer) {
1119 down(&adapter->bus_lock);
1120 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1121 command,size,data);
1122 up(&adapter->bus_lock);
1123 } else
1124 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1125 command,size,data);
1127 return res;
1131 /* Next four are needed by i2c-isa */
1132 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release);
1133 EXPORT_SYMBOL_GPL(i2c_adapter_driver);
1134 EXPORT_SYMBOL_GPL(i2c_adapter_class);
1135 EXPORT_SYMBOL_GPL(i2c_bus_type);
1137 EXPORT_SYMBOL(i2c_add_adapter);
1138 EXPORT_SYMBOL(i2c_del_adapter);
1139 EXPORT_SYMBOL(i2c_del_driver);
1140 EXPORT_SYMBOL(i2c_attach_client);
1141 EXPORT_SYMBOL(i2c_detach_client);
1142 EXPORT_SYMBOL(i2c_use_client);
1143 EXPORT_SYMBOL(i2c_release_client);
1144 EXPORT_SYMBOL(i2c_clients_command);
1145 EXPORT_SYMBOL(i2c_check_addr);
1147 EXPORT_SYMBOL(i2c_master_send);
1148 EXPORT_SYMBOL(i2c_master_recv);
1149 EXPORT_SYMBOL(i2c_control);
1150 EXPORT_SYMBOL(i2c_transfer);
1151 EXPORT_SYMBOL(i2c_get_adapter);
1152 EXPORT_SYMBOL(i2c_put_adapter);
1153 EXPORT_SYMBOL(i2c_probe);
1155 EXPORT_SYMBOL(i2c_smbus_xfer);
1156 EXPORT_SYMBOL(i2c_smbus_write_quick);
1157 EXPORT_SYMBOL(i2c_smbus_read_byte);
1158 EXPORT_SYMBOL(i2c_smbus_write_byte);
1159 EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1160 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1161 EXPORT_SYMBOL(i2c_smbus_read_word_data);
1162 EXPORT_SYMBOL(i2c_smbus_write_word_data);
1163 EXPORT_SYMBOL(i2c_smbus_write_block_data);
1164 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1165 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
1167 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1168 MODULE_DESCRIPTION("I2C-Bus main module");
1169 MODULE_LICENSE("GPL");