ACPICA: Added option to display memory statistics upon termination.
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / i2c / i2c-core.c
blobb05378a3d673fb67de094c3c0e4c33e9c7836d87
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 /* ------------------------------------------------------------------------- */
100 /* I2C bus adapters -- one roots each I2C or SMBUS segment */
102 static void i2c_adapter_class_dev_release(struct class_device *dev)
104 struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev);
105 complete(&adap->class_dev_released);
108 static ssize_t i2c_adapter_show_name(struct class_device *cdev, char *buf)
110 struct i2c_adapter *adap = class_dev_to_i2c_adapter(cdev);
111 return sprintf(buf, "%s\n", adap->name);
114 static struct class_device_attribute i2c_adapter_attrs[] = {
115 __ATTR(name, S_IRUGO, i2c_adapter_show_name, NULL),
116 { },
119 struct class i2c_adapter_class = {
120 .owner = THIS_MODULE,
121 .name = "i2c-adapter",
122 .class_dev_attrs = i2c_adapter_attrs,
123 .release = &i2c_adapter_class_dev_release,
126 static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
128 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
129 return sprintf(buf, "%s\n", adap->name);
131 static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);
134 static void i2c_client_release(struct device *dev)
136 struct i2c_client *client = to_i2c_client(dev);
137 complete(&client->released);
140 static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
142 struct i2c_client *client = to_i2c_client(dev);
143 return sprintf(buf, "%s\n", client->name);
147 * We can't use the DEVICE_ATTR() macro here, as we used the same name for
148 * an i2c adapter attribute (above).
150 static struct device_attribute dev_attr_client_name =
151 __ATTR(name, S_IRUGO, &show_client_name, NULL);
154 /* ---------------------------------------------------
155 * registering functions
156 * ---------------------------------------------------
159 /* -----
160 * i2c_add_adapter is called from within the algorithm layer,
161 * when a new hw adapter registers. A new device is register to be
162 * available for clients.
164 int i2c_add_adapter(struct i2c_adapter *adap)
166 int id, res = 0;
167 struct list_head *item;
168 struct i2c_driver *driver;
170 mutex_lock(&core_lists);
172 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) {
173 res = -ENOMEM;
174 goto out_unlock;
177 res = idr_get_new(&i2c_adapter_idr, adap, &id);
178 if (res < 0) {
179 if (res == -EAGAIN)
180 res = -ENOMEM;
181 goto out_unlock;
184 adap->nr = id & MAX_ID_MASK;
185 mutex_init(&adap->bus_lock);
186 mutex_init(&adap->clist_lock);
187 list_add_tail(&adap->list,&adapters);
188 INIT_LIST_HEAD(&adap->clients);
190 /* Add the adapter to the driver core.
191 * If the parent pointer is not set up,
192 * we add this adapter to the host bus.
194 if (adap->dev.parent == NULL) {
195 adap->dev.parent = &platform_bus;
196 printk(KERN_WARNING "**WARNING** I2C adapter driver [%s] "
197 "forgot to specify physical device; fix it!\n",
198 adap->name);
200 sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
201 adap->dev.driver = &i2c_adapter_driver;
202 adap->dev.release = &i2c_adapter_dev_release;
203 res = device_register(&adap->dev);
204 if (res)
205 goto out_list;
206 res = device_create_file(&adap->dev, &dev_attr_name);
207 if (res)
208 goto out_unregister;
210 /* Add this adapter to the i2c_adapter class */
211 memset(&adap->class_dev, 0x00, sizeof(struct class_device));
212 adap->class_dev.dev = &adap->dev;
213 adap->class_dev.class = &i2c_adapter_class;
214 strlcpy(adap->class_dev.class_id, adap->dev.bus_id, BUS_ID_SIZE);
215 res = class_device_register(&adap->class_dev);
216 if (res)
217 goto out_remove_name;
219 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
221 /* inform drivers of new adapters */
222 list_for_each(item,&drivers) {
223 driver = list_entry(item, struct i2c_driver, list);
224 if (driver->attach_adapter)
225 /* We ignore the return code; if it fails, too bad */
226 driver->attach_adapter(adap);
229 out_unlock:
230 mutex_unlock(&core_lists);
231 return res;
233 out_remove_name:
234 device_remove_file(&adap->dev, &dev_attr_name);
235 out_unregister:
236 init_completion(&adap->dev_released); /* Needed? */
237 device_unregister(&adap->dev);
238 wait_for_completion(&adap->dev_released);
239 out_list:
240 list_del(&adap->list);
241 idr_remove(&i2c_adapter_idr, adap->nr);
242 goto out_unlock;
246 int i2c_del_adapter(struct i2c_adapter *adap)
248 struct list_head *item, *_n;
249 struct i2c_adapter *adap_from_list;
250 struct i2c_driver *driver;
251 struct i2c_client *client;
252 int res = 0;
254 mutex_lock(&core_lists);
256 /* First make sure that this adapter was ever added */
257 list_for_each_entry(adap_from_list, &adapters, list) {
258 if (adap_from_list == adap)
259 break;
261 if (adap_from_list != adap) {
262 pr_debug("i2c-core: attempting to delete unregistered "
263 "adapter [%s]\n", adap->name);
264 res = -EINVAL;
265 goto out_unlock;
268 list_for_each(item,&drivers) {
269 driver = list_entry(item, struct i2c_driver, list);
270 if (driver->detach_adapter)
271 if ((res = driver->detach_adapter(adap))) {
272 dev_err(&adap->dev, "detach_adapter failed "
273 "for driver [%s]\n",
274 driver->driver.name);
275 goto out_unlock;
279 /* detach any active clients. This must be done first, because
280 * it can fail; in which case we give up. */
281 list_for_each_safe(item, _n, &adap->clients) {
282 client = list_entry(item, struct i2c_client, list);
284 if ((res=client->driver->detach_client(client))) {
285 dev_err(&adap->dev, "detach_client failed for client "
286 "[%s] at address 0x%02x\n", client->name,
287 client->addr);
288 goto out_unlock;
292 /* clean up the sysfs representation */
293 init_completion(&adap->dev_released);
294 init_completion(&adap->class_dev_released);
295 class_device_unregister(&adap->class_dev);
296 device_remove_file(&adap->dev, &dev_attr_name);
297 device_unregister(&adap->dev);
298 list_del(&adap->list);
300 /* wait for sysfs to drop all references */
301 wait_for_completion(&adap->dev_released);
302 wait_for_completion(&adap->class_dev_released);
304 /* free dynamically allocated bus id */
305 idr_remove(&i2c_adapter_idr, adap->nr);
307 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
309 out_unlock:
310 mutex_unlock(&core_lists);
311 return res;
315 /* -----
316 * What follows is the "upwards" interface: commands for talking to clients,
317 * which implement the functions to access the physical information of the
318 * chips.
321 int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
323 struct list_head *item;
324 struct i2c_adapter *adapter;
325 int res;
327 /* add the driver to the list of i2c drivers in the driver core */
328 driver->driver.owner = owner;
329 driver->driver.bus = &i2c_bus_type;
331 res = driver_register(&driver->driver);
332 if (res)
333 return res;
335 mutex_lock(&core_lists);
337 list_add_tail(&driver->list,&drivers);
338 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
340 /* now look for instances of driver on our adapters */
341 if (driver->attach_adapter) {
342 list_for_each(item,&adapters) {
343 adapter = list_entry(item, struct i2c_adapter, list);
344 driver->attach_adapter(adapter);
348 mutex_unlock(&core_lists);
349 return 0;
351 EXPORT_SYMBOL(i2c_register_driver);
353 int i2c_del_driver(struct i2c_driver *driver)
355 struct list_head *item1, *item2, *_n;
356 struct i2c_client *client;
357 struct i2c_adapter *adap;
359 int res = 0;
361 mutex_lock(&core_lists);
363 /* Have a look at each adapter, if clients of this driver are still
364 * attached. If so, detach them to be able to kill the driver
365 * afterwards.
367 list_for_each(item1,&adapters) {
368 adap = list_entry(item1, struct i2c_adapter, list);
369 if (driver->detach_adapter) {
370 if ((res = driver->detach_adapter(adap))) {
371 dev_err(&adap->dev, "detach_adapter failed "
372 "for driver [%s]\n",
373 driver->driver.name);
374 goto out_unlock;
376 } else {
377 list_for_each_safe(item2, _n, &adap->clients) {
378 client = list_entry(item2, struct i2c_client, list);
379 if (client->driver != driver)
380 continue;
381 dev_dbg(&adap->dev, "detaching client [%s] "
382 "at 0x%02x\n", client->name,
383 client->addr);
384 if ((res = driver->detach_client(client))) {
385 dev_err(&adap->dev, "detach_client "
386 "failed for client [%s] at "
387 "0x%02x\n", client->name,
388 client->addr);
389 goto out_unlock;
395 driver_unregister(&driver->driver);
396 list_del(&driver->list);
397 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
399 out_unlock:
400 mutex_unlock(&core_lists);
401 return 0;
404 static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr)
406 struct list_head *item;
407 struct i2c_client *client;
409 list_for_each(item,&adapter->clients) {
410 client = list_entry(item, struct i2c_client, list);
411 if (client->addr == addr)
412 return -EBUSY;
414 return 0;
417 int i2c_check_addr(struct i2c_adapter *adapter, int addr)
419 int rval;
421 mutex_lock(&adapter->clist_lock);
422 rval = __i2c_check_addr(adapter, addr);
423 mutex_unlock(&adapter->clist_lock);
425 return rval;
428 int i2c_attach_client(struct i2c_client *client)
430 struct i2c_adapter *adapter = client->adapter;
431 int res = 0;
433 mutex_lock(&adapter->clist_lock);
434 if (__i2c_check_addr(client->adapter, client->addr)) {
435 res = -EBUSY;
436 goto out_unlock;
438 list_add_tail(&client->list,&adapter->clients);
440 client->usage_count = 0;
442 client->dev.parent = &client->adapter->dev;
443 client->dev.driver = &client->driver->driver;
444 client->dev.bus = &i2c_bus_type;
445 client->dev.release = &i2c_client_release;
447 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
448 "%d-%04x", i2c_adapter_id(adapter), client->addr);
449 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
450 client->name, client->dev.bus_id);
451 res = device_register(&client->dev);
452 if (res)
453 goto out_list;
454 res = device_create_file(&client->dev, &dev_attr_client_name);
455 if (res)
456 goto out_unregister;
457 mutex_unlock(&adapter->clist_lock);
459 if (adapter->client_register) {
460 if (adapter->client_register(client)) {
461 dev_dbg(&adapter->dev, "client_register "
462 "failed for client [%s] at 0x%02x\n",
463 client->name, client->addr);
467 return 0;
469 out_unregister:
470 init_completion(&client->released); /* Needed? */
471 device_unregister(&client->dev);
472 wait_for_completion(&client->released);
473 out_list:
474 list_del(&client->list);
475 dev_err(&adapter->dev, "Failed to attach i2c client %s at 0x%02x "
476 "(%d)\n", client->name, client->addr, res);
477 out_unlock:
478 mutex_unlock(&adapter->clist_lock);
479 return res;
483 int i2c_detach_client(struct i2c_client *client)
485 struct i2c_adapter *adapter = client->adapter;
486 int res = 0;
488 if (client->usage_count > 0) {
489 dev_warn(&client->dev, "Client [%s] still busy, "
490 "can't detach\n", client->name);
491 return -EBUSY;
494 if (adapter->client_unregister) {
495 res = adapter->client_unregister(client);
496 if (res) {
497 dev_err(&client->dev,
498 "client_unregister [%s] failed, "
499 "client not detached\n", client->name);
500 goto out;
504 mutex_lock(&adapter->clist_lock);
505 list_del(&client->list);
506 init_completion(&client->released);
507 device_remove_file(&client->dev, &dev_attr_client_name);
508 device_unregister(&client->dev);
509 mutex_unlock(&adapter->clist_lock);
510 wait_for_completion(&client->released);
512 out:
513 return res;
516 static int i2c_inc_use_client(struct i2c_client *client)
519 if (!try_module_get(client->driver->driver.owner))
520 return -ENODEV;
521 if (!try_module_get(client->adapter->owner)) {
522 module_put(client->driver->driver.owner);
523 return -ENODEV;
526 return 0;
529 static void i2c_dec_use_client(struct i2c_client *client)
531 module_put(client->driver->driver.owner);
532 module_put(client->adapter->owner);
535 int i2c_use_client(struct i2c_client *client)
537 int ret;
539 ret = i2c_inc_use_client(client);
540 if (ret)
541 return ret;
543 client->usage_count++;
545 return 0;
548 int i2c_release_client(struct i2c_client *client)
550 if (!client->usage_count) {
551 pr_debug("i2c-core: %s used one too many times\n",
552 __FUNCTION__);
553 return -EPERM;
556 client->usage_count--;
557 i2c_dec_use_client(client);
559 return 0;
562 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
564 struct list_head *item;
565 struct i2c_client *client;
567 mutex_lock(&adap->clist_lock);
568 list_for_each(item,&adap->clients) {
569 client = list_entry(item, struct i2c_client, list);
570 if (!try_module_get(client->driver->driver.owner))
571 continue;
572 if (NULL != client->driver->command) {
573 mutex_unlock(&adap->clist_lock);
574 client->driver->command(client,cmd,arg);
575 mutex_lock(&adap->clist_lock);
577 module_put(client->driver->driver.owner);
579 mutex_unlock(&adap->clist_lock);
582 static int __init i2c_init(void)
584 int retval;
586 retval = bus_register(&i2c_bus_type);
587 if (retval)
588 return retval;
589 retval = driver_register(&i2c_adapter_driver);
590 if (retval)
591 return retval;
592 return class_register(&i2c_adapter_class);
595 static void __exit i2c_exit(void)
597 class_unregister(&i2c_adapter_class);
598 driver_unregister(&i2c_adapter_driver);
599 bus_unregister(&i2c_bus_type);
602 subsys_initcall(i2c_init);
603 module_exit(i2c_exit);
605 /* ----------------------------------------------------
606 * the functional interface to the i2c busses.
607 * ----------------------------------------------------
610 int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
612 int ret;
614 if (adap->algo->master_xfer) {
615 #ifdef DEBUG
616 for (ret = 0; ret < num; ret++) {
617 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
618 "len=%d\n", ret, msgs[ret].flags & I2C_M_RD ?
619 'R' : 'W', msgs[ret].addr, msgs[ret].len);
621 #endif
623 mutex_lock_nested(&adap->bus_lock, adap->level);
624 ret = adap->algo->master_xfer(adap,msgs,num);
625 mutex_unlock(&adap->bus_lock);
627 return ret;
628 } else {
629 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
630 return -ENOSYS;
634 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
636 int ret;
637 struct i2c_adapter *adap=client->adapter;
638 struct i2c_msg msg;
640 msg.addr = client->addr;
641 msg.flags = client->flags & I2C_M_TEN;
642 msg.len = count;
643 msg.buf = (char *)buf;
645 ret = i2c_transfer(adap, &msg, 1);
647 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
648 transmitted, else error code. */
649 return (ret == 1) ? count : ret;
652 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
654 struct i2c_adapter *adap=client->adapter;
655 struct i2c_msg msg;
656 int ret;
658 msg.addr = client->addr;
659 msg.flags = client->flags & I2C_M_TEN;
660 msg.flags |= I2C_M_RD;
661 msg.len = count;
662 msg.buf = buf;
664 ret = i2c_transfer(adap, &msg, 1);
666 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
667 transmitted, else error code. */
668 return (ret == 1) ? count : ret;
672 int i2c_control(struct i2c_client *client,
673 unsigned int cmd, unsigned long arg)
675 int ret = 0;
676 struct i2c_adapter *adap = client->adapter;
678 dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
679 switch (cmd) {
680 case I2C_RETRIES:
681 adap->retries = arg;
682 break;
683 case I2C_TIMEOUT:
684 adap->timeout = arg;
685 break;
686 default:
687 if (adap->algo->algo_control!=NULL)
688 ret = adap->algo->algo_control(adap,cmd,arg);
690 return ret;
693 /* ----------------------------------------------------
694 * the i2c address scanning function
695 * Will not work for 10-bit addresses!
696 * ----------------------------------------------------
698 static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
699 int (*found_proc) (struct i2c_adapter *, int, int))
701 int err;
703 /* Make sure the address is valid */
704 if (addr < 0x03 || addr > 0x77) {
705 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
706 addr);
707 return -EINVAL;
710 /* Skip if already in use */
711 if (i2c_check_addr(adapter, addr))
712 return 0;
714 /* Make sure there is something at this address, unless forced */
715 if (kind < 0) {
716 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
717 I2C_SMBUS_QUICK, NULL) < 0)
718 return 0;
720 /* prevent 24RF08 corruption */
721 if ((addr & ~0x0f) == 0x50)
722 i2c_smbus_xfer(adapter, addr, 0, 0, 0,
723 I2C_SMBUS_QUICK, NULL);
726 /* Finally call the custom detection function */
727 err = found_proc(adapter, addr, kind);
728 /* -ENODEV can be returned if there is a chip at the given address
729 but it isn't supported by this chip driver. We catch it here as
730 this isn't an error. */
731 if (err == -ENODEV)
732 err = 0;
734 if (err)
735 dev_warn(&adapter->dev, "Client creation failed at 0x%x (%d)\n",
736 addr, err);
737 return err;
740 int i2c_probe(struct i2c_adapter *adapter,
741 struct i2c_client_address_data *address_data,
742 int (*found_proc) (struct i2c_adapter *, int, int))
744 int i, err;
745 int adap_id = i2c_adapter_id(adapter);
747 /* Force entries are done first, and are not affected by ignore
748 entries */
749 if (address_data->forces) {
750 unsigned short **forces = address_data->forces;
751 int kind;
753 for (kind = 0; forces[kind]; kind++) {
754 for (i = 0; forces[kind][i] != I2C_CLIENT_END;
755 i += 2) {
756 if (forces[kind][i] == adap_id
757 || forces[kind][i] == ANY_I2C_BUS) {
758 dev_dbg(&adapter->dev, "found force "
759 "parameter for adapter %d, "
760 "addr 0x%02x, kind %d\n",
761 adap_id, forces[kind][i + 1],
762 kind);
763 err = i2c_probe_address(adapter,
764 forces[kind][i + 1],
765 kind, found_proc);
766 if (err)
767 return err;
773 /* Stop here if we can't use SMBUS_QUICK */
774 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
775 if (address_data->probe[0] == I2C_CLIENT_END
776 && address_data->normal_i2c[0] == I2C_CLIENT_END)
777 return 0;
779 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
780 "can't probe for chips\n");
781 return -1;
784 /* Probe entries are done second, and are not affected by ignore
785 entries either */
786 for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
787 if (address_data->probe[i] == adap_id
788 || address_data->probe[i] == ANY_I2C_BUS) {
789 dev_dbg(&adapter->dev, "found probe parameter for "
790 "adapter %d, addr 0x%02x\n", adap_id,
791 address_data->probe[i + 1]);
792 err = i2c_probe_address(adapter,
793 address_data->probe[i + 1],
794 -1, found_proc);
795 if (err)
796 return err;
800 /* Normal entries are done last, unless shadowed by an ignore entry */
801 for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
802 int j, ignore;
804 ignore = 0;
805 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
806 j += 2) {
807 if ((address_data->ignore[j] == adap_id ||
808 address_data->ignore[j] == ANY_I2C_BUS)
809 && address_data->ignore[j + 1]
810 == address_data->normal_i2c[i]) {
811 dev_dbg(&adapter->dev, "found ignore "
812 "parameter for adapter %d, "
813 "addr 0x%02x\n", adap_id,
814 address_data->ignore[j + 1]);
815 ignore = 1;
816 break;
819 if (ignore)
820 continue;
822 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
823 "addr 0x%02x\n", adap_id,
824 address_data->normal_i2c[i]);
825 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
826 -1, found_proc);
827 if (err)
828 return err;
831 return 0;
834 struct i2c_adapter* i2c_get_adapter(int id)
836 struct i2c_adapter *adapter;
838 mutex_lock(&core_lists);
839 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
840 if (adapter && !try_module_get(adapter->owner))
841 adapter = NULL;
843 mutex_unlock(&core_lists);
844 return adapter;
847 void i2c_put_adapter(struct i2c_adapter *adap)
849 module_put(adap->owner);
852 /* The SMBus parts */
854 #define POLY (0x1070U << 3)
855 static u8
856 crc8(u16 data)
858 int i;
860 for(i = 0; i < 8; i++) {
861 if (data & 0x8000)
862 data = data ^ POLY;
863 data = data << 1;
865 return (u8)(data >> 8);
868 /* Incremental CRC8 over count bytes in the array pointed to by p */
869 static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
871 int i;
873 for(i = 0; i < count; i++)
874 crc = crc8((crc ^ p[i]) << 8);
875 return crc;
878 /* Assume a 7-bit address, which is reasonable for SMBus */
879 static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
881 /* The address will be sent first */
882 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
883 pec = i2c_smbus_pec(pec, &addr, 1);
885 /* The data buffer follows */
886 return i2c_smbus_pec(pec, msg->buf, msg->len);
889 /* Used for write only transactions */
890 static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
892 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
893 msg->len++;
896 /* Return <0 on CRC error
897 If there was a write before this read (most cases) we need to take the
898 partial CRC from the write part into account.
899 Note that this function does modify the message (we need to decrease the
900 message length to hide the CRC byte from the caller). */
901 static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
903 u8 rpec = msg->buf[--msg->len];
904 cpec = i2c_smbus_msg_pec(cpec, msg);
906 if (rpec != cpec) {
907 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
908 rpec, cpec);
909 return -1;
911 return 0;
914 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
916 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
917 value,0,I2C_SMBUS_QUICK,NULL);
920 s32 i2c_smbus_read_byte(struct i2c_client *client)
922 union i2c_smbus_data data;
923 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
924 I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
925 return -1;
926 else
927 return data.byte;
930 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
932 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
933 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
936 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
938 union i2c_smbus_data data;
939 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
940 I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
941 return -1;
942 else
943 return data.byte;
946 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
948 union i2c_smbus_data data;
949 data.byte = value;
950 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
951 I2C_SMBUS_WRITE,command,
952 I2C_SMBUS_BYTE_DATA,&data);
955 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
957 union i2c_smbus_data data;
958 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
959 I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
960 return -1;
961 else
962 return data.word;
965 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
967 union i2c_smbus_data data;
968 data.word = value;
969 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
970 I2C_SMBUS_WRITE,command,
971 I2C_SMBUS_WORD_DATA,&data);
974 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
975 u8 length, const u8 *values)
977 union i2c_smbus_data data;
979 if (length > I2C_SMBUS_BLOCK_MAX)
980 length = I2C_SMBUS_BLOCK_MAX;
981 data.block[0] = length;
982 memcpy(&data.block[1], values, length);
983 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
984 I2C_SMBUS_WRITE,command,
985 I2C_SMBUS_BLOCK_DATA,&data);
988 /* Returns the number of read bytes */
989 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
991 union i2c_smbus_data data;
993 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
994 I2C_SMBUS_READ,command,
995 I2C_SMBUS_I2C_BLOCK_DATA,&data))
996 return -1;
998 memcpy(values, &data.block[1], data.block[0]);
999 return data.block[0];
1002 s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
1003 u8 length, const u8 *values)
1005 union i2c_smbus_data data;
1007 if (length > I2C_SMBUS_BLOCK_MAX)
1008 length = I2C_SMBUS_BLOCK_MAX;
1009 data.block[0] = length;
1010 memcpy(data.block + 1, values, length);
1011 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1012 I2C_SMBUS_WRITE, command,
1013 I2C_SMBUS_I2C_BLOCK_DATA, &data);
1016 /* Simulate a SMBus command using the i2c protocol
1017 No checking of parameters is done! */
1018 static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1019 unsigned short flags,
1020 char read_write, u8 command, int size,
1021 union i2c_smbus_data * data)
1023 /* So we need to generate a series of msgs. In the case of writing, we
1024 need to use only one message; when reading, we need two. We initialize
1025 most things with sane defaults, to keep the code below somewhat
1026 simpler. */
1027 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1028 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
1029 int num = read_write == I2C_SMBUS_READ?2:1;
1030 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1031 { addr, flags | I2C_M_RD, 0, msgbuf1 }
1033 int i;
1034 u8 partial_pec = 0;
1036 msgbuf0[0] = command;
1037 switch(size) {
1038 case I2C_SMBUS_QUICK:
1039 msg[0].len = 0;
1040 /* Special case: The read/write field is used as data */
1041 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
1042 num = 1;
1043 break;
1044 case I2C_SMBUS_BYTE:
1045 if (read_write == I2C_SMBUS_READ) {
1046 /* Special case: only a read! */
1047 msg[0].flags = I2C_M_RD | flags;
1048 num = 1;
1050 break;
1051 case I2C_SMBUS_BYTE_DATA:
1052 if (read_write == I2C_SMBUS_READ)
1053 msg[1].len = 1;
1054 else {
1055 msg[0].len = 2;
1056 msgbuf0[1] = data->byte;
1058 break;
1059 case I2C_SMBUS_WORD_DATA:
1060 if (read_write == I2C_SMBUS_READ)
1061 msg[1].len = 2;
1062 else {
1063 msg[0].len=3;
1064 msgbuf0[1] = data->word & 0xff;
1065 msgbuf0[2] = data->word >> 8;
1067 break;
1068 case I2C_SMBUS_PROC_CALL:
1069 num = 2; /* Special case */
1070 read_write = I2C_SMBUS_READ;
1071 msg[0].len = 3;
1072 msg[1].len = 2;
1073 msgbuf0[1] = data->word & 0xff;
1074 msgbuf0[2] = data->word >> 8;
1075 break;
1076 case I2C_SMBUS_BLOCK_DATA:
1077 if (read_write == I2C_SMBUS_READ) {
1078 dev_err(&adapter->dev, "Block read not supported "
1079 "under I2C emulation!\n");
1080 return -1;
1081 } else {
1082 msg[0].len = data->block[0] + 2;
1083 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1084 dev_err(&adapter->dev, "smbus_access called with "
1085 "invalid block write size (%d)\n",
1086 data->block[0]);
1087 return -1;
1089 for (i = 1; i < msg[0].len; i++)
1090 msgbuf0[i] = data->block[i-1];
1092 break;
1093 case I2C_SMBUS_BLOCK_PROC_CALL:
1094 dev_dbg(&adapter->dev, "Block process call not supported "
1095 "under I2C emulation!\n");
1096 return -1;
1097 case I2C_SMBUS_I2C_BLOCK_DATA:
1098 if (read_write == I2C_SMBUS_READ) {
1099 msg[1].len = I2C_SMBUS_BLOCK_MAX;
1100 } else {
1101 msg[0].len = data->block[0] + 1;
1102 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1103 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1104 "invalid block write size (%d)\n",
1105 data->block[0]);
1106 return -1;
1108 for (i = 1; i <= data->block[0]; i++)
1109 msgbuf0[i] = data->block[i];
1111 break;
1112 default:
1113 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1114 size);
1115 return -1;
1118 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1119 && size != I2C_SMBUS_I2C_BLOCK_DATA);
1120 if (i) {
1121 /* Compute PEC if first message is a write */
1122 if (!(msg[0].flags & I2C_M_RD)) {
1123 if (num == 1) /* Write only */
1124 i2c_smbus_add_pec(&msg[0]);
1125 else /* Write followed by read */
1126 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1128 /* Ask for PEC if last message is a read */
1129 if (msg[num-1].flags & I2C_M_RD)
1130 msg[num-1].len++;
1133 if (i2c_transfer(adapter, msg, num) < 0)
1134 return -1;
1136 /* Check PEC if last message is a read */
1137 if (i && (msg[num-1].flags & I2C_M_RD)) {
1138 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1139 return -1;
1142 if (read_write == I2C_SMBUS_READ)
1143 switch(size) {
1144 case I2C_SMBUS_BYTE:
1145 data->byte = msgbuf0[0];
1146 break;
1147 case I2C_SMBUS_BYTE_DATA:
1148 data->byte = msgbuf1[0];
1149 break;
1150 case I2C_SMBUS_WORD_DATA:
1151 case I2C_SMBUS_PROC_CALL:
1152 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1153 break;
1154 case I2C_SMBUS_I2C_BLOCK_DATA:
1155 /* fixed at 32 for now */
1156 data->block[0] = I2C_SMBUS_BLOCK_MAX;
1157 for (i = 0; i < I2C_SMBUS_BLOCK_MAX; i++)
1158 data->block[i+1] = msgbuf1[i];
1159 break;
1161 return 0;
1165 s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1166 char read_write, u8 command, int size,
1167 union i2c_smbus_data * data)
1169 s32 res;
1171 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1173 if (adapter->algo->smbus_xfer) {
1174 mutex_lock(&adapter->bus_lock);
1175 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1176 command,size,data);
1177 mutex_unlock(&adapter->bus_lock);
1178 } else
1179 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1180 command,size,data);
1182 return res;
1186 /* Next four are needed by i2c-isa */
1187 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release);
1188 EXPORT_SYMBOL_GPL(i2c_adapter_driver);
1189 EXPORT_SYMBOL_GPL(i2c_adapter_class);
1190 EXPORT_SYMBOL_GPL(i2c_bus_type);
1192 EXPORT_SYMBOL(i2c_add_adapter);
1193 EXPORT_SYMBOL(i2c_del_adapter);
1194 EXPORT_SYMBOL(i2c_del_driver);
1195 EXPORT_SYMBOL(i2c_attach_client);
1196 EXPORT_SYMBOL(i2c_detach_client);
1197 EXPORT_SYMBOL(i2c_use_client);
1198 EXPORT_SYMBOL(i2c_release_client);
1199 EXPORT_SYMBOL(i2c_clients_command);
1200 EXPORT_SYMBOL(i2c_check_addr);
1202 EXPORT_SYMBOL(i2c_master_send);
1203 EXPORT_SYMBOL(i2c_master_recv);
1204 EXPORT_SYMBOL(i2c_control);
1205 EXPORT_SYMBOL(i2c_transfer);
1206 EXPORT_SYMBOL(i2c_get_adapter);
1207 EXPORT_SYMBOL(i2c_put_adapter);
1208 EXPORT_SYMBOL(i2c_probe);
1210 EXPORT_SYMBOL(i2c_smbus_xfer);
1211 EXPORT_SYMBOL(i2c_smbus_write_quick);
1212 EXPORT_SYMBOL(i2c_smbus_read_byte);
1213 EXPORT_SYMBOL(i2c_smbus_write_byte);
1214 EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1215 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1216 EXPORT_SYMBOL(i2c_smbus_read_word_data);
1217 EXPORT_SYMBOL(i2c_smbus_write_word_data);
1218 EXPORT_SYMBOL(i2c_smbus_write_block_data);
1219 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1220 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
1222 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1223 MODULE_DESCRIPTION("I2C-Bus main module");
1224 MODULE_LICENSE("GPL");