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
)
49 static int i2c_bus_suspend(struct device
* dev
, pm_message_t state
)
53 if (dev
->driver
&& dev
->driver
->suspend
)
54 rc
= dev
->driver
->suspend(dev
, state
);
58 static int i2c_bus_resume(struct device
* dev
)
62 if (dev
->driver
&& dev
->driver
->resume
)
63 rc
= dev
->driver
->resume(dev
);
67 static int i2c_device_probe(struct device
*dev
)
72 static int i2c_device_remove(struct device
*dev
)
77 struct bus_type i2c_bus_type
= {
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
= {
94 .name
= "i2c_adapter",
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 * ---------------------------------------------------
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
)
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) {
164 res
= idr_get_new(&i2c_adapter_idr
, adap
, &id
);
171 adap
->nr
= id
& MAX_ID_MASK
;
172 mutex_init(&adap
->bus_lock
);
173 mutex_init(&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
);
207 mutex_unlock(&core_lists
);
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
;
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
)
227 if (adap_from_list
!= adap
) {
228 pr_debug("i2c-core: attempting to delete unregistered "
229 "adapter [%s]\n", adap
->name
);
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 "
240 driver
->driver
.name
);
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
,
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
);
276 mutex_unlock(&core_lists
);
282 * What follows is the "upwards" interface: commands for talking to clients,
283 * which implement the functions to access the physical information of the
287 int i2c_register_driver(struct module
*owner
, struct i2c_driver
*driver
)
289 struct list_head
*item
;
290 struct i2c_adapter
*adapter
;
293 /* add the driver to the list of i2c drivers in the driver core */
294 driver
->driver
.owner
= owner
;
295 driver
->driver
.bus
= &i2c_bus_type
;
297 res
= driver_register(&driver
->driver
);
301 mutex_lock(&core_lists
);
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 mutex_unlock(&core_lists
);
317 EXPORT_SYMBOL(i2c_register_driver
);
319 int i2c_del_driver(struct i2c_driver
*driver
)
321 struct list_head
*item1
, *item2
, *_n
;
322 struct i2c_client
*client
;
323 struct i2c_adapter
*adap
;
327 mutex_lock(&core_lists
);
329 /* Have a look at each adapter, if clients of this driver are still
330 * attached. If so, detach them to be able to kill the driver
333 list_for_each(item1
,&adapters
) {
334 adap
= list_entry(item1
, struct i2c_adapter
, list
);
335 if (driver
->detach_adapter
) {
336 if ((res
= driver
->detach_adapter(adap
))) {
337 dev_err(&adap
->dev
, "detach_adapter failed "
339 driver
->driver
.name
);
343 list_for_each_safe(item2
, _n
, &adap
->clients
) {
344 client
= list_entry(item2
, struct i2c_client
, list
);
345 if (client
->driver
!= driver
)
347 dev_dbg(&adap
->dev
, "detaching client [%s] "
348 "at 0x%02x\n", client
->name
,
350 if ((res
= driver
->detach_client(client
))) {
351 dev_err(&adap
->dev
, "detach_client "
352 "failed for client [%s] at "
353 "0x%02x\n", client
->name
,
361 driver_unregister(&driver
->driver
);
362 list_del(&driver
->list
);
363 pr_debug("i2c-core: driver [%s] unregistered\n", driver
->driver
.name
);
366 mutex_unlock(&core_lists
);
370 static int __i2c_check_addr(struct i2c_adapter
*adapter
, unsigned int addr
)
372 struct list_head
*item
;
373 struct i2c_client
*client
;
375 list_for_each(item
,&adapter
->clients
) {
376 client
= list_entry(item
, struct i2c_client
, list
);
377 if (client
->addr
== addr
)
383 int i2c_check_addr(struct i2c_adapter
*adapter
, int addr
)
387 mutex_lock(&adapter
->clist_lock
);
388 rval
= __i2c_check_addr(adapter
, addr
);
389 mutex_unlock(&adapter
->clist_lock
);
394 int i2c_attach_client(struct i2c_client
*client
)
396 struct i2c_adapter
*adapter
= client
->adapter
;
398 mutex_lock(&adapter
->clist_lock
);
399 if (__i2c_check_addr(client
->adapter
, client
->addr
)) {
400 mutex_unlock(&adapter
->clist_lock
);
403 list_add_tail(&client
->list
,&adapter
->clients
);
404 mutex_unlock(&adapter
->clist_lock
);
406 if (adapter
->client_register
) {
407 if (adapter
->client_register(client
)) {
408 dev_dbg(&adapter
->dev
, "client_register "
409 "failed for client [%s] at 0x%02x\n",
410 client
->name
, client
->addr
);
414 client
->usage_count
= 0;
416 client
->dev
.parent
= &client
->adapter
->dev
;
417 client
->dev
.driver
= &client
->driver
->driver
;
418 client
->dev
.bus
= &i2c_bus_type
;
419 client
->dev
.release
= &i2c_client_release
;
421 snprintf(&client
->dev
.bus_id
[0], sizeof(client
->dev
.bus_id
),
422 "%d-%04x", i2c_adapter_id(adapter
), client
->addr
);
423 dev_dbg(&adapter
->dev
, "client [%s] registered with bus id %s\n",
424 client
->name
, client
->dev
.bus_id
);
425 device_register(&client
->dev
);
426 device_create_file(&client
->dev
, &dev_attr_client_name
);
432 int i2c_detach_client(struct i2c_client
*client
)
434 struct i2c_adapter
*adapter
= client
->adapter
;
437 if (client
->usage_count
> 0) {
438 dev_warn(&client
->dev
, "Client [%s] still busy, "
439 "can't detach\n", client
->name
);
443 if (adapter
->client_unregister
) {
444 res
= adapter
->client_unregister(client
);
446 dev_err(&client
->dev
,
447 "client_unregister [%s] failed, "
448 "client not detached\n", client
->name
);
453 mutex_lock(&adapter
->clist_lock
);
454 list_del(&client
->list
);
455 init_completion(&client
->released
);
456 device_remove_file(&client
->dev
, &dev_attr_client_name
);
457 device_unregister(&client
->dev
);
458 mutex_unlock(&adapter
->clist_lock
);
459 wait_for_completion(&client
->released
);
465 static int i2c_inc_use_client(struct i2c_client
*client
)
468 if (!try_module_get(client
->driver
->driver
.owner
))
470 if (!try_module_get(client
->adapter
->owner
)) {
471 module_put(client
->driver
->driver
.owner
);
478 static void i2c_dec_use_client(struct i2c_client
*client
)
480 module_put(client
->driver
->driver
.owner
);
481 module_put(client
->adapter
->owner
);
484 int i2c_use_client(struct i2c_client
*client
)
488 ret
= i2c_inc_use_client(client
);
492 client
->usage_count
++;
497 int i2c_release_client(struct i2c_client
*client
)
499 if (!client
->usage_count
) {
500 pr_debug("i2c-core: %s used one too many times\n",
505 client
->usage_count
--;
506 i2c_dec_use_client(client
);
511 void i2c_clients_command(struct i2c_adapter
*adap
, unsigned int cmd
, void *arg
)
513 struct list_head
*item
;
514 struct i2c_client
*client
;
516 mutex_lock(&adap
->clist_lock
);
517 list_for_each(item
,&adap
->clients
) {
518 client
= list_entry(item
, struct i2c_client
, list
);
519 if (!try_module_get(client
->driver
->driver
.owner
))
521 if (NULL
!= client
->driver
->command
) {
522 mutex_unlock(&adap
->clist_lock
);
523 client
->driver
->command(client
,cmd
,arg
);
524 mutex_lock(&adap
->clist_lock
);
526 module_put(client
->driver
->driver
.owner
);
528 mutex_unlock(&adap
->clist_lock
);
531 static int __init
i2c_init(void)
535 retval
= bus_register(&i2c_bus_type
);
538 retval
= driver_register(&i2c_adapter_driver
);
541 return class_register(&i2c_adapter_class
);
544 static void __exit
i2c_exit(void)
546 class_unregister(&i2c_adapter_class
);
547 driver_unregister(&i2c_adapter_driver
);
548 bus_unregister(&i2c_bus_type
);
551 subsys_initcall(i2c_init
);
552 module_exit(i2c_exit
);
554 /* ----------------------------------------------------
555 * the functional interface to the i2c busses.
556 * ----------------------------------------------------
559 int i2c_transfer(struct i2c_adapter
* adap
, struct i2c_msg
*msgs
, int num
)
563 if (adap
->algo
->master_xfer
) {
565 for (ret
= 0; ret
< num
; ret
++) {
566 dev_dbg(&adap
->dev
, "master_xfer[%d] %c, addr=0x%02x, "
567 "len=%d\n", ret
, msgs
[ret
].flags
& I2C_M_RD
?
568 'R' : 'W', msgs
[ret
].addr
, msgs
[ret
].len
);
572 mutex_lock(&adap
->bus_lock
);
573 ret
= adap
->algo
->master_xfer(adap
,msgs
,num
);
574 mutex_unlock(&adap
->bus_lock
);
578 dev_dbg(&adap
->dev
, "I2C level transfers not supported\n");
583 int i2c_master_send(struct i2c_client
*client
,const char *buf
,int count
)
586 struct i2c_adapter
*adap
=client
->adapter
;
589 msg
.addr
= client
->addr
;
590 msg
.flags
= client
->flags
& I2C_M_TEN
;
592 msg
.buf
= (char *)buf
;
594 ret
= i2c_transfer(adap
, &msg
, 1);
596 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
597 transmitted, else error code. */
598 return (ret
== 1) ? count
: ret
;
601 int i2c_master_recv(struct i2c_client
*client
, char *buf
,int count
)
603 struct i2c_adapter
*adap
=client
->adapter
;
607 msg
.addr
= client
->addr
;
608 msg
.flags
= client
->flags
& I2C_M_TEN
;
609 msg
.flags
|= I2C_M_RD
;
613 ret
= i2c_transfer(adap
, &msg
, 1);
615 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
616 transmitted, else error code. */
617 return (ret
== 1) ? count
: ret
;
621 int i2c_control(struct i2c_client
*client
,
622 unsigned int cmd
, unsigned long arg
)
625 struct i2c_adapter
*adap
= client
->adapter
;
627 dev_dbg(&client
->adapter
->dev
, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd
, arg
);
636 if (adap
->algo
->algo_control
!=NULL
)
637 ret
= adap
->algo
->algo_control(adap
,cmd
,arg
);
642 /* ----------------------------------------------------
643 * the i2c address scanning function
644 * Will not work for 10-bit addresses!
645 * ----------------------------------------------------
647 static int i2c_probe_address(struct i2c_adapter
*adapter
, int addr
, int kind
,
648 int (*found_proc
) (struct i2c_adapter
*, int, int))
652 /* Make sure the address is valid */
653 if (addr
< 0x03 || addr
> 0x77) {
654 dev_warn(&adapter
->dev
, "Invalid probe address 0x%02x\n",
659 /* Skip if already in use */
660 if (i2c_check_addr(adapter
, addr
))
663 /* Make sure there is something at this address, unless forced */
665 if (i2c_smbus_xfer(adapter
, addr
, 0, 0, 0,
666 I2C_SMBUS_QUICK
, NULL
) < 0)
669 /* prevent 24RF08 corruption */
670 if ((addr
& ~0x0f) == 0x50)
671 i2c_smbus_xfer(adapter
, addr
, 0, 0, 0,
672 I2C_SMBUS_QUICK
, NULL
);
675 /* Finally call the custom detection function */
676 err
= found_proc(adapter
, addr
, kind
);
678 /* -ENODEV can be returned if there is a chip at the given address
679 but it isn't supported by this chip driver. We catch it here as
680 this isn't an error. */
681 return (err
== -ENODEV
) ? 0 : err
;
684 int i2c_probe(struct i2c_adapter
*adapter
,
685 struct i2c_client_address_data
*address_data
,
686 int (*found_proc
) (struct i2c_adapter
*, int, int))
689 int adap_id
= i2c_adapter_id(adapter
);
691 /* Force entries are done first, and are not affected by ignore
693 if (address_data
->forces
) {
694 unsigned short **forces
= address_data
->forces
;
697 for (kind
= 0; forces
[kind
]; kind
++) {
698 for (i
= 0; forces
[kind
][i
] != I2C_CLIENT_END
;
700 if (forces
[kind
][i
] == adap_id
701 || forces
[kind
][i
] == ANY_I2C_BUS
) {
702 dev_dbg(&adapter
->dev
, "found force "
703 "parameter for adapter %d, "
704 "addr 0x%02x, kind %d\n",
705 adap_id
, forces
[kind
][i
+ 1],
707 err
= i2c_probe_address(adapter
,
717 /* Stop here if we can't use SMBUS_QUICK */
718 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_QUICK
)) {
719 if (address_data
->probe
[0] == I2C_CLIENT_END
720 && address_data
->normal_i2c
[0] == I2C_CLIENT_END
)
723 dev_warn(&adapter
->dev
, "SMBus Quick command not supported, "
724 "can't probe for chips\n");
728 /* Probe entries are done second, and are not affected by ignore
730 for (i
= 0; address_data
->probe
[i
] != I2C_CLIENT_END
; i
+= 2) {
731 if (address_data
->probe
[i
] == adap_id
732 || address_data
->probe
[i
] == ANY_I2C_BUS
) {
733 dev_dbg(&adapter
->dev
, "found probe parameter for "
734 "adapter %d, addr 0x%02x\n", adap_id
,
735 address_data
->probe
[i
+ 1]);
736 err
= i2c_probe_address(adapter
,
737 address_data
->probe
[i
+ 1],
744 /* Normal entries are done last, unless shadowed by an ignore entry */
745 for (i
= 0; address_data
->normal_i2c
[i
] != I2C_CLIENT_END
; i
+= 1) {
749 for (j
= 0; address_data
->ignore
[j
] != I2C_CLIENT_END
;
751 if ((address_data
->ignore
[j
] == adap_id
||
752 address_data
->ignore
[j
] == ANY_I2C_BUS
)
753 && address_data
->ignore
[j
+ 1]
754 == address_data
->normal_i2c
[i
]) {
755 dev_dbg(&adapter
->dev
, "found ignore "
756 "parameter for adapter %d, "
757 "addr 0x%02x\n", adap_id
,
758 address_data
->ignore
[j
+ 1]);
766 dev_dbg(&adapter
->dev
, "found normal entry for adapter %d, "
767 "addr 0x%02x\n", adap_id
,
768 address_data
->normal_i2c
[i
]);
769 err
= i2c_probe_address(adapter
, address_data
->normal_i2c
[i
],
778 struct i2c_adapter
* i2c_get_adapter(int id
)
780 struct i2c_adapter
*adapter
;
782 mutex_lock(&core_lists
);
783 adapter
= (struct i2c_adapter
*)idr_find(&i2c_adapter_idr
, id
);
784 if (adapter
&& !try_module_get(adapter
->owner
))
787 mutex_unlock(&core_lists
);
791 void i2c_put_adapter(struct i2c_adapter
*adap
)
793 module_put(adap
->owner
);
796 /* The SMBus parts */
798 #define POLY (0x1070U << 3)
804 for(i
= 0; i
< 8; i
++) {
809 return (u8
)(data
>> 8);
812 /* Incremental CRC8 over count bytes in the array pointed to by p */
813 static u8
i2c_smbus_pec(u8 crc
, u8
*p
, size_t count
)
817 for(i
= 0; i
< count
; i
++)
818 crc
= crc8((crc
^ p
[i
]) << 8);
822 /* Assume a 7-bit address, which is reasonable for SMBus */
823 static u8
i2c_smbus_msg_pec(u8 pec
, struct i2c_msg
*msg
)
825 /* The address will be sent first */
826 u8 addr
= (msg
->addr
<< 1) | !!(msg
->flags
& I2C_M_RD
);
827 pec
= i2c_smbus_pec(pec
, &addr
, 1);
829 /* The data buffer follows */
830 return i2c_smbus_pec(pec
, msg
->buf
, msg
->len
);
833 /* Used for write only transactions */
834 static inline void i2c_smbus_add_pec(struct i2c_msg
*msg
)
836 msg
->buf
[msg
->len
] = i2c_smbus_msg_pec(0, msg
);
840 /* Return <0 on CRC error
841 If there was a write before this read (most cases) we need to take the
842 partial CRC from the write part into account.
843 Note that this function does modify the message (we need to decrease the
844 message length to hide the CRC byte from the caller). */
845 static int i2c_smbus_check_pec(u8 cpec
, struct i2c_msg
*msg
)
847 u8 rpec
= msg
->buf
[--msg
->len
];
848 cpec
= i2c_smbus_msg_pec(cpec
, msg
);
851 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
858 s32
i2c_smbus_write_quick(struct i2c_client
*client
, u8 value
)
860 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
861 value
,0,I2C_SMBUS_QUICK
,NULL
);
864 s32
i2c_smbus_read_byte(struct i2c_client
*client
)
866 union i2c_smbus_data data
;
867 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
868 I2C_SMBUS_READ
,0,I2C_SMBUS_BYTE
, &data
))
871 return 0x0FF & data
.byte
;
874 s32
i2c_smbus_write_byte(struct i2c_client
*client
, u8 value
)
876 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
877 I2C_SMBUS_WRITE
, value
, I2C_SMBUS_BYTE
, NULL
);
880 s32
i2c_smbus_read_byte_data(struct i2c_client
*client
, u8 command
)
882 union i2c_smbus_data data
;
883 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
884 I2C_SMBUS_READ
,command
, I2C_SMBUS_BYTE_DATA
,&data
))
887 return 0x0FF & data
.byte
;
890 s32
i2c_smbus_write_byte_data(struct i2c_client
*client
, u8 command
, u8 value
)
892 union i2c_smbus_data data
;
894 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
895 I2C_SMBUS_WRITE
,command
,
896 I2C_SMBUS_BYTE_DATA
,&data
);
899 s32
i2c_smbus_read_word_data(struct i2c_client
*client
, u8 command
)
901 union i2c_smbus_data data
;
902 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
903 I2C_SMBUS_READ
,command
, I2C_SMBUS_WORD_DATA
, &data
))
906 return 0x0FFFF & data
.word
;
909 s32
i2c_smbus_write_word_data(struct i2c_client
*client
, u8 command
, u16 value
)
911 union i2c_smbus_data data
;
913 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
914 I2C_SMBUS_WRITE
,command
,
915 I2C_SMBUS_WORD_DATA
,&data
);
918 s32
i2c_smbus_write_block_data(struct i2c_client
*client
, u8 command
,
919 u8 length
, u8
*values
)
921 union i2c_smbus_data data
;
923 if (length
> I2C_SMBUS_BLOCK_MAX
)
924 length
= I2C_SMBUS_BLOCK_MAX
;
925 data
.block
[0] = length
;
926 memcpy(&data
.block
[1], values
, length
);
927 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
928 I2C_SMBUS_WRITE
,command
,
929 I2C_SMBUS_BLOCK_DATA
,&data
);
932 /* Returns the number of read bytes */
933 s32
i2c_smbus_read_i2c_block_data(struct i2c_client
*client
, u8 command
, u8
*values
)
935 union i2c_smbus_data data
;
937 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
938 I2C_SMBUS_READ
,command
,
939 I2C_SMBUS_I2C_BLOCK_DATA
,&data
))
942 memcpy(values
, &data
.block
[1], data
.block
[0]);
943 return data
.block
[0];
946 s32
i2c_smbus_write_i2c_block_data(struct i2c_client
*client
, u8 command
,
947 u8 length
, u8
*values
)
949 union i2c_smbus_data data
;
951 if (length
> I2C_SMBUS_BLOCK_MAX
)
952 length
= I2C_SMBUS_BLOCK_MAX
;
953 data
.block
[0] = length
;
954 memcpy(data
.block
+ 1, values
, length
);
955 return i2c_smbus_xfer(client
->adapter
, client
->addr
, client
->flags
,
956 I2C_SMBUS_WRITE
, command
,
957 I2C_SMBUS_I2C_BLOCK_DATA
, &data
);
960 /* Simulate a SMBus command using the i2c protocol
961 No checking of parameters is done! */
962 static s32
i2c_smbus_xfer_emulated(struct i2c_adapter
* adapter
, u16 addr
,
963 unsigned short flags
,
964 char read_write
, u8 command
, int size
,
965 union i2c_smbus_data
* data
)
967 /* So we need to generate a series of msgs. In the case of writing, we
968 need to use only one message; when reading, we need two. We initialize
969 most things with sane defaults, to keep the code below somewhat
971 unsigned char msgbuf0
[I2C_SMBUS_BLOCK_MAX
+3];
972 unsigned char msgbuf1
[I2C_SMBUS_BLOCK_MAX
+2];
973 int num
= read_write
== I2C_SMBUS_READ
?2:1;
974 struct i2c_msg msg
[2] = { { addr
, flags
, 1, msgbuf0
},
975 { addr
, flags
| I2C_M_RD
, 0, msgbuf1
}
980 msgbuf0
[0] = command
;
982 case I2C_SMBUS_QUICK
:
984 /* Special case: The read/write field is used as data */
985 msg
[0].flags
= flags
| (read_write
==I2C_SMBUS_READ
)?I2C_M_RD
:0;
989 if (read_write
== I2C_SMBUS_READ
) {
990 /* Special case: only a read! */
991 msg
[0].flags
= I2C_M_RD
| flags
;
995 case I2C_SMBUS_BYTE_DATA
:
996 if (read_write
== I2C_SMBUS_READ
)
1000 msgbuf0
[1] = data
->byte
;
1003 case I2C_SMBUS_WORD_DATA
:
1004 if (read_write
== I2C_SMBUS_READ
)
1008 msgbuf0
[1] = data
->word
& 0xff;
1009 msgbuf0
[2] = (data
->word
>> 8) & 0xff;
1012 case I2C_SMBUS_PROC_CALL
:
1013 num
= 2; /* Special case */
1014 read_write
= I2C_SMBUS_READ
;
1017 msgbuf0
[1] = data
->word
& 0xff;
1018 msgbuf0
[2] = (data
->word
>> 8) & 0xff;
1020 case I2C_SMBUS_BLOCK_DATA
:
1021 if (read_write
== I2C_SMBUS_READ
) {
1022 dev_err(&adapter
->dev
, "Block read not supported "
1023 "under I2C emulation!\n");
1026 msg
[0].len
= data
->block
[0] + 2;
1027 if (msg
[0].len
> I2C_SMBUS_BLOCK_MAX
+ 2) {
1028 dev_err(&adapter
->dev
, "smbus_access called with "
1029 "invalid block write size (%d)\n",
1033 for (i
= 1; i
< msg
[0].len
; i
++)
1034 msgbuf0
[i
] = data
->block
[i
-1];
1037 case I2C_SMBUS_BLOCK_PROC_CALL
:
1038 dev_dbg(&adapter
->dev
, "Block process call not supported "
1039 "under I2C emulation!\n");
1041 case I2C_SMBUS_I2C_BLOCK_DATA
:
1042 if (read_write
== I2C_SMBUS_READ
) {
1043 msg
[1].len
= I2C_SMBUS_BLOCK_MAX
;
1045 msg
[0].len
= data
->block
[0] + 1;
1046 if (msg
[0].len
> I2C_SMBUS_BLOCK_MAX
+ 1) {
1047 dev_err(&adapter
->dev
, "i2c_smbus_xfer_emulated called with "
1048 "invalid block write size (%d)\n",
1052 for (i
= 1; i
<= data
->block
[0]; i
++)
1053 msgbuf0
[i
] = data
->block
[i
];
1057 dev_err(&adapter
->dev
, "smbus_access called with invalid size (%d)\n",
1062 i
= ((flags
& I2C_CLIENT_PEC
) && size
!= I2C_SMBUS_QUICK
1063 && size
!= I2C_SMBUS_I2C_BLOCK_DATA
);
1065 /* Compute PEC if first message is a write */
1066 if (!(msg
[0].flags
& I2C_M_RD
)) {
1067 if (num
== 1) /* Write only */
1068 i2c_smbus_add_pec(&msg
[0]);
1069 else /* Write followed by read */
1070 partial_pec
= i2c_smbus_msg_pec(0, &msg
[0]);
1072 /* Ask for PEC if last message is a read */
1073 if (msg
[num
-1].flags
& I2C_M_RD
)
1077 if (i2c_transfer(adapter
, msg
, num
) < 0)
1080 /* Check PEC if last message is a read */
1081 if (i
&& (msg
[num
-1].flags
& I2C_M_RD
)) {
1082 if (i2c_smbus_check_pec(partial_pec
, &msg
[num
-1]) < 0)
1086 if (read_write
== I2C_SMBUS_READ
)
1088 case I2C_SMBUS_BYTE
:
1089 data
->byte
= msgbuf0
[0];
1091 case I2C_SMBUS_BYTE_DATA
:
1092 data
->byte
= msgbuf1
[0];
1094 case I2C_SMBUS_WORD_DATA
:
1095 case I2C_SMBUS_PROC_CALL
:
1096 data
->word
= msgbuf1
[0] | (msgbuf1
[1] << 8);
1098 case I2C_SMBUS_I2C_BLOCK_DATA
:
1099 /* fixed at 32 for now */
1100 data
->block
[0] = I2C_SMBUS_BLOCK_MAX
;
1101 for (i
= 0; i
< I2C_SMBUS_BLOCK_MAX
; i
++)
1102 data
->block
[i
+1] = msgbuf1
[i
];
1109 s32
i2c_smbus_xfer(struct i2c_adapter
* adapter
, u16 addr
, unsigned short flags
,
1110 char read_write
, u8 command
, int size
,
1111 union i2c_smbus_data
* data
)
1115 flags
&= I2C_M_TEN
| I2C_CLIENT_PEC
;
1117 if (adapter
->algo
->smbus_xfer
) {
1118 mutex_lock(&adapter
->bus_lock
);
1119 res
= adapter
->algo
->smbus_xfer(adapter
,addr
,flags
,read_write
,
1121 mutex_unlock(&adapter
->bus_lock
);
1123 res
= i2c_smbus_xfer_emulated(adapter
,addr
,flags
,read_write
,
1130 /* Next four are needed by i2c-isa */
1131 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release
);
1132 EXPORT_SYMBOL_GPL(i2c_adapter_driver
);
1133 EXPORT_SYMBOL_GPL(i2c_adapter_class
);
1134 EXPORT_SYMBOL_GPL(i2c_bus_type
);
1136 EXPORT_SYMBOL(i2c_add_adapter
);
1137 EXPORT_SYMBOL(i2c_del_adapter
);
1138 EXPORT_SYMBOL(i2c_del_driver
);
1139 EXPORT_SYMBOL(i2c_attach_client
);
1140 EXPORT_SYMBOL(i2c_detach_client
);
1141 EXPORT_SYMBOL(i2c_use_client
);
1142 EXPORT_SYMBOL(i2c_release_client
);
1143 EXPORT_SYMBOL(i2c_clients_command
);
1144 EXPORT_SYMBOL(i2c_check_addr
);
1146 EXPORT_SYMBOL(i2c_master_send
);
1147 EXPORT_SYMBOL(i2c_master_recv
);
1148 EXPORT_SYMBOL(i2c_control
);
1149 EXPORT_SYMBOL(i2c_transfer
);
1150 EXPORT_SYMBOL(i2c_get_adapter
);
1151 EXPORT_SYMBOL(i2c_put_adapter
);
1152 EXPORT_SYMBOL(i2c_probe
);
1154 EXPORT_SYMBOL(i2c_smbus_xfer
);
1155 EXPORT_SYMBOL(i2c_smbus_write_quick
);
1156 EXPORT_SYMBOL(i2c_smbus_read_byte
);
1157 EXPORT_SYMBOL(i2c_smbus_write_byte
);
1158 EXPORT_SYMBOL(i2c_smbus_read_byte_data
);
1159 EXPORT_SYMBOL(i2c_smbus_write_byte_data
);
1160 EXPORT_SYMBOL(i2c_smbus_read_word_data
);
1161 EXPORT_SYMBOL(i2c_smbus_write_word_data
);
1162 EXPORT_SYMBOL(i2c_smbus_write_block_data
);
1163 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data
);
1164 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data
);
1166 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1167 MODULE_DESCRIPTION("I2C-Bus main module");
1168 MODULE_LICENSE("GPL");