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 <asm/uaccess.h>
37 static LIST_HEAD(adapters);
38 static LIST_HEAD(drivers);
39 static DECLARE_MUTEX(core_lists);
40 static DEFINE_IDR(i2c_adapter_idr);
42 /* match always succeeds, as we want the probe() to tell if we really accept this match */
43 static int i2c_device_match(struct device *dev, struct device_driver *drv)
48 static int i2c_bus_suspend(struct device * dev, pm_message_t state)
52 if (dev->driver && dev->driver->suspend)
53 rc = dev->driver->suspend(dev, state);
57 static int i2c_bus_resume(struct device * dev)
61 if (dev->driver && dev->driver->resume)
62 rc = dev->driver->resume(dev);
66 struct bus_type i2c_bus_type = {
68 .match = i2c_device_match,
69 .suspend = i2c_bus_suspend,
70 .resume = i2c_bus_resume,
73 static int i2c_device_probe(struct device *dev)
78 static int i2c_device_remove(struct device *dev)
83 void i2c_adapter_dev_release(struct device *dev)
85 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
86 complete(&adap->dev_released);
89 struct device_driver i2c_adapter_driver = {
91 .name = "i2c_adapter",
93 .probe = i2c_device_probe,
94 .remove = i2c_device_remove,
97 static void i2c_adapter_class_dev_release(struct class_device *dev)
99 struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev);
100 complete(&adap->class_dev_released);
103 struct class i2c_adapter_class = {
104 .owner = THIS_MODULE,
105 .name = "i2c-adapter",
106 .release = &i2c_adapter_class_dev_release,
109 static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
111 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
112 return sprintf(buf, "%s\n", adap->name);
114 static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);
117 static void i2c_client_release(struct device *dev)
119 struct i2c_client *client = to_i2c_client(dev);
120 complete(&client->released);
123 static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
125 struct i2c_client *client = to_i2c_client(dev);
126 return sprintf(buf, "%s\n", client->name);
130 * We can't use the DEVICE_ATTR() macro here as we want the same filename for a
131 * different type of a device. So beware if the DEVICE_ATTR() macro ever
132 * changes, this definition will also have to change.
134 static struct device_attribute dev_attr_client_name = {
135 .attr = {.name = "name", .mode = S_IRUGO, .owner = THIS_MODULE },
136 .show = &show_client_name,
140 /* ---------------------------------------------------
141 * registering functions
142 * ---------------------------------------------------
146 * i2c_add_adapter is called from within the algorithm layer,
147 * when a new hw adapter registers. A new device is register to be
148 * available for clients.
150 int i2c_add_adapter(struct i2c_adapter *adap)
153 struct list_head *item;
154 struct i2c_driver *driver;
158 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) {
163 res = idr_get_new(&i2c_adapter_idr, adap, &id);
170 adap->nr = id & MAX_ID_MASK;
171 init_MUTEX(&adap->bus_lock);
172 init_MUTEX(&adap->clist_lock);
173 list_add_tail(&adap->list,&adapters);
174 INIT_LIST_HEAD(&adap->clients);
176 /* Add the adapter to the driver core.
177 * If the parent pointer is not set up,
178 * we add this adapter to the host bus.
180 if (adap->dev.parent == NULL)
181 adap->dev.parent = &platform_bus;
182 sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
183 adap->dev.driver = &i2c_adapter_driver;
184 adap->dev.release = &i2c_adapter_dev_release;
185 device_register(&adap->dev);
186 device_create_file(&adap->dev, &dev_attr_name);
188 /* Add this adapter to the i2c_adapter class */
189 memset(&adap->class_dev, 0x00, sizeof(struct class_device));
190 adap->class_dev.dev = &adap->dev;
191 adap->class_dev.class = &i2c_adapter_class;
192 strlcpy(adap->class_dev.class_id, adap->dev.bus_id, BUS_ID_SIZE);
193 class_device_register(&adap->class_dev);
195 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
197 /* inform drivers of new adapters */
198 list_for_each(item,&drivers) {
199 driver = list_entry(item, struct i2c_driver, list);
200 if (driver->attach_adapter)
201 /* We ignore the return code; if it fails, too bad */
202 driver->attach_adapter(adap);
211 int i2c_del_adapter(struct i2c_adapter *adap)
213 struct list_head *item, *_n;
214 struct i2c_adapter *adap_from_list;
215 struct i2c_driver *driver;
216 struct i2c_client *client;
221 /* First make sure that this adapter was ever added */
222 list_for_each_entry(adap_from_list, &adapters, list) {
223 if (adap_from_list == adap)
226 if (adap_from_list != adap) {
227 pr_debug("i2c-core: attempting to delete unregistered "
228 "adapter [%s]\n", adap->name);
233 list_for_each(item,&drivers) {
234 driver = list_entry(item, struct i2c_driver, list);
235 if (driver->detach_adapter)
236 if ((res = driver->detach_adapter(adap))) {
237 dev_err(&adap->dev, "detach_adapter failed "
239 driver->driver.name);
244 /* detach any active clients. This must be done first, because
245 * it can fail; in which case we give up. */
246 list_for_each_safe(item, _n, &adap->clients) {
247 client = list_entry(item, struct i2c_client, list);
249 if ((res=client->driver->detach_client(client))) {
250 dev_err(&adap->dev, "detach_client failed for client "
251 "[%s] at address 0x%02x\n", client->name,
257 /* clean up the sysfs representation */
258 init_completion(&adap->dev_released);
259 init_completion(&adap->class_dev_released);
260 class_device_unregister(&adap->class_dev);
261 device_remove_file(&adap->dev, &dev_attr_name);
262 device_unregister(&adap->dev);
263 list_del(&adap->list);
265 /* wait for sysfs to drop all references */
266 wait_for_completion(&adap->dev_released);
267 wait_for_completion(&adap->class_dev_released);
269 /* free dynamically allocated bus id */
270 idr_remove(&i2c_adapter_idr, adap->nr);
272 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
281 * What follows is the "upwards" interface: commands for talking to clients,
282 * which implement the functions to access the physical information of the
286 int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
288 struct list_head *item;
289 struct i2c_adapter *adapter;
294 /* add the driver to the list of i2c drivers in the driver core */
295 driver->driver.owner = owner;
296 driver->driver.bus = &i2c_bus_type;
297 driver->driver.probe = i2c_device_probe;
298 driver->driver.remove = i2c_device_remove;
300 res = driver_register(&driver->driver);
304 list_add_tail(&driver->list,&drivers);
305 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
307 /* now look for instances of driver on our adapters */
308 if (driver->attach_adapter) {
309 list_for_each(item,&adapters) {
310 adapter = list_entry(item, struct i2c_adapter, list);
311 driver->attach_adapter(adapter);
319 EXPORT_SYMBOL(i2c_register_driver);
321 int i2c_del_driver(struct i2c_driver *driver)
323 struct list_head *item1, *item2, *_n;
324 struct i2c_client *client;
325 struct i2c_adapter *adap;
331 /* Have a look at each adapter, if clients of this driver are still
332 * attached. If so, detach them to be able to kill the driver
335 list_for_each(item1,&adapters) {
336 adap = list_entry(item1, struct i2c_adapter, list);
337 if (driver->detach_adapter) {
338 if ((res = driver->detach_adapter(adap))) {
339 dev_err(&adap->dev, "detach_adapter failed "
341 driver->driver.name);
345 list_for_each_safe(item2, _n, &adap->clients) {
346 client = list_entry(item2, struct i2c_client, list);
347 if (client->driver != driver)
349 dev_dbg(&adap->dev, "detaching client [%s] "
350 "at 0x%02x\n", client->name,
352 if ((res = driver->detach_client(client))) {
353 dev_err(&adap->dev, "detach_client "
354 "failed for client [%s] at "
355 "0x%02x\n", client->name,
363 driver_unregister(&driver->driver);
364 list_del(&driver->list);
365 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
372 static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr)
374 struct list_head *item;
375 struct i2c_client *client;
377 list_for_each(item,&adapter->clients) {
378 client = list_entry(item, struct i2c_client, list);
379 if (client->addr == addr)
385 int i2c_check_addr(struct i2c_adapter *adapter, int addr)
389 down(&adapter->clist_lock);
390 rval = __i2c_check_addr(adapter, addr);
391 up(&adapter->clist_lock);
396 int i2c_attach_client(struct i2c_client *client)
398 struct i2c_adapter *adapter = client->adapter;
400 down(&adapter->clist_lock);
401 if (__i2c_check_addr(client->adapter, client->addr)) {
402 up(&adapter->clist_lock);
405 list_add_tail(&client->list,&adapter->clients);
406 up(&adapter->clist_lock);
408 if (adapter->client_register) {
409 if (adapter->client_register(client)) {
410 dev_dbg(&adapter->dev, "client_register "
411 "failed for client [%s] at 0x%02x\n",
412 client->name, client->addr);
416 client->usage_count = 0;
418 client->dev.parent = &client->adapter->dev;
419 client->dev.driver = &client->driver->driver;
420 client->dev.bus = &i2c_bus_type;
421 client->dev.release = &i2c_client_release;
423 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
424 "%d-%04x", i2c_adapter_id(adapter), client->addr);
425 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
426 client->name, client->dev.bus_id);
427 device_register(&client->dev);
428 device_create_file(&client->dev, &dev_attr_client_name);
434 int i2c_detach_client(struct i2c_client *client)
436 struct i2c_adapter *adapter = client->adapter;
439 if (client->usage_count > 0) {
440 dev_warn(&client->dev, "Client [%s] still busy, "
441 "can't detach\n", client->name);
445 if (adapter->client_unregister) {
446 res = adapter->client_unregister(client);
448 dev_err(&client->dev,
449 "client_unregister [%s] failed, "
450 "client not detached\n", client->name);
455 down(&adapter->clist_lock);
456 list_del(&client->list);
457 init_completion(&client->released);
458 device_remove_file(&client->dev, &dev_attr_client_name);
459 device_unregister(&client->dev);
460 up(&adapter->clist_lock);
461 wait_for_completion(&client->released);
467 static int i2c_inc_use_client(struct i2c_client *client)
470 if (!try_module_get(client->driver->driver.owner))
472 if (!try_module_get(client->adapter->owner)) {
473 module_put(client->driver->driver.owner);
480 static void i2c_dec_use_client(struct i2c_client *client)
482 module_put(client->driver->driver.owner);
483 module_put(client->adapter->owner);
486 int i2c_use_client(struct i2c_client *client)
490 ret = i2c_inc_use_client(client);
494 client->usage_count++;
499 int i2c_release_client(struct i2c_client *client)
501 if (!client->usage_count) {
502 pr_debug("i2c-core: %s used one too many times\n",
507 client->usage_count--;
508 i2c_dec_use_client(client);
513 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
515 struct list_head *item;
516 struct i2c_client *client;
518 down(&adap->clist_lock);
519 list_for_each(item,&adap->clients) {
520 client = list_entry(item, struct i2c_client, list);
521 if (!try_module_get(client->driver->driver.owner))
523 if (NULL != client->driver->command) {
524 up(&adap->clist_lock);
525 client->driver->command(client,cmd,arg);
526 down(&adap->clist_lock);
528 module_put(client->driver->driver.owner);
530 up(&adap->clist_lock);
533 static int __init i2c_init(void)
537 retval = bus_register(&i2c_bus_type);
540 retval = driver_register(&i2c_adapter_driver);
543 return class_register(&i2c_adapter_class);
546 static void __exit i2c_exit(void)
548 class_unregister(&i2c_adapter_class);
549 driver_unregister(&i2c_adapter_driver);
550 bus_unregister(&i2c_bus_type);
553 subsys_initcall(i2c_init);
554 module_exit(i2c_exit);
556 /* ----------------------------------------------------
557 * the functional interface to the i2c busses.
558 * ----------------------------------------------------
561 int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
565 if (adap->algo->master_xfer) {
567 for (ret = 0; ret < num; ret++) {
568 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
569 "len=%d\n", ret, msgs[ret].flags & I2C_M_RD ?
570 'R' : 'W', msgs[ret].addr, msgs[ret].len);
574 down(&adap->bus_lock);
575 ret = adap->algo->master_xfer(adap,msgs,num);
580 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
585 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
588 struct i2c_adapter *adap=client->adapter;
591 msg.addr = client->addr;
592 msg.flags = client->flags & I2C_M_TEN;
594 msg.buf = (char *)buf;
596 ret = i2c_transfer(adap, &msg, 1);
598 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
599 transmitted, else error code. */
600 return (ret == 1) ? count : ret;
603 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
605 struct i2c_adapter *adap=client->adapter;
609 msg.addr = client->addr;
610 msg.flags = client->flags & I2C_M_TEN;
611 msg.flags |= I2C_M_RD;
615 ret = i2c_transfer(adap, &msg, 1);
617 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
618 transmitted, else error code. */
619 return (ret == 1) ? count : ret;
623 int i2c_control(struct i2c_client *client,
624 unsigned int cmd, unsigned long arg)
627 struct i2c_adapter *adap = client->adapter;
629 dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
638 if (adap->algo->algo_control!=NULL)
639 ret = adap->algo->algo_control(adap,cmd,arg);
644 /* ----------------------------------------------------
645 * the i2c address scanning function
646 * Will not work for 10-bit addresses!
647 * ----------------------------------------------------
649 static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
650 int (*found_proc) (struct i2c_adapter *, int, int))
654 /* Make sure the address is valid */
655 if (addr < 0x03 || addr > 0x77) {
656 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
661 /* Skip if already in use */
662 if (i2c_check_addr(adapter, addr))
665 /* Make sure there is something at this address, unless forced */
667 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
668 I2C_SMBUS_QUICK, NULL) < 0)
671 /* prevent 24RF08 corruption */
672 if ((addr & ~0x0f) == 0x50)
673 i2c_smbus_xfer(adapter, addr, 0, 0, 0,
674 I2C_SMBUS_QUICK, NULL);
677 /* Finally call the custom detection function */
678 err = found_proc(adapter, addr, kind);
680 /* -ENODEV can be returned if there is a chip at the given address
681 but it isn't supported by this chip driver. We catch it here as
682 this isn't an error. */
683 return (err == -ENODEV) ? 0 : err;
686 int i2c_probe(struct i2c_adapter *adapter,
687 struct i2c_client_address_data *address_data,
688 int (*found_proc) (struct i2c_adapter *, int, int))
691 int adap_id = i2c_adapter_id(adapter);
693 /* Force entries are done first, and are not affected by ignore
695 if (address_data->forces) {
696 unsigned short **forces = address_data->forces;
699 for (kind = 0; forces[kind]; kind++) {
700 for (i = 0; forces[kind][i] != I2C_CLIENT_END;
702 if (forces[kind][i] == adap_id
703 || forces[kind][i] == ANY_I2C_BUS) {
704 dev_dbg(&adapter->dev, "found force "
705 "parameter for adapter %d, "
706 "addr 0x%02x, kind %d\n",
707 adap_id, forces[kind][i + 1],
709 err = i2c_probe_address(adapter,
719 /* Stop here if we can't use SMBUS_QUICK */
720 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
721 if (address_data->probe[0] == I2C_CLIENT_END
722 && address_data->normal_i2c[0] == I2C_CLIENT_END)
725 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
726 "can't probe for chips\n");
730 /* Probe entries are done second, and are not affected by ignore
732 for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
733 if (address_data->probe[i] == adap_id
734 || address_data->probe[i] == ANY_I2C_BUS) {
735 dev_dbg(&adapter->dev, "found probe parameter for "
736 "adapter %d, addr 0x%02x\n", adap_id,
737 address_data->probe[i + 1]);
738 err = i2c_probe_address(adapter,
739 address_data->probe[i + 1],
746 /* Normal entries are done last, unless shadowed by an ignore entry */
747 for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
751 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
753 if ((address_data->ignore[j] == adap_id ||
754 address_data->ignore[j] == ANY_I2C_BUS)
755 && address_data->ignore[j + 1]
756 == address_data->normal_i2c[i]) {
757 dev_dbg(&adapter->dev, "found ignore "
758 "parameter for adapter %d, "
759 "addr 0x%02x\n", adap_id,
760 address_data->ignore[j + 1]);
768 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
769 "addr 0x%02x\n", adap_id,
770 address_data->normal_i2c[i]);
771 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
780 struct i2c_adapter* i2c_get_adapter(int id)
782 struct i2c_adapter *adapter;
785 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
786 if (adapter && !try_module_get(adapter->owner))
793 void i2c_put_adapter(struct i2c_adapter *adap)
795 module_put(adap->owner);
798 /* The SMBus parts */
800 #define POLY (0x1070U << 3)
806 for(i = 0; i < 8; i++) {
811 return (u8)(data >> 8);
814 /* Incremental CRC8 over count bytes in the array pointed to by p */
815 static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
819 for(i = 0; i < count; i++)
820 crc = crc8((crc ^ p[i]) << 8);
824 /* Assume a 7-bit address, which is reasonable for SMBus */
825 static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
827 /* The address will be sent first */
828 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
829 pec = i2c_smbus_pec(pec, &addr, 1);
831 /* The data buffer follows */
832 return i2c_smbus_pec(pec, msg->buf, msg->len);
835 /* Used for write only transactions */
836 static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
838 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
842 /* Return <0 on CRC error
843 If there was a write before this read (most cases) we need to take the
844 partial CRC from the write part into account.
845 Note that this function does modify the message (we need to decrease the
846 message length to hide the CRC byte from the caller). */
847 static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
849 u8 rpec = msg->buf[--msg->len];
850 cpec = i2c_smbus_msg_pec(cpec, msg);
853 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
860 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
862 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
863 value,0,I2C_SMBUS_QUICK,NULL);
866 s32 i2c_smbus_read_byte(struct i2c_client *client)
868 union i2c_smbus_data data;
869 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
870 I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
873 return 0x0FF & data.byte;
876 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
878 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
879 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
882 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
884 union i2c_smbus_data data;
885 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
886 I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
889 return 0x0FF & data.byte;
892 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
894 union i2c_smbus_data data;
896 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
897 I2C_SMBUS_WRITE,command,
898 I2C_SMBUS_BYTE_DATA,&data);
901 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
903 union i2c_smbus_data data;
904 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
905 I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
908 return 0x0FFFF & data.word;
911 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
913 union i2c_smbus_data data;
915 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
916 I2C_SMBUS_WRITE,command,
917 I2C_SMBUS_WORD_DATA,&data);
920 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
921 u8 length, u8 *values)
923 union i2c_smbus_data data;
925 if (length > I2C_SMBUS_BLOCK_MAX)
926 length = I2C_SMBUS_BLOCK_MAX;
927 for (i = 1; i <= length; i++)
928 data.block[i] = values[i-1];
929 data.block[0] = length;
930 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
931 I2C_SMBUS_WRITE,command,
932 I2C_SMBUS_BLOCK_DATA,&data);
935 /* Returns the number of read bytes */
936 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
938 union i2c_smbus_data data;
940 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
941 I2C_SMBUS_READ,command,
942 I2C_SMBUS_I2C_BLOCK_DATA,&data))
945 for (i = 1; i <= data.block[0]; i++)
946 values[i-1] = data.block[i];
947 return data.block[0];
951 /* Simulate a SMBus command using the i2c protocol
952 No checking of parameters is done! */
953 static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
954 unsigned short flags,
955 char read_write, u8 command, int size,
956 union i2c_smbus_data * data)
958 /* So we need to generate a series of msgs. In the case of writing, we
959 need to use only one message; when reading, we need two. We initialize
960 most things with sane defaults, to keep the code below somewhat
962 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
963 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
964 int num = read_write == I2C_SMBUS_READ?2:1;
965 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
966 { addr, flags | I2C_M_RD, 0, msgbuf1 }
971 msgbuf0[0] = command;
973 case I2C_SMBUS_QUICK:
975 /* Special case: The read/write field is used as data */
976 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
980 if (read_write == I2C_SMBUS_READ) {
981 /* Special case: only a read! */
982 msg[0].flags = I2C_M_RD | flags;
986 case I2C_SMBUS_BYTE_DATA:
987 if (read_write == I2C_SMBUS_READ)
991 msgbuf0[1] = data->byte;
994 case I2C_SMBUS_WORD_DATA:
995 if (read_write == I2C_SMBUS_READ)
999 msgbuf0[1] = data->word & 0xff;
1000 msgbuf0[2] = (data->word >> 8) & 0xff;
1003 case I2C_SMBUS_PROC_CALL:
1004 num = 2; /* Special case */
1005 read_write = I2C_SMBUS_READ;
1008 msgbuf0[1] = data->word & 0xff;
1009 msgbuf0[2] = (data->word >> 8) & 0xff;
1011 case I2C_SMBUS_BLOCK_DATA:
1012 if (read_write == I2C_SMBUS_READ) {
1013 dev_err(&adapter->dev, "Block read not supported "
1014 "under I2C emulation!\n");
1017 msg[0].len = data->block[0] + 2;
1018 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1019 dev_err(&adapter->dev, "smbus_access called with "
1020 "invalid block write size (%d)\n",
1024 for (i = 1; i < msg[0].len; i++)
1025 msgbuf0[i] = data->block[i-1];
1028 case I2C_SMBUS_BLOCK_PROC_CALL:
1029 dev_dbg(&adapter->dev, "Block process call not supported "
1030 "under I2C emulation!\n");
1032 case I2C_SMBUS_I2C_BLOCK_DATA:
1033 if (read_write == I2C_SMBUS_READ) {
1034 msg[1].len = I2C_SMBUS_BLOCK_MAX;
1036 msg[0].len = data->block[0] + 1;
1037 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1038 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1039 "invalid block write size (%d)\n",
1043 for (i = 1; i <= data->block[0]; i++)
1044 msgbuf0[i] = data->block[i];
1048 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1053 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1054 && size != I2C_SMBUS_I2C_BLOCK_DATA);
1056 /* Compute PEC if first message is a write */
1057 if (!(msg[0].flags & I2C_M_RD)) {
1058 if (num == 1) /* Write only */
1059 i2c_smbus_add_pec(&msg[0]);
1060 else /* Write followed by read */
1061 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1063 /* Ask for PEC if last message is a read */
1064 if (msg[num-1].flags & I2C_M_RD)
1068 if (i2c_transfer(adapter, msg, num) < 0)
1071 /* Check PEC if last message is a read */
1072 if (i && (msg[num-1].flags & I2C_M_RD)) {
1073 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1077 if (read_write == I2C_SMBUS_READ)
1079 case I2C_SMBUS_BYTE:
1080 data->byte = msgbuf0[0];
1082 case I2C_SMBUS_BYTE_DATA:
1083 data->byte = msgbuf1[0];
1085 case I2C_SMBUS_WORD_DATA:
1086 case I2C_SMBUS_PROC_CALL:
1087 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1089 case I2C_SMBUS_I2C_BLOCK_DATA:
1090 /* fixed at 32 for now */
1091 data->block[0] = I2C_SMBUS_BLOCK_MAX;
1092 for (i = 0; i < I2C_SMBUS_BLOCK_MAX; i++)
1093 data->block[i+1] = msgbuf1[i];
1100 s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1101 char read_write, u8 command, int size,
1102 union i2c_smbus_data * data)
1106 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1108 if (adapter->algo->smbus_xfer) {
1109 down(&adapter->bus_lock);
1110 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1112 up(&adapter->bus_lock);
1114 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1121 /* Next four are needed by i2c-isa */
1122 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release);
1123 EXPORT_SYMBOL_GPL(i2c_adapter_driver);
1124 EXPORT_SYMBOL_GPL(i2c_adapter_class);
1125 EXPORT_SYMBOL_GPL(i2c_bus_type);
1127 EXPORT_SYMBOL(i2c_add_adapter);
1128 EXPORT_SYMBOL(i2c_del_adapter);
1129 EXPORT_SYMBOL(i2c_del_driver);
1130 EXPORT_SYMBOL(i2c_attach_client);
1131 EXPORT_SYMBOL(i2c_detach_client);
1132 EXPORT_SYMBOL(i2c_use_client);
1133 EXPORT_SYMBOL(i2c_release_client);
1134 EXPORT_SYMBOL(i2c_clients_command);
1135 EXPORT_SYMBOL(i2c_check_addr);
1137 EXPORT_SYMBOL(i2c_master_send);
1138 EXPORT_SYMBOL(i2c_master_recv);
1139 EXPORT_SYMBOL(i2c_control);
1140 EXPORT_SYMBOL(i2c_transfer);
1141 EXPORT_SYMBOL(i2c_get_adapter);
1142 EXPORT_SYMBOL(i2c_put_adapter);
1143 EXPORT_SYMBOL(i2c_probe);
1145 EXPORT_SYMBOL(i2c_smbus_xfer);
1146 EXPORT_SYMBOL(i2c_smbus_write_quick);
1147 EXPORT_SYMBOL(i2c_smbus_read_byte);
1148 EXPORT_SYMBOL(i2c_smbus_write_byte);
1149 EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1150 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1151 EXPORT_SYMBOL(i2c_smbus_read_word_data);
1152 EXPORT_SYMBOL(i2c_smbus_write_word_data);
1153 EXPORT_SYMBOL(i2c_smbus_write_block_data);
1154 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1156 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1157 MODULE_DESCRIPTION("I2C-Bus main module");
1158 MODULE_LICENSE("GPL");