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 <linux/completion.h>
36 #include <asm/uaccess.h>
39 static LIST_HEAD(adapters);
40 static LIST_HEAD(drivers);
41 static DEFINE_MUTEX(core_lists);
42 static DEFINE_IDR(i2c_adapter_idr);
45 /* ------------------------------------------------------------------------- */
47 /* match always succeeds, as we want the probe() to tell if we really accept this match */
48 static int i2c_device_match(struct device *dev, struct device_driver *drv)
53 static int i2c_device_probe(struct device *dev)
58 static int i2c_device_remove(struct device *dev)
63 static void i2c_device_shutdown(struct device *dev)
65 struct i2c_driver *driver;
69 driver = to_i2c_driver(dev->driver);
71 driver->shutdown(to_i2c_client(dev));
74 static int i2c_device_suspend(struct device * dev, pm_message_t mesg)
76 struct i2c_driver *driver;
80 driver = to_i2c_driver(dev->driver);
83 return driver->suspend(to_i2c_client(dev), mesg);
86 static int i2c_device_resume(struct device * dev)
88 struct i2c_driver *driver;
92 driver = to_i2c_driver(dev->driver);
95 return driver->resume(to_i2c_client(dev));
98 struct bus_type i2c_bus_type = {
100 .match = i2c_device_match,
101 .probe = i2c_device_probe,
102 .remove = i2c_device_remove,
103 .shutdown = i2c_device_shutdown,
104 .suspend = i2c_device_suspend,
105 .resume = i2c_device_resume,
108 /* ------------------------------------------------------------------------- */
110 void i2c_adapter_dev_release(struct device *dev)
112 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
113 complete(&adap->dev_released);
116 /* ------------------------------------------------------------------------- */
118 /* I2C bus adapters -- one roots each I2C or SMBUS segment */
120 struct class i2c_adapter_class = {
121 .owner = THIS_MODULE,
122 .name = "i2c-adapter",
125 static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
127 struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
128 return sprintf(buf, "%s\n", adap->name);
130 static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);
133 static void i2c_client_release(struct device *dev)
135 struct i2c_client *client = to_i2c_client(dev);
136 complete(&client->released);
139 static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
141 struct i2c_client *client = to_i2c_client(dev);
142 return sprintf(buf, "%s\n", client->name);
146 * We can't use the DEVICE_ATTR() macro here, as we used the same name for
147 * an i2c adapter attribute (above).
149 static struct device_attribute dev_attr_client_name =
150 __ATTR(name, S_IRUGO, &show_client_name, NULL);
153 /* ---------------------------------------------------
154 * registering functions
155 * ---------------------------------------------------
159 * i2c_add_adapter is called from within the algorithm layer,
160 * when a new hw adapter registers. A new device is register to be
161 * available for clients.
163 int i2c_add_adapter(struct i2c_adapter *adap)
166 struct list_head *item;
167 struct i2c_driver *driver;
169 mutex_lock(&core_lists);
171 if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) {
176 res = idr_get_new(&i2c_adapter_idr, adap, &id);
183 adap->nr = id & MAX_ID_MASK;
184 mutex_init(&adap->bus_lock);
185 mutex_init(&adap->clist_lock);
186 list_add_tail(&adap->list,&adapters);
187 INIT_LIST_HEAD(&adap->clients);
189 /* Add the adapter to the driver core.
190 * If the parent pointer is not set up,
191 * we add this adapter to the host bus.
193 if (adap->dev.parent == NULL) {
194 adap->dev.parent = &platform_bus;
195 pr_debug("I2C adapter driver [%s] forgot to specify "
196 "physical device\n", adap->name);
198 sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
199 adap->dev.release = &i2c_adapter_dev_release;
200 adap->dev.class = &i2c_adapter_class;
201 res = device_register(&adap->dev);
204 res = device_create_file(&adap->dev, &dev_attr_name);
208 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
210 /* inform drivers of new adapters */
211 list_for_each(item,&drivers) {
212 driver = list_entry(item, struct i2c_driver, list);
213 if (driver->attach_adapter)
214 /* We ignore the return code; if it fails, too bad */
215 driver->attach_adapter(adap);
219 mutex_unlock(&core_lists);
223 init_completion(&adap->dev_released); /* Needed? */
224 device_unregister(&adap->dev);
225 wait_for_completion(&adap->dev_released);
227 list_del(&adap->list);
228 idr_remove(&i2c_adapter_idr, adap->nr);
233 int i2c_del_adapter(struct i2c_adapter *adap)
235 struct list_head *item, *_n;
236 struct i2c_adapter *adap_from_list;
237 struct i2c_driver *driver;
238 struct i2c_client *client;
241 mutex_lock(&core_lists);
243 /* First make sure that this adapter was ever added */
244 list_for_each_entry(adap_from_list, &adapters, list) {
245 if (adap_from_list == adap)
248 if (adap_from_list != adap) {
249 pr_debug("i2c-core: attempting to delete unregistered "
250 "adapter [%s]\n", adap->name);
255 list_for_each(item,&drivers) {
256 driver = list_entry(item, struct i2c_driver, list);
257 if (driver->detach_adapter)
258 if ((res = driver->detach_adapter(adap))) {
259 dev_err(&adap->dev, "detach_adapter failed "
261 driver->driver.name);
266 /* detach any active clients. This must be done first, because
267 * it can fail; in which case we give up. */
268 list_for_each_safe(item, _n, &adap->clients) {
269 client = list_entry(item, struct i2c_client, list);
271 if ((res=client->driver->detach_client(client))) {
272 dev_err(&adap->dev, "detach_client failed for client "
273 "[%s] at address 0x%02x\n", client->name,
279 /* clean up the sysfs representation */
280 init_completion(&adap->dev_released);
281 device_remove_file(&adap->dev, &dev_attr_name);
282 device_unregister(&adap->dev);
283 list_del(&adap->list);
285 /* wait for sysfs to drop all references */
286 wait_for_completion(&adap->dev_released);
288 /* free dynamically allocated bus id */
289 idr_remove(&i2c_adapter_idr, adap->nr);
291 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
294 mutex_unlock(&core_lists);
300 * What follows is the "upwards" interface: commands for talking to clients,
301 * which implement the functions to access the physical information of the
305 int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
309 /* add the driver to the list of i2c drivers in the driver core */
310 driver->driver.owner = owner;
311 driver->driver.bus = &i2c_bus_type;
313 res = driver_register(&driver->driver);
317 mutex_lock(&core_lists);
319 list_add_tail(&driver->list,&drivers);
320 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
322 /* now look for instances of driver on our adapters */
323 if (driver->attach_adapter) {
324 struct i2c_adapter *adapter;
326 list_for_each_entry(adapter, &adapters, list) {
327 driver->attach_adapter(adapter);
331 mutex_unlock(&core_lists);
334 EXPORT_SYMBOL(i2c_register_driver);
336 int i2c_del_driver(struct i2c_driver *driver)
338 struct list_head *item1, *item2, *_n;
339 struct i2c_client *client;
340 struct i2c_adapter *adap;
344 mutex_lock(&core_lists);
346 /* Have a look at each adapter, if clients of this driver are still
347 * attached. If so, detach them to be able to kill the driver
350 list_for_each(item1,&adapters) {
351 adap = list_entry(item1, struct i2c_adapter, list);
352 if (driver->detach_adapter) {
353 if ((res = driver->detach_adapter(adap))) {
354 dev_err(&adap->dev, "detach_adapter failed "
356 driver->driver.name);
360 list_for_each_safe(item2, _n, &adap->clients) {
361 client = list_entry(item2, struct i2c_client, list);
362 if (client->driver != driver)
364 dev_dbg(&adap->dev, "detaching client [%s] "
365 "at 0x%02x\n", client->name,
367 if ((res = driver->detach_client(client))) {
368 dev_err(&adap->dev, "detach_client "
369 "failed for client [%s] at "
370 "0x%02x\n", client->name,
378 driver_unregister(&driver->driver);
379 list_del(&driver->list);
380 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
383 mutex_unlock(&core_lists);
387 static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr)
389 struct list_head *item;
390 struct i2c_client *client;
392 list_for_each(item,&adapter->clients) {
393 client = list_entry(item, struct i2c_client, list);
394 if (client->addr == addr)
400 int i2c_check_addr(struct i2c_adapter *adapter, int addr)
404 mutex_lock(&adapter->clist_lock);
405 rval = __i2c_check_addr(adapter, addr);
406 mutex_unlock(&adapter->clist_lock);
411 int i2c_attach_client(struct i2c_client *client)
413 struct i2c_adapter *adapter = client->adapter;
416 mutex_lock(&adapter->clist_lock);
417 if (__i2c_check_addr(client->adapter, client->addr)) {
421 list_add_tail(&client->list,&adapter->clients);
423 client->usage_count = 0;
425 client->dev.parent = &client->adapter->dev;
426 client->dev.driver = &client->driver->driver;
427 client->dev.bus = &i2c_bus_type;
428 client->dev.release = &i2c_client_release;
430 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
431 "%d-%04x", i2c_adapter_id(adapter), client->addr);
432 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
433 client->name, client->dev.bus_id);
434 res = device_register(&client->dev);
437 res = device_create_file(&client->dev, &dev_attr_client_name);
440 mutex_unlock(&adapter->clist_lock);
442 if (adapter->client_register) {
443 if (adapter->client_register(client)) {
444 dev_dbg(&adapter->dev, "client_register "
445 "failed for client [%s] at 0x%02x\n",
446 client->name, client->addr);
453 init_completion(&client->released); /* Needed? */
454 device_unregister(&client->dev);
455 wait_for_completion(&client->released);
457 list_del(&client->list);
458 dev_err(&adapter->dev, "Failed to attach i2c client %s at 0x%02x "
459 "(%d)\n", client->name, client->addr, res);
461 mutex_unlock(&adapter->clist_lock);
466 int i2c_detach_client(struct i2c_client *client)
468 struct i2c_adapter *adapter = client->adapter;
471 if (client->usage_count > 0) {
472 dev_warn(&client->dev, "Client [%s] still busy, "
473 "can't detach\n", client->name);
477 if (adapter->client_unregister) {
478 res = adapter->client_unregister(client);
480 dev_err(&client->dev,
481 "client_unregister [%s] failed, "
482 "client not detached\n", client->name);
487 mutex_lock(&adapter->clist_lock);
488 list_del(&client->list);
489 init_completion(&client->released);
490 device_remove_file(&client->dev, &dev_attr_client_name);
491 device_unregister(&client->dev);
492 mutex_unlock(&adapter->clist_lock);
493 wait_for_completion(&client->released);
499 static int i2c_inc_use_client(struct i2c_client *client)
502 if (!try_module_get(client->driver->driver.owner))
504 if (!try_module_get(client->adapter->owner)) {
505 module_put(client->driver->driver.owner);
512 static void i2c_dec_use_client(struct i2c_client *client)
514 module_put(client->driver->driver.owner);
515 module_put(client->adapter->owner);
518 int i2c_use_client(struct i2c_client *client)
522 ret = i2c_inc_use_client(client);
526 client->usage_count++;
531 int i2c_release_client(struct i2c_client *client)
533 if (!client->usage_count) {
534 pr_debug("i2c-core: %s used one too many times\n",
539 client->usage_count--;
540 i2c_dec_use_client(client);
545 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
547 struct list_head *item;
548 struct i2c_client *client;
550 mutex_lock(&adap->clist_lock);
551 list_for_each(item,&adap->clients) {
552 client = list_entry(item, struct i2c_client, list);
553 if (!try_module_get(client->driver->driver.owner))
555 if (NULL != client->driver->command) {
556 mutex_unlock(&adap->clist_lock);
557 client->driver->command(client,cmd,arg);
558 mutex_lock(&adap->clist_lock);
560 module_put(client->driver->driver.owner);
562 mutex_unlock(&adap->clist_lock);
565 static int __init i2c_init(void)
569 retval = bus_register(&i2c_bus_type);
572 return class_register(&i2c_adapter_class);
575 static void __exit i2c_exit(void)
577 class_unregister(&i2c_adapter_class);
578 bus_unregister(&i2c_bus_type);
581 subsys_initcall(i2c_init);
582 module_exit(i2c_exit);
584 /* ----------------------------------------------------
585 * the functional interface to the i2c busses.
586 * ----------------------------------------------------
589 int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
593 if (adap->algo->master_xfer) {
595 for (ret = 0; ret < num; ret++) {
596 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
597 "len=%d\n", ret, msgs[ret].flags & I2C_M_RD ?
598 'R' : 'W', msgs[ret].addr, msgs[ret].len);
602 mutex_lock_nested(&adap->bus_lock, adap->level);
603 ret = adap->algo->master_xfer(adap,msgs,num);
604 mutex_unlock(&adap->bus_lock);
608 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
613 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
616 struct i2c_adapter *adap=client->adapter;
619 msg.addr = client->addr;
620 msg.flags = client->flags & I2C_M_TEN;
622 msg.buf = (char *)buf;
624 ret = i2c_transfer(adap, &msg, 1);
626 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
627 transmitted, else error code. */
628 return (ret == 1) ? count : ret;
631 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
633 struct i2c_adapter *adap=client->adapter;
637 msg.addr = client->addr;
638 msg.flags = client->flags & I2C_M_TEN;
639 msg.flags |= I2C_M_RD;
643 ret = i2c_transfer(adap, &msg, 1);
645 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
646 transmitted, else error code. */
647 return (ret == 1) ? count : ret;
651 int i2c_control(struct i2c_client *client,
652 unsigned int cmd, unsigned long arg)
655 struct i2c_adapter *adap = client->adapter;
657 dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
666 if (adap->algo->algo_control!=NULL)
667 ret = adap->algo->algo_control(adap,cmd,arg);
672 /* ----------------------------------------------------
673 * the i2c address scanning function
674 * Will not work for 10-bit addresses!
675 * ----------------------------------------------------
677 static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
678 int (*found_proc) (struct i2c_adapter *, int, int))
682 /* Make sure the address is valid */
683 if (addr < 0x03 || addr > 0x77) {
684 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
689 /* Skip if already in use */
690 if (i2c_check_addr(adapter, addr))
693 /* Make sure there is something at this address, unless forced */
695 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
696 I2C_SMBUS_QUICK, NULL) < 0)
699 /* prevent 24RF08 corruption */
700 if ((addr & ~0x0f) == 0x50)
701 i2c_smbus_xfer(adapter, addr, 0, 0, 0,
702 I2C_SMBUS_QUICK, NULL);
705 /* Finally call the custom detection function */
706 err = found_proc(adapter, addr, kind);
707 /* -ENODEV can be returned if there is a chip at the given address
708 but it isn't supported by this chip driver. We catch it here as
709 this isn't an error. */
714 dev_warn(&adapter->dev, "Client creation failed at 0x%x (%d)\n",
719 int i2c_probe(struct i2c_adapter *adapter,
720 struct i2c_client_address_data *address_data,
721 int (*found_proc) (struct i2c_adapter *, int, int))
724 int adap_id = i2c_adapter_id(adapter);
726 /* Force entries are done first, and are not affected by ignore
728 if (address_data->forces) {
729 unsigned short **forces = address_data->forces;
732 for (kind = 0; forces[kind]; kind++) {
733 for (i = 0; forces[kind][i] != I2C_CLIENT_END;
735 if (forces[kind][i] == adap_id
736 || forces[kind][i] == ANY_I2C_BUS) {
737 dev_dbg(&adapter->dev, "found force "
738 "parameter for adapter %d, "
739 "addr 0x%02x, kind %d\n",
740 adap_id, forces[kind][i + 1],
742 err = i2c_probe_address(adapter,
752 /* Stop here if we can't use SMBUS_QUICK */
753 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
754 if (address_data->probe[0] == I2C_CLIENT_END
755 && address_data->normal_i2c[0] == I2C_CLIENT_END)
758 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
759 "can't probe for chips\n");
763 /* Probe entries are done second, and are not affected by ignore
765 for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
766 if (address_data->probe[i] == adap_id
767 || address_data->probe[i] == ANY_I2C_BUS) {
768 dev_dbg(&adapter->dev, "found probe parameter for "
769 "adapter %d, addr 0x%02x\n", adap_id,
770 address_data->probe[i + 1]);
771 err = i2c_probe_address(adapter,
772 address_data->probe[i + 1],
779 /* Normal entries are done last, unless shadowed by an ignore entry */
780 for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
784 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
786 if ((address_data->ignore[j] == adap_id ||
787 address_data->ignore[j] == ANY_I2C_BUS)
788 && address_data->ignore[j + 1]
789 == address_data->normal_i2c[i]) {
790 dev_dbg(&adapter->dev, "found ignore "
791 "parameter for adapter %d, "
792 "addr 0x%02x\n", adap_id,
793 address_data->ignore[j + 1]);
801 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
802 "addr 0x%02x\n", adap_id,
803 address_data->normal_i2c[i]);
804 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
813 struct i2c_adapter* i2c_get_adapter(int id)
815 struct i2c_adapter *adapter;
817 mutex_lock(&core_lists);
818 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
819 if (adapter && !try_module_get(adapter->owner))
822 mutex_unlock(&core_lists);
826 void i2c_put_adapter(struct i2c_adapter *adap)
828 module_put(adap->owner);
831 /* The SMBus parts */
833 #define POLY (0x1070U << 3)
839 for(i = 0; i < 8; i++) {
844 return (u8)(data >> 8);
847 /* Incremental CRC8 over count bytes in the array pointed to by p */
848 static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
852 for(i = 0; i < count; i++)
853 crc = crc8((crc ^ p[i]) << 8);
857 /* Assume a 7-bit address, which is reasonable for SMBus */
858 static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
860 /* The address will be sent first */
861 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
862 pec = i2c_smbus_pec(pec, &addr, 1);
864 /* The data buffer follows */
865 return i2c_smbus_pec(pec, msg->buf, msg->len);
868 /* Used for write only transactions */
869 static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
871 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
875 /* Return <0 on CRC error
876 If there was a write before this read (most cases) we need to take the
877 partial CRC from the write part into account.
878 Note that this function does modify the message (we need to decrease the
879 message length to hide the CRC byte from the caller). */
880 static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
882 u8 rpec = msg->buf[--msg->len];
883 cpec = i2c_smbus_msg_pec(cpec, msg);
886 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
893 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
895 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
896 value,0,I2C_SMBUS_QUICK,NULL);
899 s32 i2c_smbus_read_byte(struct i2c_client *client)
901 union i2c_smbus_data data;
902 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
903 I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
909 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
911 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
912 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
915 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
917 union i2c_smbus_data data;
918 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
919 I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
925 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
927 union i2c_smbus_data data;
929 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
930 I2C_SMBUS_WRITE,command,
931 I2C_SMBUS_BYTE_DATA,&data);
934 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
936 union i2c_smbus_data data;
937 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
938 I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
944 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
946 union i2c_smbus_data data;
948 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
949 I2C_SMBUS_WRITE,command,
950 I2C_SMBUS_WORD_DATA,&data);
953 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
954 u8 length, const u8 *values)
956 union i2c_smbus_data data;
958 if (length > I2C_SMBUS_BLOCK_MAX)
959 length = I2C_SMBUS_BLOCK_MAX;
960 data.block[0] = length;
961 memcpy(&data.block[1], values, length);
962 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
963 I2C_SMBUS_WRITE,command,
964 I2C_SMBUS_BLOCK_DATA,&data);
967 /* Returns the number of read bytes */
968 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
970 union i2c_smbus_data data;
972 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
973 I2C_SMBUS_READ,command,
974 I2C_SMBUS_I2C_BLOCK_DATA,&data))
977 memcpy(values, &data.block[1], data.block[0]);
978 return data.block[0];
981 s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
982 u8 length, const u8 *values)
984 union i2c_smbus_data data;
986 if (length > I2C_SMBUS_BLOCK_MAX)
987 length = I2C_SMBUS_BLOCK_MAX;
988 data.block[0] = length;
989 memcpy(data.block + 1, values, length);
990 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
991 I2C_SMBUS_WRITE, command,
992 I2C_SMBUS_I2C_BLOCK_DATA, &data);
995 /* Simulate a SMBus command using the i2c protocol
996 No checking of parameters is done! */
997 static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
998 unsigned short flags,
999 char read_write, u8 command, int size,
1000 union i2c_smbus_data * data)
1002 /* So we need to generate a series of msgs. In the case of writing, we
1003 need to use only one message; when reading, we need two. We initialize
1004 most things with sane defaults, to keep the code below somewhat
1006 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1007 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
1008 int num = read_write == I2C_SMBUS_READ?2:1;
1009 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1010 { addr, flags | I2C_M_RD, 0, msgbuf1 }
1015 msgbuf0[0] = command;
1017 case I2C_SMBUS_QUICK:
1019 /* Special case: The read/write field is used as data */
1020 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
1023 case I2C_SMBUS_BYTE:
1024 if (read_write == I2C_SMBUS_READ) {
1025 /* Special case: only a read! */
1026 msg[0].flags = I2C_M_RD | flags;
1030 case I2C_SMBUS_BYTE_DATA:
1031 if (read_write == I2C_SMBUS_READ)
1035 msgbuf0[1] = data->byte;
1038 case I2C_SMBUS_WORD_DATA:
1039 if (read_write == I2C_SMBUS_READ)
1043 msgbuf0[1] = data->word & 0xff;
1044 msgbuf0[2] = data->word >> 8;
1047 case I2C_SMBUS_PROC_CALL:
1048 num = 2; /* Special case */
1049 read_write = I2C_SMBUS_READ;
1052 msgbuf0[1] = data->word & 0xff;
1053 msgbuf0[2] = data->word >> 8;
1055 case I2C_SMBUS_BLOCK_DATA:
1056 if (read_write == I2C_SMBUS_READ) {
1057 dev_err(&adapter->dev, "Block read not supported "
1058 "under I2C emulation!\n");
1061 msg[0].len = data->block[0] + 2;
1062 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1063 dev_err(&adapter->dev, "smbus_access called with "
1064 "invalid block write size (%d)\n",
1068 for (i = 1; i < msg[0].len; i++)
1069 msgbuf0[i] = data->block[i-1];
1072 case I2C_SMBUS_BLOCK_PROC_CALL:
1073 dev_dbg(&adapter->dev, "Block process call not supported "
1074 "under I2C emulation!\n");
1076 case I2C_SMBUS_I2C_BLOCK_DATA:
1077 if (read_write == I2C_SMBUS_READ) {
1078 msg[1].len = I2C_SMBUS_BLOCK_MAX;
1080 msg[0].len = data->block[0] + 1;
1081 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1082 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1083 "invalid block write size (%d)\n",
1087 for (i = 1; i <= data->block[0]; i++)
1088 msgbuf0[i] = data->block[i];
1092 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1097 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1098 && size != I2C_SMBUS_I2C_BLOCK_DATA);
1100 /* Compute PEC if first message is a write */
1101 if (!(msg[0].flags & I2C_M_RD)) {
1102 if (num == 1) /* Write only */
1103 i2c_smbus_add_pec(&msg[0]);
1104 else /* Write followed by read */
1105 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1107 /* Ask for PEC if last message is a read */
1108 if (msg[num-1].flags & I2C_M_RD)
1112 if (i2c_transfer(adapter, msg, num) < 0)
1115 /* Check PEC if last message is a read */
1116 if (i && (msg[num-1].flags & I2C_M_RD)) {
1117 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1121 if (read_write == I2C_SMBUS_READ)
1123 case I2C_SMBUS_BYTE:
1124 data->byte = msgbuf0[0];
1126 case I2C_SMBUS_BYTE_DATA:
1127 data->byte = msgbuf1[0];
1129 case I2C_SMBUS_WORD_DATA:
1130 case I2C_SMBUS_PROC_CALL:
1131 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1133 case I2C_SMBUS_I2C_BLOCK_DATA:
1134 /* fixed at 32 for now */
1135 data->block[0] = I2C_SMBUS_BLOCK_MAX;
1136 for (i = 0; i < I2C_SMBUS_BLOCK_MAX; i++)
1137 data->block[i+1] = msgbuf1[i];
1144 s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1145 char read_write, u8 command, int size,
1146 union i2c_smbus_data * data)
1150 flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1152 if (adapter->algo->smbus_xfer) {
1153 mutex_lock(&adapter->bus_lock);
1154 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1156 mutex_unlock(&adapter->bus_lock);
1158 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1165 /* Next three are needed by i2c-isa */
1166 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release);
1167 EXPORT_SYMBOL_GPL(i2c_adapter_class);
1168 EXPORT_SYMBOL_GPL(i2c_bus_type);
1170 EXPORT_SYMBOL(i2c_add_adapter);
1171 EXPORT_SYMBOL(i2c_del_adapter);
1172 EXPORT_SYMBOL(i2c_del_driver);
1173 EXPORT_SYMBOL(i2c_attach_client);
1174 EXPORT_SYMBOL(i2c_detach_client);
1175 EXPORT_SYMBOL(i2c_use_client);
1176 EXPORT_SYMBOL(i2c_release_client);
1177 EXPORT_SYMBOL(i2c_clients_command);
1178 EXPORT_SYMBOL(i2c_check_addr);
1180 EXPORT_SYMBOL(i2c_master_send);
1181 EXPORT_SYMBOL(i2c_master_recv);
1182 EXPORT_SYMBOL(i2c_control);
1183 EXPORT_SYMBOL(i2c_transfer);
1184 EXPORT_SYMBOL(i2c_get_adapter);
1185 EXPORT_SYMBOL(i2c_put_adapter);
1186 EXPORT_SYMBOL(i2c_probe);
1188 EXPORT_SYMBOL(i2c_smbus_xfer);
1189 EXPORT_SYMBOL(i2c_smbus_write_quick);
1190 EXPORT_SYMBOL(i2c_smbus_read_byte);
1191 EXPORT_SYMBOL(i2c_smbus_write_byte);
1192 EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1193 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1194 EXPORT_SYMBOL(i2c_smbus_read_word_data);
1195 EXPORT_SYMBOL(i2c_smbus_write_word_data);
1196 EXPORT_SYMBOL(i2c_smbus_write_block_data);
1197 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1198 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
1200 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1201 MODULE_DESCRIPTION("I2C-Bus main module");
1202 MODULE_LICENSE("GPL");