]> Pileus Git - ~andy/linux/blob - drivers/i2c/i2c-core.c
[PATCH] I2C: Convert i2c to mutexes
[~andy/linux] / drivers / i2c / i2c-core.c
1 /* i2c-core.c - a device driver for the iic-bus interface                    */
2 /* ------------------------------------------------------------------------- */
3 /*   Copyright (C) 1995-99 Simon G. Vogl
4
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.
9
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.
14
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 /* ------------------------------------------------------------------------- */
19
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> */
24
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>
36
37
38 static LIST_HEAD(adapters);
39 static LIST_HEAD(drivers);
40 static DEFINE_MUTEX(core_lists);
41 static DEFINE_IDR(i2c_adapter_idr);
42
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)
45 {
46         return 1;
47 }
48
49 static int i2c_bus_suspend(struct device * dev, pm_message_t state)
50 {
51         int rc = 0;
52
53         if (dev->driver && dev->driver->suspend)
54                 rc = dev->driver->suspend(dev, state);
55         return rc;
56 }
57
58 static int i2c_bus_resume(struct device * dev)
59 {
60         int rc = 0;
61         
62         if (dev->driver && dev->driver->resume)
63                 rc = dev->driver->resume(dev);
64         return rc;
65 }
66
67 static int i2c_device_probe(struct device *dev)
68 {
69         return -ENODEV;
70 }
71
72 static int i2c_device_remove(struct device *dev)
73 {
74         return 0;
75 }
76
77 struct bus_type i2c_bus_type = {
78         .name =         "i2c",
79         .match =        i2c_device_match,
80         .probe =        i2c_device_probe,
81         .remove =       i2c_device_remove,
82         .suspend =      i2c_bus_suspend,
83         .resume =       i2c_bus_resume,
84 };
85
86 void i2c_adapter_dev_release(struct device *dev)
87 {
88         struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
89         complete(&adap->dev_released);
90 }
91
92 struct device_driver i2c_adapter_driver = {
93         .owner = THIS_MODULE,
94         .name = "i2c_adapter",
95         .bus = &i2c_bus_type,
96 };
97
98 static void i2c_adapter_class_dev_release(struct class_device *dev)
99 {
100         struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev);
101         complete(&adap->class_dev_released);
102 }
103
104 struct class i2c_adapter_class = {
105         .owner =        THIS_MODULE,
106         .name =         "i2c-adapter",
107         .release =      &i2c_adapter_class_dev_release,
108 };
109
110 static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
111 {
112         struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
113         return sprintf(buf, "%s\n", adap->name);
114 }
115 static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);
116
117
118 static void i2c_client_release(struct device *dev)
119 {
120         struct i2c_client *client = to_i2c_client(dev);
121         complete(&client->released);
122 }
123
124 static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
125 {
126         struct i2c_client *client = to_i2c_client(dev);
127         return sprintf(buf, "%s\n", client->name);
128 }
129
130 /* 
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.
134  */
135 static struct device_attribute dev_attr_client_name = {
136         .attr   = {.name = "name", .mode = S_IRUGO, .owner = THIS_MODULE },
137         .show   = &show_client_name,
138 };
139
140
141 /* ---------------------------------------------------
142  * registering functions 
143  * --------------------------------------------------- 
144  */
145
146 /* -----
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.
150  */
151 int i2c_add_adapter(struct i2c_adapter *adap)
152 {
153         int id, res = 0;
154         struct list_head   *item;
155         struct i2c_driver  *driver;
156
157         mutex_lock(&core_lists);
158
159         if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) {
160                 res = -ENOMEM;
161                 goto out_unlock;
162         }
163
164         res = idr_get_new(&i2c_adapter_idr, adap, &id);
165         if (res < 0) {
166                 if (res == -EAGAIN)
167                         res = -ENOMEM;
168                 goto out_unlock;
169         }
170
171         adap->nr =  id & MAX_ID_MASK;
172         init_MUTEX(&adap->bus_lock);
173         init_MUTEX(&adap->clist_lock);
174         list_add_tail(&adap->list,&adapters);
175         INIT_LIST_HEAD(&adap->clients);
176
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.
180          */
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);
188
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);
195
196         dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
197
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);
204         }
205
206 out_unlock:
207         mutex_unlock(&core_lists);
208         return res;
209 }
210
211
212 int i2c_del_adapter(struct i2c_adapter *adap)
213 {
214         struct list_head  *item, *_n;
215         struct i2c_adapter *adap_from_list;
216         struct i2c_driver *driver;
217         struct i2c_client *client;
218         int res = 0;
219
220         mutex_lock(&core_lists);
221
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)
225                         break;
226         }
227         if (adap_from_list != adap) {
228                 pr_debug("i2c-core: attempting to delete unregistered "
229                          "adapter [%s]\n", adap->name);
230                 res = -EINVAL;
231                 goto out_unlock;
232         }
233
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 "
239                                         "for driver [%s]\n",
240                                         driver->driver.name);
241                                 goto out_unlock;
242                         }
243         }
244
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);
249
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,
253                                 client->addr);
254                         goto out_unlock;
255                 }
256         }
257
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);
265
266         /* wait for sysfs to drop all references */
267         wait_for_completion(&adap->dev_released);
268         wait_for_completion(&adap->class_dev_released);
269
270         /* free dynamically allocated bus id */
271         idr_remove(&i2c_adapter_idr, adap->nr);
272
273         dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
274
275  out_unlock:
276         mutex_unlock(&core_lists);
277         return res;
278 }
279
280
281 /* -----
282  * What follows is the "upwards" interface: commands for talking to clients,
283  * which implement the functions to access the physical information of the
284  * chips.
285  */
286
287 int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
288 {
289         struct list_head   *item;
290         struct i2c_adapter *adapter;
291         int res = 0;
292
293         mutex_lock(&core_lists);
294
295         /* add the driver to the list of i2c drivers in the driver core */
296         driver->driver.owner = owner;
297         driver->driver.bus = &i2c_bus_type;
298
299         res = driver_register(&driver->driver);
300         if (res)
301                 goto out_unlock;
302         
303         list_add_tail(&driver->list,&drivers);
304         pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
305
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);
311                 }
312         }
313
314  out_unlock:
315         mutex_unlock(&core_lists);
316         return res;
317 }
318 EXPORT_SYMBOL(i2c_register_driver);
319
320 int i2c_del_driver(struct i2c_driver *driver)
321 {
322         struct list_head   *item1, *item2, *_n;
323         struct i2c_client  *client;
324         struct i2c_adapter *adap;
325         
326         int res = 0;
327
328         mutex_lock(&core_lists);
329
330         /* Have a look at each adapter, if clients of this driver are still
331          * attached. If so, detach them to be able to kill the driver 
332          * afterwards.
333          */
334         list_for_each(item1,&adapters) {
335                 adap = list_entry(item1, struct i2c_adapter, list);
336                 if (driver->detach_adapter) {
337                         if ((res = driver->detach_adapter(adap))) {
338                                 dev_err(&adap->dev, "detach_adapter failed "
339                                         "for driver [%s]\n",
340                                         driver->driver.name);
341                                 goto out_unlock;
342                         }
343                 } else {
344                         list_for_each_safe(item2, _n, &adap->clients) {
345                                 client = list_entry(item2, struct i2c_client, list);
346                                 if (client->driver != driver)
347                                         continue;
348                                 dev_dbg(&adap->dev, "detaching client [%s] "
349                                         "at 0x%02x\n", client->name,
350                                         client->addr);
351                                 if ((res = driver->detach_client(client))) {
352                                         dev_err(&adap->dev, "detach_client "
353                                                 "failed for client [%s] at "
354                                                 "0x%02x\n", client->name,
355                                                 client->addr);
356                                         goto out_unlock;
357                                 }
358                         }
359                 }
360         }
361
362         driver_unregister(&driver->driver);
363         list_del(&driver->list);
364         pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
365
366  out_unlock:
367         mutex_unlock(&core_lists);
368         return 0;
369 }
370
371 static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr)
372 {
373         struct list_head   *item;
374         struct i2c_client  *client;
375
376         list_for_each(item,&adapter->clients) {
377                 client = list_entry(item, struct i2c_client, list);
378                 if (client->addr == addr)
379                         return -EBUSY;
380         }
381         return 0;
382 }
383
384 int i2c_check_addr(struct i2c_adapter *adapter, int addr)
385 {
386         int rval;
387
388         down(&adapter->clist_lock);
389         rval = __i2c_check_addr(adapter, addr);
390         up(&adapter->clist_lock);
391
392         return rval;
393 }
394
395 int i2c_attach_client(struct i2c_client *client)
396 {
397         struct i2c_adapter *adapter = client->adapter;
398
399         down(&adapter->clist_lock);
400         if (__i2c_check_addr(client->adapter, client->addr)) {
401                 up(&adapter->clist_lock);
402                 return -EBUSY;
403         }
404         list_add_tail(&client->list,&adapter->clients);
405         up(&adapter->clist_lock);
406         
407         if (adapter->client_register)  {
408                 if (adapter->client_register(client))  {
409                         dev_dbg(&adapter->dev, "client_register "
410                                 "failed for client [%s] at 0x%02x\n",
411                                 client->name, client->addr);
412                 }
413         }
414
415         client->usage_count = 0;
416
417         client->dev.parent = &client->adapter->dev;
418         client->dev.driver = &client->driver->driver;
419         client->dev.bus = &i2c_bus_type;
420         client->dev.release = &i2c_client_release;
421         
422         snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
423                 "%d-%04x", i2c_adapter_id(adapter), client->addr);
424         dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
425                 client->name, client->dev.bus_id);
426         device_register(&client->dev);
427         device_create_file(&client->dev, &dev_attr_client_name);
428         
429         return 0;
430 }
431
432
433 int i2c_detach_client(struct i2c_client *client)
434 {
435         struct i2c_adapter *adapter = client->adapter;
436         int res = 0;
437         
438         if (client->usage_count > 0) {
439                 dev_warn(&client->dev, "Client [%s] still busy, "
440                          "can't detach\n", client->name);
441                 return -EBUSY;
442         }
443
444         if (adapter->client_unregister)  {
445                 res = adapter->client_unregister(client);
446                 if (res) {
447                         dev_err(&client->dev,
448                                 "client_unregister [%s] failed, "
449                                 "client not detached\n", client->name);
450                         goto out;
451                 }
452         }
453
454         down(&adapter->clist_lock);
455         list_del(&client->list);
456         init_completion(&client->released);
457         device_remove_file(&client->dev, &dev_attr_client_name);
458         device_unregister(&client->dev);
459         up(&adapter->clist_lock);
460         wait_for_completion(&client->released);
461
462  out:
463         return res;
464 }
465
466 static int i2c_inc_use_client(struct i2c_client *client)
467 {
468
469         if (!try_module_get(client->driver->driver.owner))
470                 return -ENODEV;
471         if (!try_module_get(client->adapter->owner)) {
472                 module_put(client->driver->driver.owner);
473                 return -ENODEV;
474         }
475
476         return 0;
477 }
478
479 static void i2c_dec_use_client(struct i2c_client *client)
480 {
481         module_put(client->driver->driver.owner);
482         module_put(client->adapter->owner);
483 }
484
485 int i2c_use_client(struct i2c_client *client)
486 {
487         int ret;
488
489         ret = i2c_inc_use_client(client);
490         if (ret)
491                 return ret;
492
493         client->usage_count++;
494
495         return 0;
496 }
497
498 int i2c_release_client(struct i2c_client *client)
499 {
500         if (!client->usage_count) {
501                 pr_debug("i2c-core: %s used one too many times\n",
502                          __FUNCTION__);
503                 return -EPERM;
504         }
505         
506         client->usage_count--;
507         i2c_dec_use_client(client);
508         
509         return 0;
510 }
511
512 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
513 {
514         struct list_head  *item;
515         struct i2c_client *client;
516
517         down(&adap->clist_lock);
518         list_for_each(item,&adap->clients) {
519                 client = list_entry(item, struct i2c_client, list);
520                 if (!try_module_get(client->driver->driver.owner))
521                         continue;
522                 if (NULL != client->driver->command) {
523                         up(&adap->clist_lock);
524                         client->driver->command(client,cmd,arg);
525                         down(&adap->clist_lock);
526                 }
527                 module_put(client->driver->driver.owner);
528        }
529        up(&adap->clist_lock);
530 }
531
532 static int __init i2c_init(void)
533 {
534         int retval;
535
536         retval = bus_register(&i2c_bus_type);
537         if (retval)
538                 return retval;
539         retval = driver_register(&i2c_adapter_driver);
540         if (retval)
541                 return retval;
542         return class_register(&i2c_adapter_class);
543 }
544
545 static void __exit i2c_exit(void)
546 {
547         class_unregister(&i2c_adapter_class);
548         driver_unregister(&i2c_adapter_driver);
549         bus_unregister(&i2c_bus_type);
550 }
551
552 subsys_initcall(i2c_init);
553 module_exit(i2c_exit);
554
555 /* ----------------------------------------------------
556  * the functional interface to the i2c busses.
557  * ----------------------------------------------------
558  */
559
560 int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
561 {
562         int ret;
563
564         if (adap->algo->master_xfer) {
565 #ifdef DEBUG
566                 for (ret = 0; ret < num; ret++) {
567                         dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
568                                 "len=%d\n", ret, msgs[ret].flags & I2C_M_RD ?
569                                 'R' : 'W', msgs[ret].addr, msgs[ret].len);
570                 }
571 #endif
572
573                 down(&adap->bus_lock);
574                 ret = adap->algo->master_xfer(adap,msgs,num);
575                 up(&adap->bus_lock);
576
577                 return ret;
578         } else {
579                 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
580                 return -ENOSYS;
581         }
582 }
583
584 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
585 {
586         int ret;
587         struct i2c_adapter *adap=client->adapter;
588         struct i2c_msg msg;
589
590         msg.addr = client->addr;
591         msg.flags = client->flags & I2C_M_TEN;
592         msg.len = count;
593         msg.buf = (char *)buf;
594         
595         ret = i2c_transfer(adap, &msg, 1);
596
597         /* If everything went ok (i.e. 1 msg transmitted), return #bytes
598            transmitted, else error code. */
599         return (ret == 1) ? count : ret;
600 }
601
602 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
603 {
604         struct i2c_adapter *adap=client->adapter;
605         struct i2c_msg msg;
606         int ret;
607
608         msg.addr = client->addr;
609         msg.flags = client->flags & I2C_M_TEN;
610         msg.flags |= I2C_M_RD;
611         msg.len = count;
612         msg.buf = buf;
613
614         ret = i2c_transfer(adap, &msg, 1);
615
616         /* If everything went ok (i.e. 1 msg transmitted), return #bytes
617            transmitted, else error code. */
618         return (ret == 1) ? count : ret;
619 }
620
621
622 int i2c_control(struct i2c_client *client,
623         unsigned int cmd, unsigned long arg)
624 {
625         int ret = 0;
626         struct i2c_adapter *adap = client->adapter;
627
628         dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
629         switch (cmd) {
630                 case I2C_RETRIES:
631                         adap->retries = arg;
632                         break;
633                 case I2C_TIMEOUT:
634                         adap->timeout = arg;
635                         break;
636                 default:
637                         if (adap->algo->algo_control!=NULL)
638                                 ret = adap->algo->algo_control(adap,cmd,arg);
639         }
640         return ret;
641 }
642
643 /* ----------------------------------------------------
644  * the i2c address scanning function
645  * Will not work for 10-bit addresses!
646  * ----------------------------------------------------
647  */
648 static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
649                              int (*found_proc) (struct i2c_adapter *, int, int))
650 {
651         int err;
652
653         /* Make sure the address is valid */
654         if (addr < 0x03 || addr > 0x77) {
655                 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
656                          addr);
657                 return -EINVAL;
658         }
659
660         /* Skip if already in use */
661         if (i2c_check_addr(adapter, addr))
662                 return 0;
663
664         /* Make sure there is something at this address, unless forced */
665         if (kind < 0) {
666                 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
667                                    I2C_SMBUS_QUICK, NULL) < 0)
668                         return 0;
669
670                 /* prevent 24RF08 corruption */
671                 if ((addr & ~0x0f) == 0x50)
672                         i2c_smbus_xfer(adapter, addr, 0, 0, 0,
673                                        I2C_SMBUS_QUICK, NULL);
674         }
675
676         /* Finally call the custom detection function */
677         err = found_proc(adapter, addr, kind);
678
679         /* -ENODEV can be returned if there is a chip at the given address
680            but it isn't supported by this chip driver. We catch it here as
681            this isn't an error. */
682         return (err == -ENODEV) ? 0 : err;
683 }
684
685 int i2c_probe(struct i2c_adapter *adapter,
686               struct i2c_client_address_data *address_data,
687               int (*found_proc) (struct i2c_adapter *, int, int))
688 {
689         int i, err;
690         int adap_id = i2c_adapter_id(adapter);
691
692         /* Force entries are done first, and are not affected by ignore
693            entries */
694         if (address_data->forces) {
695                 unsigned short **forces = address_data->forces;
696                 int kind;
697
698                 for (kind = 0; forces[kind]; kind++) {
699                         for (i = 0; forces[kind][i] != I2C_CLIENT_END;
700                              i += 2) {
701                                 if (forces[kind][i] == adap_id
702                                  || forces[kind][i] == ANY_I2C_BUS) {
703                                         dev_dbg(&adapter->dev, "found force "
704                                                 "parameter for adapter %d, "
705                                                 "addr 0x%02x, kind %d\n",
706                                                 adap_id, forces[kind][i + 1],
707                                                 kind);
708                                         err = i2c_probe_address(adapter,
709                                                 forces[kind][i + 1],
710                                                 kind, found_proc);
711                                         if (err)
712                                                 return err;
713                                 }
714                         }
715                 }
716         }
717
718         /* Stop here if we can't use SMBUS_QUICK */
719         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
720                 if (address_data->probe[0] == I2C_CLIENT_END
721                  && address_data->normal_i2c[0] == I2C_CLIENT_END)
722                         return 0;
723
724                 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
725                          "can't probe for chips\n");
726                 return -1;
727         }
728
729         /* Probe entries are done second, and are not affected by ignore
730            entries either */
731         for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
732                 if (address_data->probe[i] == adap_id
733                  || address_data->probe[i] == ANY_I2C_BUS) {
734                         dev_dbg(&adapter->dev, "found probe parameter for "
735                                 "adapter %d, addr 0x%02x\n", adap_id,
736                                 address_data->probe[i + 1]);
737                         err = i2c_probe_address(adapter,
738                                                 address_data->probe[i + 1],
739                                                 -1, found_proc);
740                         if (err)
741                                 return err;
742                 }
743         }
744
745         /* Normal entries are done last, unless shadowed by an ignore entry */
746         for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
747                 int j, ignore;
748
749                 ignore = 0;
750                 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
751                      j += 2) {
752                         if ((address_data->ignore[j] == adap_id ||
753                              address_data->ignore[j] == ANY_I2C_BUS)
754                          && address_data->ignore[j + 1]
755                             == address_data->normal_i2c[i]) {
756                                 dev_dbg(&adapter->dev, "found ignore "
757                                         "parameter for adapter %d, "
758                                         "addr 0x%02x\n", adap_id,
759                                         address_data->ignore[j + 1]);
760                         }
761                         ignore = 1;
762                         break;
763                 }
764                 if (ignore)
765                         continue;
766
767                 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
768                         "addr 0x%02x\n", adap_id,
769                         address_data->normal_i2c[i]);
770                 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
771                                         -1, found_proc);
772                 if (err)
773                         return err;
774         }
775
776         return 0;
777 }
778
779 struct i2c_adapter* i2c_get_adapter(int id)
780 {
781         struct i2c_adapter *adapter;
782         
783         mutex_lock(&core_lists);
784         adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
785         if (adapter && !try_module_get(adapter->owner))
786                 adapter = NULL;
787
788         mutex_unlock(&core_lists);
789         return adapter;
790 }
791
792 void i2c_put_adapter(struct i2c_adapter *adap)
793 {
794         module_put(adap->owner);
795 }
796
797 /* The SMBus parts */
798
799 #define POLY    (0x1070U << 3) 
800 static u8
801 crc8(u16 data)
802 {
803         int i;
804   
805         for(i = 0; i < 8; i++) {
806                 if (data & 0x8000) 
807                         data = data ^ POLY;
808                 data = data << 1;
809         }
810         return (u8)(data >> 8);
811 }
812
813 /* Incremental CRC8 over count bytes in the array pointed to by p */
814 static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
815 {
816         int i;
817
818         for(i = 0; i < count; i++)
819                 crc = crc8((crc ^ p[i]) << 8);
820         return crc;
821 }
822
823 /* Assume a 7-bit address, which is reasonable for SMBus */
824 static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
825 {
826         /* The address will be sent first */
827         u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
828         pec = i2c_smbus_pec(pec, &addr, 1);
829
830         /* The data buffer follows */
831         return i2c_smbus_pec(pec, msg->buf, msg->len);
832 }
833
834 /* Used for write only transactions */
835 static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
836 {
837         msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
838         msg->len++;
839 }
840
841 /* Return <0 on CRC error
842    If there was a write before this read (most cases) we need to take the
843    partial CRC from the write part into account.
844    Note that this function does modify the message (we need to decrease the
845    message length to hide the CRC byte from the caller). */
846 static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
847 {
848         u8 rpec = msg->buf[--msg->len];
849         cpec = i2c_smbus_msg_pec(cpec, msg);
850
851         if (rpec != cpec) {
852                 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
853                         rpec, cpec);
854                 return -1;
855         }
856         return 0;       
857 }
858
859 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
860 {
861         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
862                               value,0,I2C_SMBUS_QUICK,NULL);
863 }
864
865 s32 i2c_smbus_read_byte(struct i2c_client *client)
866 {
867         union i2c_smbus_data data;
868         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
869                            I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
870                 return -1;
871         else
872                 return 0x0FF & data.byte;
873 }
874
875 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
876 {
877         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
878                               I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
879 }
880
881 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
882 {
883         union i2c_smbus_data data;
884         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
885                            I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
886                 return -1;
887         else
888                 return 0x0FF & data.byte;
889 }
890
891 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
892 {
893         union i2c_smbus_data data;
894         data.byte = value;
895         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
896                               I2C_SMBUS_WRITE,command,
897                               I2C_SMBUS_BYTE_DATA,&data);
898 }
899
900 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
901 {
902         union i2c_smbus_data data;
903         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
904                            I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
905                 return -1;
906         else
907                 return 0x0FFFF & data.word;
908 }
909
910 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
911 {
912         union i2c_smbus_data data;
913         data.word = value;
914         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
915                               I2C_SMBUS_WRITE,command,
916                               I2C_SMBUS_WORD_DATA,&data);
917 }
918
919 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
920                                u8 length, u8 *values)
921 {
922         union i2c_smbus_data data;
923         int i;
924         if (length > I2C_SMBUS_BLOCK_MAX)
925                 length = I2C_SMBUS_BLOCK_MAX;
926         for (i = 1; i <= length; i++)
927                 data.block[i] = values[i-1];
928         data.block[0] = length;
929         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
930                               I2C_SMBUS_WRITE,command,
931                               I2C_SMBUS_BLOCK_DATA,&data);
932 }
933
934 /* Returns the number of read bytes */
935 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
936 {
937         union i2c_smbus_data data;
938         int i;
939         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
940                               I2C_SMBUS_READ,command,
941                               I2C_SMBUS_I2C_BLOCK_DATA,&data))
942                 return -1;
943         else {
944                 for (i = 1; i <= data.block[0]; i++)
945                         values[i-1] = data.block[i];
946                 return data.block[0];
947         }
948 }
949
950 s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
951                                    u8 length, u8 *values)
952 {
953         union i2c_smbus_data data;
954
955         if (length > I2C_SMBUS_BLOCK_MAX)
956                 length = I2C_SMBUS_BLOCK_MAX;
957         data.block[0] = length;
958         memcpy(data.block + 1, values, length);
959         return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
960                               I2C_SMBUS_WRITE, command,
961                               I2C_SMBUS_I2C_BLOCK_DATA, &data);
962 }
963
964 /* Simulate a SMBus command using the i2c protocol 
965    No checking of parameters is done!  */
966 static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr, 
967                                    unsigned short flags,
968                                    char read_write, u8 command, int size, 
969                                    union i2c_smbus_data * data)
970 {
971         /* So we need to generate a series of msgs. In the case of writing, we
972           need to use only one message; when reading, we need two. We initialize
973           most things with sane defaults, to keep the code below somewhat
974           simpler. */
975         unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
976         unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
977         int num = read_write == I2C_SMBUS_READ?2:1;
978         struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 }, 
979                                   { addr, flags | I2C_M_RD, 0, msgbuf1 }
980                                 };
981         int i;
982         u8 partial_pec = 0;
983
984         msgbuf0[0] = command;
985         switch(size) {
986         case I2C_SMBUS_QUICK:
987                 msg[0].len = 0;
988                 /* Special case: The read/write field is used as data */
989                 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
990                 num = 1;
991                 break;
992         case I2C_SMBUS_BYTE:
993                 if (read_write == I2C_SMBUS_READ) {
994                         /* Special case: only a read! */
995                         msg[0].flags = I2C_M_RD | flags;
996                         num = 1;
997                 }
998                 break;
999         case I2C_SMBUS_BYTE_DATA:
1000                 if (read_write == I2C_SMBUS_READ)
1001                         msg[1].len = 1;
1002                 else {
1003                         msg[0].len = 2;
1004                         msgbuf0[1] = data->byte;
1005                 }
1006                 break;
1007         case I2C_SMBUS_WORD_DATA:
1008                 if (read_write == I2C_SMBUS_READ)
1009                         msg[1].len = 2;
1010                 else {
1011                         msg[0].len=3;
1012                         msgbuf0[1] = data->word & 0xff;
1013                         msgbuf0[2] = (data->word >> 8) & 0xff;
1014                 }
1015                 break;
1016         case I2C_SMBUS_PROC_CALL:
1017                 num = 2; /* Special case */
1018                 read_write = I2C_SMBUS_READ;
1019                 msg[0].len = 3;
1020                 msg[1].len = 2;
1021                 msgbuf0[1] = data->word & 0xff;
1022                 msgbuf0[2] = (data->word >> 8) & 0xff;
1023                 break;
1024         case I2C_SMBUS_BLOCK_DATA:
1025                 if (read_write == I2C_SMBUS_READ) {
1026                         dev_err(&adapter->dev, "Block read not supported "
1027                                "under I2C emulation!\n");
1028                         return -1;
1029                 } else {
1030                         msg[0].len = data->block[0] + 2;
1031                         if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1032                                 dev_err(&adapter->dev, "smbus_access called with "
1033                                        "invalid block write size (%d)\n",
1034                                        data->block[0]);
1035                                 return -1;
1036                         }
1037                         for (i = 1; i < msg[0].len; i++)
1038                                 msgbuf0[i] = data->block[i-1];
1039                 }
1040                 break;
1041         case I2C_SMBUS_BLOCK_PROC_CALL:
1042                 dev_dbg(&adapter->dev, "Block process call not supported "
1043                        "under I2C emulation!\n");
1044                 return -1;
1045         case I2C_SMBUS_I2C_BLOCK_DATA:
1046                 if (read_write == I2C_SMBUS_READ) {
1047                         msg[1].len = I2C_SMBUS_BLOCK_MAX;
1048                 } else {
1049                         msg[0].len = data->block[0] + 1;
1050                         if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1051                                 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1052                                        "invalid block write size (%d)\n",
1053                                        data->block[0]);
1054                                 return -1;
1055                         }
1056                         for (i = 1; i <= data->block[0]; i++)
1057                                 msgbuf0[i] = data->block[i];
1058                 }
1059                 break;
1060         default:
1061                 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1062                        size);
1063                 return -1;
1064         }
1065
1066         i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1067                                       && size != I2C_SMBUS_I2C_BLOCK_DATA);
1068         if (i) {
1069                 /* Compute PEC if first message is a write */
1070                 if (!(msg[0].flags & I2C_M_RD)) {
1071                         if (num == 1) /* Write only */
1072                                 i2c_smbus_add_pec(&msg[0]);
1073                         else /* Write followed by read */
1074                                 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1075                 }
1076                 /* Ask for PEC if last message is a read */
1077                 if (msg[num-1].flags & I2C_M_RD)
1078                         msg[num-1].len++;
1079         }
1080
1081         if (i2c_transfer(adapter, msg, num) < 0)
1082                 return -1;
1083
1084         /* Check PEC if last message is a read */
1085         if (i && (msg[num-1].flags & I2C_M_RD)) {
1086                 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1087                         return -1;
1088         }
1089
1090         if (read_write == I2C_SMBUS_READ)
1091                 switch(size) {
1092                         case I2C_SMBUS_BYTE:
1093                                 data->byte = msgbuf0[0];
1094                                 break;
1095                         case I2C_SMBUS_BYTE_DATA:
1096                                 data->byte = msgbuf1[0];
1097                                 break;
1098                         case I2C_SMBUS_WORD_DATA: 
1099                         case I2C_SMBUS_PROC_CALL:
1100                                 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1101                                 break;
1102                         case I2C_SMBUS_I2C_BLOCK_DATA:
1103                                 /* fixed at 32 for now */
1104                                 data->block[0] = I2C_SMBUS_BLOCK_MAX;
1105                                 for (i = 0; i < I2C_SMBUS_BLOCK_MAX; i++)
1106                                         data->block[i+1] = msgbuf1[i];
1107                                 break;
1108                 }
1109         return 0;
1110 }
1111
1112
1113 s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1114                    char read_write, u8 command, int size, 
1115                    union i2c_smbus_data * data)
1116 {
1117         s32 res;
1118
1119         flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1120
1121         if (adapter->algo->smbus_xfer) {
1122                 down(&adapter->bus_lock);
1123                 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1124                                                 command,size,data);
1125                 up(&adapter->bus_lock);
1126         } else
1127                 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1128                                               command,size,data);
1129
1130         return res;
1131 }
1132
1133
1134 /* Next four are needed by i2c-isa */
1135 EXPORT_SYMBOL_GPL(i2c_adapter_dev_release);
1136 EXPORT_SYMBOL_GPL(i2c_adapter_driver);
1137 EXPORT_SYMBOL_GPL(i2c_adapter_class);
1138 EXPORT_SYMBOL_GPL(i2c_bus_type);
1139
1140 EXPORT_SYMBOL(i2c_add_adapter);
1141 EXPORT_SYMBOL(i2c_del_adapter);
1142 EXPORT_SYMBOL(i2c_del_driver);
1143 EXPORT_SYMBOL(i2c_attach_client);
1144 EXPORT_SYMBOL(i2c_detach_client);
1145 EXPORT_SYMBOL(i2c_use_client);
1146 EXPORT_SYMBOL(i2c_release_client);
1147 EXPORT_SYMBOL(i2c_clients_command);
1148 EXPORT_SYMBOL(i2c_check_addr);
1149
1150 EXPORT_SYMBOL(i2c_master_send);
1151 EXPORT_SYMBOL(i2c_master_recv);
1152 EXPORT_SYMBOL(i2c_control);
1153 EXPORT_SYMBOL(i2c_transfer);
1154 EXPORT_SYMBOL(i2c_get_adapter);
1155 EXPORT_SYMBOL(i2c_put_adapter);
1156 EXPORT_SYMBOL(i2c_probe);
1157
1158 EXPORT_SYMBOL(i2c_smbus_xfer);
1159 EXPORT_SYMBOL(i2c_smbus_write_quick);
1160 EXPORT_SYMBOL(i2c_smbus_read_byte);
1161 EXPORT_SYMBOL(i2c_smbus_write_byte);
1162 EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1163 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1164 EXPORT_SYMBOL(i2c_smbus_read_word_data);
1165 EXPORT_SYMBOL(i2c_smbus_write_word_data);
1166 EXPORT_SYMBOL(i2c_smbus_write_block_data);
1167 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1168 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
1169
1170 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1171 MODULE_DESCRIPTION("I2C-Bus main module");
1172 MODULE_LICENSE("GPL");