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 struct device_driver i2c_adapter_driver
= {
117 .owner
= THIS_MODULE
,
118 .name
= "i2c_adapter",
119 .bus
= &i2c_bus_type
,
122 /* ------------------------------------------------------------------------- */
124 /* I2C bus adapters -- one roots each I2C or SMBUS segment */
126 static void i2c_adapter_class_dev_release(struct class_device
*dev
)
128 struct i2c_adapter
*adap
= class_dev_to_i2c_adapter(dev
);
129 complete(&adap
->class_dev_released
);
132 static ssize_t
i2c_adapter_show_name(struct class_device
*cdev
, char *buf
)
134 struct i2c_adapter
*adap
= class_dev_to_i2c_adapter(cdev
);
135 return sprintf(buf
, "%s\n", adap
->name
);
138 static struct class_device_attribute i2c_adapter_attrs
[] = {
139 __ATTR(name
, S_IRUGO
, i2c_adapter_show_name
, NULL
),
143 struct class i2c_adapter_class
= {
144 .owner
= THIS_MODULE
,
145 .name
= "i2c-adapter",
146 .class_dev_attrs
= i2c_adapter_attrs
,
147 .release
= &i2c_adapter_class_dev_release
,
150 static ssize_t
show_adapter_name(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
152 struct i2c_adapter
*adap
= dev_to_i2c_adapter(dev
);
153 return sprintf(buf
, "%s\n", adap
->name
);
155 static DEVICE_ATTR(name
, S_IRUGO
, show_adapter_name
, NULL
);
158 static void i2c_client_release(struct device
*dev
)
160 struct i2c_client
*client
= to_i2c_client(dev
);
161 complete(&client
->released
);
164 static ssize_t
show_client_name(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
166 struct i2c_client
*client
= to_i2c_client(dev
);
167 return sprintf(buf
, "%s\n", client
->name
);
171 * We can't use the DEVICE_ATTR() macro here, as we used the same name for
172 * an i2c adapter attribute (above).
174 static struct device_attribute dev_attr_client_name
=
175 __ATTR(name
, S_IRUGO
, &show_client_name
, NULL
);
178 /* ---------------------------------------------------
179 * registering functions
180 * ---------------------------------------------------
184 * i2c_add_adapter is called from within the algorithm layer,
185 * when a new hw adapter registers. A new device is register to be
186 * available for clients.
188 int i2c_add_adapter(struct i2c_adapter
*adap
)
191 struct list_head
*item
;
192 struct i2c_driver
*driver
;
194 mutex_lock(&core_lists
);
196 if (idr_pre_get(&i2c_adapter_idr
, GFP_KERNEL
) == 0) {
201 res
= idr_get_new(&i2c_adapter_idr
, adap
, &id
);
208 adap
->nr
= id
& MAX_ID_MASK
;
209 mutex_init(&adap
->bus_lock
);
210 mutex_init(&adap
->clist_lock
);
211 list_add_tail(&adap
->list
,&adapters
);
212 INIT_LIST_HEAD(&adap
->clients
);
214 /* Add the adapter to the driver core.
215 * If the parent pointer is not set up,
216 * we add this adapter to the host bus.
218 if (adap
->dev
.parent
== NULL
) {
219 adap
->dev
.parent
= &platform_bus
;
220 pr_debug("I2C adapter driver [%s] forgot to specify "
221 "physical device\n", adap
->name
);
223 sprintf(adap
->dev
.bus_id
, "i2c-%d", adap
->nr
);
224 adap
->dev
.driver
= &i2c_adapter_driver
;
225 adap
->dev
.release
= &i2c_adapter_dev_release
;
226 res
= device_register(&adap
->dev
);
229 res
= device_create_file(&adap
->dev
, &dev_attr_name
);
233 /* Add this adapter to the i2c_adapter class */
234 memset(&adap
->class_dev
, 0x00, sizeof(struct class_device
));
235 adap
->class_dev
.dev
= &adap
->dev
;
236 adap
->class_dev
.class = &i2c_adapter_class
;
237 strlcpy(adap
->class_dev
.class_id
, adap
->dev
.bus_id
, BUS_ID_SIZE
);
238 res
= class_device_register(&adap
->class_dev
);
240 goto out_remove_name
;
242 dev_dbg(&adap
->dev
, "adapter [%s] registered\n", adap
->name
);
244 /* inform drivers of new adapters */
245 list_for_each(item
,&drivers
) {
246 driver
= list_entry(item
, struct i2c_driver
, list
);
247 if (driver
->attach_adapter
)
248 /* We ignore the return code; if it fails, too bad */
249 driver
->attach_adapter(adap
);
253 mutex_unlock(&core_lists
);
257 device_remove_file(&adap
->dev
, &dev_attr_name
);
259 init_completion(&adap
->dev_released
); /* Needed? */
260 device_unregister(&adap
->dev
);
261 wait_for_completion(&adap
->dev_released
);
263 list_del(&adap
->list
);
264 idr_remove(&i2c_adapter_idr
, adap
->nr
);
269 int i2c_del_adapter(struct i2c_adapter
*adap
)
271 struct list_head
*item
, *_n
;
272 struct i2c_adapter
*adap_from_list
;
273 struct i2c_driver
*driver
;
274 struct i2c_client
*client
;
277 mutex_lock(&core_lists
);
279 /* First make sure that this adapter was ever added */
280 list_for_each_entry(adap_from_list
, &adapters
, list
) {
281 if (adap_from_list
== adap
)
284 if (adap_from_list
!= adap
) {
285 pr_debug("i2c-core: attempting to delete unregistered "
286 "adapter [%s]\n", adap
->name
);
291 list_for_each(item
,&drivers
) {
292 driver
= list_entry(item
, struct i2c_driver
, list
);
293 if (driver
->detach_adapter
)
294 if ((res
= driver
->detach_adapter(adap
))) {
295 dev_err(&adap
->dev
, "detach_adapter failed "
297 driver
->driver
.name
);
302 /* detach any active clients. This must be done first, because
303 * it can fail; in which case we give up. */
304 list_for_each_safe(item
, _n
, &adap
->clients
) {
305 client
= list_entry(item
, struct i2c_client
, list
);
307 if ((res
=client
->driver
->detach_client(client
))) {
308 dev_err(&adap
->dev
, "detach_client failed for client "
309 "[%s] at address 0x%02x\n", client
->name
,
315 /* clean up the sysfs representation */
316 init_completion(&adap
->dev_released
);
317 init_completion(&adap
->class_dev_released
);
318 class_device_unregister(&adap
->class_dev
);
319 device_remove_file(&adap
->dev
, &dev_attr_name
);
320 device_unregister(&adap
->dev
);
321 list_del(&adap
->list
);
323 /* wait for sysfs to drop all references */
324 wait_for_completion(&adap
->dev_released
);
325 wait_for_completion(&adap
->class_dev_released
);
327 /* free dynamically allocated bus id */
328 idr_remove(&i2c_adapter_idr
, adap
->nr
);
330 dev_dbg(&adap
->dev
, "adapter [%s] unregistered\n", adap
->name
);
333 mutex_unlock(&core_lists
);
339 * What follows is the "upwards" interface: commands for talking to clients,
340 * which implement the functions to access the physical information of the
344 int i2c_register_driver(struct module
*owner
, struct i2c_driver
*driver
)
346 struct list_head
*item
;
347 struct i2c_adapter
*adapter
;
350 /* add the driver to the list of i2c drivers in the driver core */
351 driver
->driver
.owner
= owner
;
352 driver
->driver
.bus
= &i2c_bus_type
;
354 res
= driver_register(&driver
->driver
);
358 mutex_lock(&core_lists
);
360 list_add_tail(&driver
->list
,&drivers
);
361 pr_debug("i2c-core: driver [%s] registered\n", driver
->driver
.name
);
363 /* now look for instances of driver on our adapters */
364 if (driver
->attach_adapter
) {
365 list_for_each(item
,&adapters
) {
366 adapter
= list_entry(item
, struct i2c_adapter
, list
);
367 driver
->attach_adapter(adapter
);
371 mutex_unlock(&core_lists
);
374 EXPORT_SYMBOL(i2c_register_driver
);
376 int i2c_del_driver(struct i2c_driver
*driver
)
378 struct list_head
*item1
, *item2
, *_n
;
379 struct i2c_client
*client
;
380 struct i2c_adapter
*adap
;
384 mutex_lock(&core_lists
);
386 /* Have a look at each adapter, if clients of this driver are still
387 * attached. If so, detach them to be able to kill the driver
390 list_for_each(item1
,&adapters
) {
391 adap
= list_entry(item1
, struct i2c_adapter
, list
);
392 if (driver
->detach_adapter
) {
393 if ((res
= driver
->detach_adapter(adap
))) {
394 dev_err(&adap
->dev
, "detach_adapter failed "
396 driver
->driver
.name
);
400 list_for_each_safe(item2
, _n
, &adap
->clients
) {
401 client
= list_entry(item2
, struct i2c_client
, list
);
402 if (client
->driver
!= driver
)
404 dev_dbg(&adap
->dev
, "detaching client [%s] "
405 "at 0x%02x\n", client
->name
,
407 if ((res
= driver
->detach_client(client
))) {
408 dev_err(&adap
->dev
, "detach_client "
409 "failed for client [%s] at "
410 "0x%02x\n", client
->name
,
418 driver_unregister(&driver
->driver
);
419 list_del(&driver
->list
);
420 pr_debug("i2c-core: driver [%s] unregistered\n", driver
->driver
.name
);
423 mutex_unlock(&core_lists
);
427 static int __i2c_check_addr(struct i2c_adapter
*adapter
, unsigned int addr
)
429 struct list_head
*item
;
430 struct i2c_client
*client
;
432 list_for_each(item
,&adapter
->clients
) {
433 client
= list_entry(item
, struct i2c_client
, list
);
434 if (client
->addr
== addr
)
440 int i2c_check_addr(struct i2c_adapter
*adapter
, int addr
)
444 mutex_lock(&adapter
->clist_lock
);
445 rval
= __i2c_check_addr(adapter
, addr
);
446 mutex_unlock(&adapter
->clist_lock
);
451 int i2c_attach_client(struct i2c_client
*client
)
453 struct i2c_adapter
*adapter
= client
->adapter
;
456 mutex_lock(&adapter
->clist_lock
);
457 if (__i2c_check_addr(client
->adapter
, client
->addr
)) {
461 list_add_tail(&client
->list
,&adapter
->clients
);
463 client
->usage_count
= 0;
465 client
->dev
.parent
= &client
->adapter
->dev
;
466 client
->dev
.driver
= &client
->driver
->driver
;
467 client
->dev
.bus
= &i2c_bus_type
;
468 client
->dev
.release
= &i2c_client_release
;
470 snprintf(&client
->dev
.bus_id
[0], sizeof(client
->dev
.bus_id
),
471 "%d-%04x", i2c_adapter_id(adapter
), client
->addr
);
472 dev_dbg(&adapter
->dev
, "client [%s] registered with bus id %s\n",
473 client
->name
, client
->dev
.bus_id
);
474 res
= device_register(&client
->dev
);
477 res
= device_create_file(&client
->dev
, &dev_attr_client_name
);
480 mutex_unlock(&adapter
->clist_lock
);
482 if (adapter
->client_register
) {
483 if (adapter
->client_register(client
)) {
484 dev_dbg(&adapter
->dev
, "client_register "
485 "failed for client [%s] at 0x%02x\n",
486 client
->name
, client
->addr
);
493 init_completion(&client
->released
); /* Needed? */
494 device_unregister(&client
->dev
);
495 wait_for_completion(&client
->released
);
497 list_del(&client
->list
);
498 dev_err(&adapter
->dev
, "Failed to attach i2c client %s at 0x%02x "
499 "(%d)\n", client
->name
, client
->addr
, res
);
501 mutex_unlock(&adapter
->clist_lock
);
506 int i2c_detach_client(struct i2c_client
*client
)
508 struct i2c_adapter
*adapter
= client
->adapter
;
511 if (client
->usage_count
> 0) {
512 dev_warn(&client
->dev
, "Client [%s] still busy, "
513 "can't detach\n", client
->name
);
517 if (adapter
->client_unregister
) {
518 res
= adapter
->client_unregister(client
);
520 dev_err(&client
->dev
,
521 "client_unregister [%s] failed, "
522 "client not detached\n", client
->name
);
527 mutex_lock(&adapter
->clist_lock
);
528 list_del(&client
->list
);
529 init_completion(&client
->released
);
530 device_remove_file(&client
->dev
, &dev_attr_client_name
);
531 device_unregister(&client
->dev
);
532 mutex_unlock(&adapter
->clist_lock
);
533 wait_for_completion(&client
->released
);
539 static int i2c_inc_use_client(struct i2c_client
*client
)
542 if (!try_module_get(client
->driver
->driver
.owner
))
544 if (!try_module_get(client
->adapter
->owner
)) {
545 module_put(client
->driver
->driver
.owner
);
552 static void i2c_dec_use_client(struct i2c_client
*client
)
554 module_put(client
->driver
->driver
.owner
);
555 module_put(client
->adapter
->owner
);
558 int i2c_use_client(struct i2c_client
*client
)
562 ret
= i2c_inc_use_client(client
);
566 client
->usage_count
++;
571 int i2c_release_client(struct i2c_client
*client
)
573 if (!client
->usage_count
) {
574 pr_debug("i2c-core: %s used one too many times\n",
579 client
->usage_count
--;
580 i2c_dec_use_client(client
);
585 void i2c_clients_command(struct i2c_adapter
*adap
, unsigned int cmd
, void *arg
)
587 struct list_head
*item
;
588 struct i2c_client
*client
;
590 mutex_lock(&adap
->clist_lock
);
591 list_for_each(item
,&adap
->clients
) {
592 client
= list_entry(item
, struct i2c_client
, list
);
593 if (!try_module_get(client
->driver
->driver
.owner
))
595 if (NULL
!= client
->driver
->command
) {
596 mutex_unlock(&adap
->clist_lock
);
597 client
->driver
->command(client
,cmd
,arg
);
598 mutex_lock(&adap
->clist_lock
);
600 module_put(client
->driver
->driver
.owner
);
602 mutex_unlock(&adap
->clist_lock
);
605 static int __init
i2c_init(void)
609 retval
= bus_register(&i2c_bus_type
);
612 retval
= driver_register(&i2c_adapter_driver
);
615 return class_register(&i2c_adapter_class
);
618 static void __exit
i2c_exit(void)
620 class_unregister(&i2c_adapter_class
);
621 driver_unregister(&i2c_adapter_driver
);
622 bus_unregister(&i2c_bus_type
);
625 subsys_initcall(i2c_init
);
626 module_exit(i2c_exit
);
628 /* ----------------------------------------------------
629 * the functional interface to the i2c busses.
630 * ----------------------------------------------------
633 int i2c_transfer(struct i2c_adapter
* adap
, struct i2c_msg
*msgs
, int num
)
637 if (adap
->algo
->master_xfer
) {
639 for (ret
= 0; ret
< num
; ret
++) {
640 dev_dbg(&adap
->dev
, "master_xfer[%d] %c, addr=0x%02x, "
641 "len=%d\n", ret
, msgs
[ret
].flags
& I2C_M_RD
?
642 'R' : 'W', msgs
[ret
].addr
, msgs
[ret
].len
);
646 mutex_lock_nested(&adap
->bus_lock
, adap
->level
);
647 ret
= adap
->algo
->master_xfer(adap
,msgs
,num
);
648 mutex_unlock(&adap
->bus_lock
);
652 dev_dbg(&adap
->dev
, "I2C level transfers not supported\n");
657 int i2c_master_send(struct i2c_client
*client
,const char *buf
,int count
)
660 struct i2c_adapter
*adap
=client
->adapter
;
663 msg
.addr
= client
->addr
;
664 msg
.flags
= client
->flags
& I2C_M_TEN
;
666 msg
.buf
= (char *)buf
;
668 ret
= i2c_transfer(adap
, &msg
, 1);
670 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
671 transmitted, else error code. */
672 return (ret
== 1) ? count
: ret
;
675 int i2c_master_recv(struct i2c_client
*client
, char *buf
,int count
)
677 struct i2c_adapter
*adap
=client
->adapter
;
681 msg
.addr
= client
->addr
;
682 msg
.flags
= client
->flags
& I2C_M_TEN
;
683 msg
.flags
|= I2C_M_RD
;
687 ret
= i2c_transfer(adap
, &msg
, 1);
689 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
690 transmitted, else error code. */
691 return (ret
== 1) ? count
: ret
;
695 int i2c_control(struct i2c_client
*client
,
696 unsigned int cmd
, unsigned long arg
)
699 struct i2c_adapter
*adap
= client
->adapter
;
701 dev_dbg(&client
->adapter
->dev
, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd
, arg
);
710 if (adap
->algo
->algo_control
!=NULL
)
711 ret
= adap
->algo
->algo_control(adap
,cmd
,arg
);
716 /* ----------------------------------------------------
717 * the i2c address scanning function
718 * Will not work for 10-bit addresses!
719 * ----------------------------------------------------
721 static int i2c_probe_address(struct i2c_adapter
*adapter
, int addr
, int kind
,
722 int (*found_proc
) (struct i2c_adapter
*, int, int))
726 /* Make sure the address is valid */
727 if (addr
< 0x03 || addr
> 0x77) {
728 dev_warn(&adapter
->dev
, "Invalid probe address 0x%02x\n",
733 /* Skip if already in use */
734 if (i2c_check_addr(adapter
, addr
))
737 /* Make sure there is something at this address, unless forced */
739 if (i2c_smbus_xfer(adapter
, addr
, 0, 0, 0,
740 I2C_SMBUS_QUICK
, NULL
) < 0)
743 /* prevent 24RF08 corruption */
744 if ((addr
& ~0x0f) == 0x50)
745 i2c_smbus_xfer(adapter
, addr
, 0, 0, 0,
746 I2C_SMBUS_QUICK
, NULL
);
749 /* Finally call the custom detection function */
750 err
= found_proc(adapter
, addr
, kind
);
751 /* -ENODEV can be returned if there is a chip at the given address
752 but it isn't supported by this chip driver. We catch it here as
753 this isn't an error. */
758 dev_warn(&adapter
->dev
, "Client creation failed at 0x%x (%d)\n",
763 int i2c_probe(struct i2c_adapter
*adapter
,
764 struct i2c_client_address_data
*address_data
,
765 int (*found_proc
) (struct i2c_adapter
*, int, int))
768 int adap_id
= i2c_adapter_id(adapter
);
770 /* Force entries are done first, and are not affected by ignore
772 if (address_data
->forces
) {
773 unsigned short **forces
= address_data
->forces
;
776 for (kind
= 0; forces
[kind
]; kind
++) {
777 for (i
= 0; forces
[kind
][i
] != I2C_CLIENT_END
;
779 if (forces
[kind
][i
] == adap_id
780 || forces
[kind
][i
] == ANY_I2C_BUS
) {
781 dev_dbg(&adapter
->dev
, "found force "
782 "parameter for adapter %d, "
783 "addr 0x%02x, kind %d\n",
784 adap_id
, forces
[kind
][i
+ 1],
786 err
= i2c_probe_address(adapter
,
796 /* Stop here if we can't use SMBUS_QUICK */
797 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_QUICK
)) {
798 if (address_data
->probe
[0] == I2C_CLIENT_END
799 && address_data
->normal_i2c
[0] == I2C_CLIENT_END
)
802 dev_warn(&adapter
->dev
, "SMBus Quick command not supported, "
803 "can't probe for chips\n");
807 /* Probe entries are done second, and are not affected by ignore
809 for (i
= 0; address_data
->probe
[i
] != I2C_CLIENT_END
; i
+= 2) {
810 if (address_data
->probe
[i
] == adap_id
811 || address_data
->probe
[i
] == ANY_I2C_BUS
) {
812 dev_dbg(&adapter
->dev
, "found probe parameter for "
813 "adapter %d, addr 0x%02x\n", adap_id
,
814 address_data
->probe
[i
+ 1]);
815 err
= i2c_probe_address(adapter
,
816 address_data
->probe
[i
+ 1],
823 /* Normal entries are done last, unless shadowed by an ignore entry */
824 for (i
= 0; address_data
->normal_i2c
[i
] != I2C_CLIENT_END
; i
+= 1) {
828 for (j
= 0; address_data
->ignore
[j
] != I2C_CLIENT_END
;
830 if ((address_data
->ignore
[j
] == adap_id
||
831 address_data
->ignore
[j
] == ANY_I2C_BUS
)
832 && address_data
->ignore
[j
+ 1]
833 == address_data
->normal_i2c
[i
]) {
834 dev_dbg(&adapter
->dev
, "found ignore "
835 "parameter for adapter %d, "
836 "addr 0x%02x\n", adap_id
,
837 address_data
->ignore
[j
+ 1]);
845 dev_dbg(&adapter
->dev
, "found normal entry for adapter %d, "
846 "addr 0x%02x\n", adap_id
,
847 address_data
->normal_i2c
[i
]);
848 err
= i2c_probe_address(adapter
, address_data
->normal_i2c
[i
],
857 struct i2c_adapter
* i2c_get_adapter(int id
)
859 struct i2c_adapter
*adapter
;
861 mutex_lock(&core_lists
);
862 adapter
= (struct i2c_adapter
*)idr_find(&i2c_adapter_idr
, id
);
863 if (adapter
&& !try_module_get(adapter
->owner
))
866 mutex_unlock(&core_lists
);
870 void i2c_put_adapter(struct i2c_adapter
*adap
)
872 module_put(adap
->owner
);
875 /* The SMBus parts */
877 #define POLY (0x1070U << 3)
883 for(i
= 0; i
< 8; i
++) {
888 return (u8
)(data
>> 8);
891 /* Incremental CRC8 over count bytes in the array pointed to by p */
892 static u8
i2c_smbus_pec(u8 crc
, u8
*p
, size_t count
)
896 for(i
= 0; i
< count
; i
++)
897 crc
= crc8((crc
^ p
[i
]) << 8);
901 /* Assume a 7-bit address, which is reasonable for SMBus */
902 static u8
i2c_smbus_msg_pec(u8 pec
, struct i2c_msg
*msg
)
904 /* The address will be sent first */
905 u8 addr
= (msg
->addr
<< 1) | !!(msg
->flags
& I2C_M_RD
);
906 pec
= i2c_smbus_pec(pec
, &addr
, 1);
908 /* The data buffer follows */
909 return i2c_smbus_pec(pec
, msg
->buf
, msg
->len
);
912 /* Used for write only transactions */
913 static inline void i2c_smbus_add_pec(struct i2c_msg
*msg
)
915 msg
->buf
[msg
->len
] = i2c_smbus_msg_pec(0, msg
);
919 /* Return <0 on CRC error
920 If there was a write before this read (most cases) we need to take the
921 partial CRC from the write part into account.
922 Note that this function does modify the message (we need to decrease the
923 message length to hide the CRC byte from the caller). */
924 static int i2c_smbus_check_pec(u8 cpec
, struct i2c_msg
*msg
)
926 u8 rpec
= msg
->buf
[--msg
->len
];
927 cpec
= i2c_smbus_msg_pec(cpec
, msg
);
930 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
937 s32
i2c_smbus_write_quick(struct i2c_client
*client
, u8 value
)
939 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
940 value
,0,I2C_SMBUS_QUICK
,NULL
);
943 s32
i2c_smbus_read_byte(struct i2c_client
*client
)
945 union i2c_smbus_data data
;
946 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
947 I2C_SMBUS_READ
,0,I2C_SMBUS_BYTE
, &data
))
953 s32
i2c_smbus_write_byte(struct i2c_client
*client
, u8 value
)
955 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
956 I2C_SMBUS_WRITE
, value
, I2C_SMBUS_BYTE
, NULL
);
959 s32
i2c_smbus_read_byte_data(struct i2c_client
*client
, u8 command
)
961 union i2c_smbus_data data
;
962 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
963 I2C_SMBUS_READ
,command
, I2C_SMBUS_BYTE_DATA
,&data
))
969 s32
i2c_smbus_write_byte_data(struct i2c_client
*client
, u8 command
, u8 value
)
971 union i2c_smbus_data data
;
973 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
974 I2C_SMBUS_WRITE
,command
,
975 I2C_SMBUS_BYTE_DATA
,&data
);
978 s32
i2c_smbus_read_word_data(struct i2c_client
*client
, u8 command
)
980 union i2c_smbus_data data
;
981 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
982 I2C_SMBUS_READ
,command
, I2C_SMBUS_WORD_DATA
, &data
))
988 s32
i2c_smbus_write_word_data(struct i2c_client
*client
, u8 command
, u16 value
)
990 union i2c_smbus_data data
;
992 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
993 I2C_SMBUS_WRITE
,command
,
994 I2C_SMBUS_WORD_DATA
,&data
);
997 s32
i2c_smbus_write_block_data(struct i2c_client
*client
, u8 command
,
998 u8 length
, const u8
*values
)
1000 union i2c_smbus_data data
;
1002 if (length
> I2C_SMBUS_BLOCK_MAX
)
1003 length
= I2C_SMBUS_BLOCK_MAX
;
1004 data
.block
[0] = length
;
1005 memcpy(&data
.block
[1], values
, length
);
1006 return i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
1007 I2C_SMBUS_WRITE
,command
,
1008 I2C_SMBUS_BLOCK_DATA
,&data
);
1011 /* Returns the number of read bytes */
1012 s32
i2c_smbus_read_i2c_block_data(struct i2c_client
*client
, u8 command
, u8
*values
)
1014 union i2c_smbus_data data
;
1016 if (i2c_smbus_xfer(client
->adapter
,client
->addr
,client
->flags
,
1017 I2C_SMBUS_READ
,command
,
1018 I2C_SMBUS_I2C_BLOCK_DATA
,&data
))
1021 memcpy(values
, &data
.block
[1], data
.block
[0]);
1022 return data
.block
[0];
1025 s32
i2c_smbus_write_i2c_block_data(struct i2c_client
*client
, u8 command
,
1026 u8 length
, const u8
*values
)
1028 union i2c_smbus_data data
;
1030 if (length
> I2C_SMBUS_BLOCK_MAX
)
1031 length
= I2C_SMBUS_BLOCK_MAX
;
1032 data
.block
[0] = length
;
1033 memcpy(data
.block
+ 1, values
, length
);
1034 return i2c_smbus_xfer(client
->adapter
, client
->addr
, client
->flags
,
1035 I2C_SMBUS_WRITE
, command
,
1036 I2C_SMBUS_I2C_BLOCK_DATA
, &data
);
1039 /* Simulate a SMBus command using the i2c protocol
1040 No checking of parameters is done! */
1041 static s32
i2c_smbus_xfer_emulated(struct i2c_adapter
* adapter
, u16 addr
,
1042 unsigned short flags
,
1043 char read_write
, u8 command
, int size
,
1044 union i2c_smbus_data
* data
)
1046 /* So we need to generate a series of msgs. In the case of writing, we
1047 need to use only one message; when reading, we need two. We initialize
1048 most things with sane defaults, to keep the code below somewhat
1050 unsigned char msgbuf0
[I2C_SMBUS_BLOCK_MAX
+3];
1051 unsigned char msgbuf1
[I2C_SMBUS_BLOCK_MAX
+2];
1052 int num
= read_write
== I2C_SMBUS_READ
?2:1;
1053 struct i2c_msg msg
[2] = { { addr
, flags
, 1, msgbuf0
},
1054 { addr
, flags
| I2C_M_RD
, 0, msgbuf1
}
1059 msgbuf0
[0] = command
;
1061 case I2C_SMBUS_QUICK
:
1063 /* Special case: The read/write field is used as data */
1064 msg
[0].flags
= flags
| (read_write
==I2C_SMBUS_READ
)?I2C_M_RD
:0;
1067 case I2C_SMBUS_BYTE
:
1068 if (read_write
== I2C_SMBUS_READ
) {
1069 /* Special case: only a read! */
1070 msg
[0].flags
= I2C_M_RD
| flags
;
1074 case I2C_SMBUS_BYTE_DATA
:
1075 if (read_write
== I2C_SMBUS_READ
)
1079 msgbuf0
[1] = data
->byte
;
1082 case I2C_SMBUS_WORD_DATA
:
1083 if (read_write
== I2C_SMBUS_READ
)
1087 msgbuf0
[1] = data
->word
& 0xff;
1088 msgbuf0
[2] = data
->word
>> 8;
1091 case I2C_SMBUS_PROC_CALL
:
1092 num
= 2; /* Special case */
1093 read_write
= I2C_SMBUS_READ
;
1096 msgbuf0
[1] = data
->word
& 0xff;
1097 msgbuf0
[2] = data
->word
>> 8;
1099 case I2C_SMBUS_BLOCK_DATA
:
1100 if (read_write
== I2C_SMBUS_READ
) {
1101 dev_err(&adapter
->dev
, "Block read not supported "
1102 "under I2C emulation!\n");
1105 msg
[0].len
= data
->block
[0] + 2;
1106 if (msg
[0].len
> I2C_SMBUS_BLOCK_MAX
+ 2) {
1107 dev_err(&adapter
->dev
, "smbus_access called with "
1108 "invalid block write size (%d)\n",
1112 for (i
= 1; i
< msg
[0].len
; i
++)
1113 msgbuf0
[i
] = data
->block
[i
-1];
1116 case I2C_SMBUS_BLOCK_PROC_CALL
:
1117 dev_dbg(&adapter
->dev
, "Block process call not supported "
1118 "under I2C emulation!\n");
1120 case I2C_SMBUS_I2C_BLOCK_DATA
:
1121 if (read_write
== I2C_SMBUS_READ
) {
1122 msg
[1].len
= I2C_SMBUS_BLOCK_MAX
;
1124 msg
[0].len
= data
->block
[0] + 1;
1125 if (msg
[0].len
> I2C_SMBUS_BLOCK_MAX
+ 1) {
1126 dev_err(&adapter
->dev
, "i2c_smbus_xfer_emulated called with "
1127 "invalid block write size (%d)\n",
1131 for (i
= 1; i
<= data
->block
[0]; i
++)
1132 msgbuf0
[i
] = data
->block
[i
];
1136 dev_err(&adapter
->dev
, "smbus_access called with invalid size (%d)\n",
1141 i
= ((flags
& I2C_CLIENT_PEC
) && size
!= I2C_SMBUS_QUICK
1142 && size
!= I2C_SMBUS_I2C_BLOCK_DATA
);
1144 /* Compute PEC if first message is a write */
1145 if (!(msg
[0].flags
& I2C_M_RD
)) {
1146 if (num
== 1) /* Write only */
1147 i2c_smbus_add_pec(&msg
[0]);
1148 else /* Write followed by read */
1149 partial_pec
= i2c_smbus_msg_pec(0, &msg
[0]);
1151 /* Ask for PEC if last message is a read */
1152 if (msg
[num
-1].flags
& I2C_M_RD
)
1156 if (i2c_transfer(adapter
, msg
, num
) < 0)
1159 /* Check PEC if last message is a read */
1160 if (i
&& (msg
[num
-1].flags
& I2C_M_RD
)) {
1161 if (i2c_smbus_check_pec(partial_pec
, &msg
[num
-1]) < 0)
1165 if (read_write
== I2C_SMBUS_READ
)
1167 case I2C_SMBUS_BYTE
:
1168 data
->byte
= msgbuf0
[0];
1170 case I2C_SMBUS_BYTE_DATA
:
1171 data
->byte
= msgbuf1
[0];
1173 case I2C_SMBUS_WORD_DATA
:
1174 case I2C_SMBUS_PROC_CALL
:
1175 data
->word
= msgbuf1
[0] | (msgbuf1
[1] << 8);
1177 case I2C_SMBUS_I2C_BLOCK_DATA
:
1178 /* fixed at 32 for now */
1179 data
->block
[0] = I2C_SMBUS_BLOCK_MAX
;
1180 for (i
= 0; i
< I2C_SMBUS_BLOCK_MAX
; i
++)
1181 data
->block
[i
+1] = msgbuf1
[i
];
1188 s32
i2c_smbus_xfer(struct i2c_adapter
* adapter
, u16 addr
, unsigned short flags
,
1189 char read_write
, u8 command
, int size
,
1190 union i2c_smbus_data
* data
)
1194 flags
&= I2C_M_TEN
| I2C_CLIENT_PEC
;
1196 if (adapter
->algo
->smbus_xfer
) {
1197 mutex_lock(&adapter
->bus_lock
);
1198 res
= adapter
->algo
->smbus_xfer(adapter
,addr
,flags
,read_write
,
1200 mutex_unlock(&adapter
->bus_lock
);
1202 res
= i2c_smbus_xfer_emulated(adapter
,addr
,flags
,read_write
,
1209 /* Next four are needed by i2c-isa */
1210 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release
);
1211 EXPORT_SYMBOL_GPL(i2c_adapter_driver
);
1212 EXPORT_SYMBOL_GPL(i2c_adapter_class
);
1213 EXPORT_SYMBOL_GPL(i2c_bus_type
);
1215 EXPORT_SYMBOL(i2c_add_adapter
);
1216 EXPORT_SYMBOL(i2c_del_adapter
);
1217 EXPORT_SYMBOL(i2c_del_driver
);
1218 EXPORT_SYMBOL(i2c_attach_client
);
1219 EXPORT_SYMBOL(i2c_detach_client
);
1220 EXPORT_SYMBOL(i2c_use_client
);
1221 EXPORT_SYMBOL(i2c_release_client
);
1222 EXPORT_SYMBOL(i2c_clients_command
);
1223 EXPORT_SYMBOL(i2c_check_addr
);
1225 EXPORT_SYMBOL(i2c_master_send
);
1226 EXPORT_SYMBOL(i2c_master_recv
);
1227 EXPORT_SYMBOL(i2c_control
);
1228 EXPORT_SYMBOL(i2c_transfer
);
1229 EXPORT_SYMBOL(i2c_get_adapter
);
1230 EXPORT_SYMBOL(i2c_put_adapter
);
1231 EXPORT_SYMBOL(i2c_probe
);
1233 EXPORT_SYMBOL(i2c_smbus_xfer
);
1234 EXPORT_SYMBOL(i2c_smbus_write_quick
);
1235 EXPORT_SYMBOL(i2c_smbus_read_byte
);
1236 EXPORT_SYMBOL(i2c_smbus_write_byte
);
1237 EXPORT_SYMBOL(i2c_smbus_read_byte_data
);
1238 EXPORT_SYMBOL(i2c_smbus_write_byte_data
);
1239 EXPORT_SYMBOL(i2c_smbus_read_word_data
);
1240 EXPORT_SYMBOL(i2c_smbus_write_word_data
);
1241 EXPORT_SYMBOL(i2c_smbus_write_block_data
);
1242 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data
);
1243 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data
);
1245 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1246 MODULE_DESCRIPTION("I2C-Bus main module");
1247 MODULE_LICENSE("GPL");