]> err.no Git - linux-2.6/blob - drivers/i2c/i2c-core.c
i2c-remove-redundant-i2c_client-list.patch
[linux-2.6] / 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 <linux/completion.h>
36 #include <linux/hardirq.h>
37 #include <linux/irqflags.h>
38 #include <asm/uaccess.h>
39 #include <asm/semaphore.h>
40
41 #include "i2c-core.h"
42
43
44 static DEFINE_MUTEX(core_lock);
45 static DEFINE_IDR(i2c_adapter_idr);
46
47 #define is_newstyle_driver(d) ((d)->probe || (d)->remove)
48
49 /* ------------------------------------------------------------------------- */
50
51 static int i2c_device_match(struct device *dev, struct device_driver *drv)
52 {
53         struct i2c_client       *client = to_i2c_client(dev);
54         struct i2c_driver       *driver = to_i2c_driver(drv);
55
56         /* make legacy i2c drivers bypass driver model probing entirely;
57          * such drivers scan each i2c adapter/bus themselves.
58          */
59         if (!is_newstyle_driver(driver))
60                 return 0;
61
62         /* new style drivers use the same kind of driver matching policy
63          * as platform devices or SPI:  compare device and driver IDs.
64          */
65         return strcmp(client->driver_name, drv->name) == 0;
66 }
67
68 #ifdef  CONFIG_HOTPLUG
69
70 /* uevent helps with hotplug: modprobe -q $(MODALIAS) */
71 static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
72 {
73         struct i2c_client       *client = to_i2c_client(dev);
74
75         /* by definition, legacy drivers can't hotplug */
76         if (dev->driver || !client->driver_name)
77                 return 0;
78
79         if (add_uevent_var(env, "MODALIAS=%s", client->driver_name))
80                 return -ENOMEM;
81         dev_dbg(dev, "uevent\n");
82         return 0;
83 }
84
85 #else
86 #define i2c_device_uevent       NULL
87 #endif  /* CONFIG_HOTPLUG */
88
89 static int i2c_device_probe(struct device *dev)
90 {
91         struct i2c_client       *client = to_i2c_client(dev);
92         struct i2c_driver       *driver = to_i2c_driver(dev->driver);
93
94         if (!driver->probe)
95                 return -ENODEV;
96         client->driver = driver;
97         dev_dbg(dev, "probe\n");
98         return driver->probe(client);
99 }
100
101 static int i2c_device_remove(struct device *dev)
102 {
103         struct i2c_client       *client = to_i2c_client(dev);
104         struct i2c_driver       *driver;
105         int                     status;
106
107         if (!dev->driver)
108                 return 0;
109
110         driver = to_i2c_driver(dev->driver);
111         if (driver->remove) {
112                 dev_dbg(dev, "remove\n");
113                 status = driver->remove(client);
114         } else {
115                 dev->driver = NULL;
116                 status = 0;
117         }
118         if (status == 0)
119                 client->driver = NULL;
120         return status;
121 }
122
123 static void i2c_device_shutdown(struct device *dev)
124 {
125         struct i2c_driver *driver;
126
127         if (!dev->driver)
128                 return;
129         driver = to_i2c_driver(dev->driver);
130         if (driver->shutdown)
131                 driver->shutdown(to_i2c_client(dev));
132 }
133
134 static int i2c_device_suspend(struct device * dev, pm_message_t mesg)
135 {
136         struct i2c_driver *driver;
137
138         if (!dev->driver)
139                 return 0;
140         driver = to_i2c_driver(dev->driver);
141         if (!driver->suspend)
142                 return 0;
143         return driver->suspend(to_i2c_client(dev), mesg);
144 }
145
146 static int i2c_device_resume(struct device * dev)
147 {
148         struct i2c_driver *driver;
149
150         if (!dev->driver)
151                 return 0;
152         driver = to_i2c_driver(dev->driver);
153         if (!driver->resume)
154                 return 0;
155         return driver->resume(to_i2c_client(dev));
156 }
157
158 static void i2c_client_release(struct device *dev)
159 {
160         struct i2c_client *client = to_i2c_client(dev);
161         complete(&client->released);
162 }
163
164 static void i2c_client_dev_release(struct device *dev)
165 {
166         kfree(to_i2c_client(dev));
167 }
168
169 static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
170 {
171         struct i2c_client *client = to_i2c_client(dev);
172         return sprintf(buf, "%s\n", client->name);
173 }
174
175 static ssize_t show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
176 {
177         struct i2c_client *client = to_i2c_client(dev);
178         return client->driver_name
179                 ? sprintf(buf, "%s\n", client->driver_name)
180                 : 0;
181 }
182
183 static struct device_attribute i2c_dev_attrs[] = {
184         __ATTR(name, S_IRUGO, show_client_name, NULL),
185         /* modalias helps coldplug:  modprobe $(cat .../modalias) */
186         __ATTR(modalias, S_IRUGO, show_modalias, NULL),
187         { },
188 };
189
190 static struct bus_type i2c_bus_type = {
191         .name           = "i2c",
192         .dev_attrs      = i2c_dev_attrs,
193         .match          = i2c_device_match,
194         .uevent         = i2c_device_uevent,
195         .probe          = i2c_device_probe,
196         .remove         = i2c_device_remove,
197         .shutdown       = i2c_device_shutdown,
198         .suspend        = i2c_device_suspend,
199         .resume         = i2c_device_resume,
200 };
201
202
203 /**
204  * i2c_verify_client - return parameter as i2c_client, or NULL
205  * @dev: device, probably from some driver model iterator
206  *
207  * When traversing the driver model tree, perhaps using driver model
208  * iterators like @device_for_each_child(), you can't assume very much
209  * about the nodes you find.  Use this function to avoid oopses caused
210  * by wrongly treating some non-I2C device as an i2c_client.
211  */
212 struct i2c_client *i2c_verify_client(struct device *dev)
213 {
214         return (dev->bus == &i2c_bus_type)
215                         ? to_i2c_client(dev)
216                         : NULL;
217 }
218 EXPORT_SYMBOL(i2c_verify_client);
219
220
221 /**
222  * i2c_new_device - instantiate an i2c device for use with a new style driver
223  * @adap: the adapter managing the device
224  * @info: describes one I2C device; bus_num is ignored
225  * Context: can sleep
226  *
227  * Create a device to work with a new style i2c driver, where binding is
228  * handled through driver model probe()/remove() methods.  This call is not
229  * appropriate for use by mainboad initialization logic, which usually runs
230  * during an arch_initcall() long before any i2c_adapter could exist.
231  *
232  * This returns the new i2c client, which may be saved for later use with
233  * i2c_unregister_device(); or NULL to indicate an error.
234  */
235 struct i2c_client *
236 i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
237 {
238         struct i2c_client       *client;
239         int                     status;
240
241         client = kzalloc(sizeof *client, GFP_KERNEL);
242         if (!client)
243                 return NULL;
244
245         client->adapter = adap;
246
247         client->dev.platform_data = info->platform_data;
248         device_init_wakeup(&client->dev, info->flags & I2C_CLIENT_WAKE);
249
250         client->flags = info->flags & ~I2C_CLIENT_WAKE;
251         client->addr = info->addr;
252         client->irq = info->irq;
253
254         strlcpy(client->driver_name, info->driver_name,
255                 sizeof(client->driver_name));
256         strlcpy(client->name, info->type, sizeof(client->name));
257
258         /* a new style driver may be bound to this device when we
259          * return from this function, or any later moment (e.g. maybe
260          * hotplugging will load the driver module).  and the device
261          * refcount model is the standard driver model one.
262          */
263         status = i2c_attach_client(client);
264         if (status < 0) {
265                 kfree(client);
266                 client = NULL;
267         }
268         return client;
269 }
270 EXPORT_SYMBOL_GPL(i2c_new_device);
271
272
273 /**
274  * i2c_unregister_device - reverse effect of i2c_new_device()
275  * @client: value returned from i2c_new_device()
276  * Context: can sleep
277  */
278 void i2c_unregister_device(struct i2c_client *client)
279 {
280         struct i2c_adapter      *adapter = client->adapter;
281         struct i2c_driver       *driver = client->driver;
282
283         if (driver && !is_newstyle_driver(driver)) {
284                 dev_err(&client->dev, "can't unregister devices "
285                         "with legacy drivers\n");
286                 WARN_ON(1);
287                 return;
288         }
289
290         mutex_lock(&adapter->clist_lock);
291         list_del(&client->list);
292         mutex_unlock(&adapter->clist_lock);
293
294         device_unregister(&client->dev);
295 }
296 EXPORT_SYMBOL_GPL(i2c_unregister_device);
297
298
299 /* ------------------------------------------------------------------------- */
300
301 /* I2C bus adapters -- one roots each I2C or SMBUS segment */
302
303 static void i2c_adapter_dev_release(struct device *dev)
304 {
305         struct i2c_adapter *adap = to_i2c_adapter(dev);
306         complete(&adap->dev_released);
307 }
308
309 static ssize_t
310 show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
311 {
312         struct i2c_adapter *adap = to_i2c_adapter(dev);
313         return sprintf(buf, "%s\n", adap->name);
314 }
315
316 static struct device_attribute i2c_adapter_attrs[] = {
317         __ATTR(name, S_IRUGO, show_adapter_name, NULL),
318         { },
319 };
320
321 static struct class i2c_adapter_class = {
322         .owner                  = THIS_MODULE,
323         .name                   = "i2c-adapter",
324         .dev_attrs              = i2c_adapter_attrs,
325 };
326
327 static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
328 {
329         struct i2c_devinfo      *devinfo;
330
331         mutex_lock(&__i2c_board_lock);
332         list_for_each_entry(devinfo, &__i2c_board_list, list) {
333                 if (devinfo->busnum == adapter->nr
334                                 && !i2c_new_device(adapter,
335                                                 &devinfo->board_info))
336                         printk(KERN_ERR "i2c-core: can't create i2c%d-%04x\n",
337                                 i2c_adapter_id(adapter),
338                                 devinfo->board_info.addr);
339         }
340         mutex_unlock(&__i2c_board_lock);
341 }
342
343 static int i2c_do_add_adapter(struct device_driver *d, void *data)
344 {
345         struct i2c_driver *driver = to_i2c_driver(d);
346         struct i2c_adapter *adap = data;
347
348         if (driver->attach_adapter) {
349                 /* We ignore the return code; if it fails, too bad */
350                 driver->attach_adapter(adap);
351         }
352         return 0;
353 }
354
355 static int i2c_register_adapter(struct i2c_adapter *adap)
356 {
357         int res = 0, dummy;
358
359         mutex_init(&adap->bus_lock);
360         mutex_init(&adap->clist_lock);
361         INIT_LIST_HEAD(&adap->clients);
362
363         mutex_lock(&core_lock);
364
365         /* Add the adapter to the driver core.
366          * If the parent pointer is not set up,
367          * we add this adapter to the host bus.
368          */
369         if (adap->dev.parent == NULL) {
370                 adap->dev.parent = &platform_bus;
371                 pr_debug("I2C adapter driver [%s] forgot to specify "
372                          "physical device\n", adap->name);
373         }
374         sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
375         adap->dev.release = &i2c_adapter_dev_release;
376         adap->dev.class = &i2c_adapter_class;
377         res = device_register(&adap->dev);
378         if (res)
379                 goto out_list;
380
381         dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
382
383         /* create pre-declared device nodes for new-style drivers */
384         if (adap->nr < __i2c_first_dynamic_bus_num)
385                 i2c_scan_static_board_info(adap);
386
387         /* let legacy drivers scan this bus for matching devices */
388         dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap,
389                                  i2c_do_add_adapter);
390
391 out_unlock:
392         mutex_unlock(&core_lock);
393         return res;
394
395 out_list:
396         idr_remove(&i2c_adapter_idr, adap->nr);
397         goto out_unlock;
398 }
399
400 /**
401  * i2c_add_adapter - declare i2c adapter, use dynamic bus number
402  * @adapter: the adapter to add
403  * Context: can sleep
404  *
405  * This routine is used to declare an I2C adapter when its bus number
406  * doesn't matter.  Examples: for I2C adapters dynamically added by
407  * USB links or PCI plugin cards.
408  *
409  * When this returns zero, a new bus number was allocated and stored
410  * in adap->nr, and the specified adapter became available for clients.
411  * Otherwise, a negative errno value is returned.
412  */
413 int i2c_add_adapter(struct i2c_adapter *adapter)
414 {
415         int     id, res = 0;
416
417 retry:
418         if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
419                 return -ENOMEM;
420
421         mutex_lock(&core_lock);
422         /* "above" here means "above or equal to", sigh */
423         res = idr_get_new_above(&i2c_adapter_idr, adapter,
424                                 __i2c_first_dynamic_bus_num, &id);
425         mutex_unlock(&core_lock);
426
427         if (res < 0) {
428                 if (res == -EAGAIN)
429                         goto retry;
430                 return res;
431         }
432
433         adapter->nr = id;
434         return i2c_register_adapter(adapter);
435 }
436 EXPORT_SYMBOL(i2c_add_adapter);
437
438 /**
439  * i2c_add_numbered_adapter - declare i2c adapter, use static bus number
440  * @adap: the adapter to register (with adap->nr initialized)
441  * Context: can sleep
442  *
443  * This routine is used to declare an I2C adapter when its bus number
444  * matters.  Example: for I2C adapters from system-on-chip CPUs, or
445  * otherwise built in to the system's mainboard, and where i2c_board_info
446  * is used to properly configure I2C devices.
447  *
448  * If no devices have pre-been declared for this bus, then be sure to
449  * register the adapter before any dynamically allocated ones.  Otherwise
450  * the required bus ID may not be available.
451  *
452  * When this returns zero, the specified adapter became available for
453  * clients using the bus number provided in adap->nr.  Also, the table
454  * of I2C devices pre-declared using i2c_register_board_info() is scanned,
455  * and the appropriate driver model device nodes are created.  Otherwise, a
456  * negative errno value is returned.
457  */
458 int i2c_add_numbered_adapter(struct i2c_adapter *adap)
459 {
460         int     id;
461         int     status;
462
463         if (adap->nr & ~MAX_ID_MASK)
464                 return -EINVAL;
465
466 retry:
467         if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
468                 return -ENOMEM;
469
470         mutex_lock(&core_lock);
471         /* "above" here means "above or equal to", sigh;
472          * we need the "equal to" result to force the result
473          */
474         status = idr_get_new_above(&i2c_adapter_idr, adap, adap->nr, &id);
475         if (status == 0 && id != adap->nr) {
476                 status = -EBUSY;
477                 idr_remove(&i2c_adapter_idr, id);
478         }
479         mutex_unlock(&core_lock);
480         if (status == -EAGAIN)
481                 goto retry;
482
483         if (status == 0)
484                 status = i2c_register_adapter(adap);
485         return status;
486 }
487 EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
488
489 static int i2c_do_del_adapter(struct device_driver *d, void *data)
490 {
491         struct i2c_driver *driver = to_i2c_driver(d);
492         struct i2c_adapter *adapter = data;
493         int res;
494
495         if (!driver->detach_adapter)
496                 return 0;
497         res = driver->detach_adapter(adapter);
498         if (res)
499                 dev_err(&adapter->dev, "detach_adapter failed (%d) "
500                         "for driver [%s]\n", res, driver->driver.name);
501         return res;
502 }
503
504 /**
505  * i2c_del_adapter - unregister I2C adapter
506  * @adap: the adapter being unregistered
507  * Context: can sleep
508  *
509  * This unregisters an I2C adapter which was previously registered
510  * by @i2c_add_adapter or @i2c_add_numbered_adapter.
511  */
512 int i2c_del_adapter(struct i2c_adapter *adap)
513 {
514         struct list_head  *item, *_n;
515         struct i2c_client *client;
516         int res = 0;
517
518         mutex_lock(&core_lock);
519
520         /* First make sure that this adapter was ever added */
521         if (idr_find(&i2c_adapter_idr, adap->nr) != adap) {
522                 pr_debug("i2c-core: attempting to delete unregistered "
523                          "adapter [%s]\n", adap->name);
524                 res = -EINVAL;
525                 goto out_unlock;
526         }
527
528         /* Tell drivers about this removal */
529         res = bus_for_each_drv(&i2c_bus_type, NULL, adap,
530                                i2c_do_del_adapter);
531         if (res)
532                 goto out_unlock;
533
534         /* detach any active clients. This must be done first, because
535          * it can fail; in which case we give up. */
536         list_for_each_safe(item, _n, &adap->clients) {
537                 struct i2c_driver       *driver;
538
539                 client = list_entry(item, struct i2c_client, list);
540                 driver = client->driver;
541
542                 /* new style, follow standard driver model */
543                 if (!driver || is_newstyle_driver(driver)) {
544                         i2c_unregister_device(client);
545                         continue;
546                 }
547
548                 /* legacy drivers create and remove clients themselves */
549                 if ((res = driver->detach_client(client))) {
550                         dev_err(&adap->dev, "detach_client failed for client "
551                                 "[%s] at address 0x%02x\n", client->name,
552                                 client->addr);
553                         goto out_unlock;
554                 }
555         }
556
557         /* clean up the sysfs representation */
558         init_completion(&adap->dev_released);
559         device_unregister(&adap->dev);
560
561         /* wait for sysfs to drop all references */
562         wait_for_completion(&adap->dev_released);
563
564         /* free bus id */
565         idr_remove(&i2c_adapter_idr, adap->nr);
566
567         dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
568
569  out_unlock:
570         mutex_unlock(&core_lock);
571         return res;
572 }
573 EXPORT_SYMBOL(i2c_del_adapter);
574
575
576 /* ------------------------------------------------------------------------- */
577
578 /*
579  * An i2c_driver is used with one or more i2c_client (device) nodes to access
580  * i2c slave chips, on a bus instance associated with some i2c_adapter.  There
581  * are two models for binding the driver to its device:  "new style" drivers
582  * follow the standard Linux driver model and just respond to probe() calls
583  * issued if the driver core sees they match(); "legacy" drivers create device
584  * nodes themselves.
585  */
586
587 int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
588 {
589         int res;
590
591         /* new style driver methods can't mix with legacy ones */
592         if (is_newstyle_driver(driver)) {
593                 if (driver->attach_adapter || driver->detach_adapter
594                                 || driver->detach_client) {
595                         printk(KERN_WARNING
596                                         "i2c-core: driver [%s] is confused\n",
597                                         driver->driver.name);
598                         return -EINVAL;
599                 }
600         }
601
602         /* add the driver to the list of i2c drivers in the driver core */
603         driver->driver.owner = owner;
604         driver->driver.bus = &i2c_bus_type;
605
606         /* for new style drivers, when registration returns the driver core
607          * will have called probe() for all matching-but-unbound devices.
608          */
609         res = driver_register(&driver->driver);
610         if (res)
611                 return res;
612
613         mutex_lock(&core_lock);
614
615         pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
616
617         /* legacy drivers scan i2c busses directly */
618         if (driver->attach_adapter) {
619                 struct i2c_adapter *adapter;
620
621                 down(&i2c_adapter_class.sem);
622                 list_for_each_entry(adapter, &i2c_adapter_class.devices,
623                                     dev.node) {
624                         driver->attach_adapter(adapter);
625                 }
626                 up(&i2c_adapter_class.sem);
627         }
628
629         mutex_unlock(&core_lock);
630         return 0;
631 }
632 EXPORT_SYMBOL(i2c_register_driver);
633
634 /**
635  * i2c_del_driver - unregister I2C driver
636  * @driver: the driver being unregistered
637  * Context: can sleep
638  */
639 void i2c_del_driver(struct i2c_driver *driver)
640 {
641         struct list_head   *item2, *_n;
642         struct i2c_client  *client;
643         struct i2c_adapter *adap;
644
645         mutex_lock(&core_lock);
646
647         /* new-style driver? */
648         if (is_newstyle_driver(driver))
649                 goto unregister;
650
651         /* Have a look at each adapter, if clients of this driver are still
652          * attached. If so, detach them to be able to kill the driver
653          * afterwards.
654          */
655         down(&i2c_adapter_class.sem);
656         list_for_each_entry(adap, &i2c_adapter_class.devices, dev.node) {
657                 if (driver->detach_adapter) {
658                         if (driver->detach_adapter(adap)) {
659                                 dev_err(&adap->dev, "detach_adapter failed "
660                                         "for driver [%s]\n",
661                                         driver->driver.name);
662                         }
663                 } else {
664                         list_for_each_safe(item2, _n, &adap->clients) {
665                                 client = list_entry(item2, struct i2c_client, list);
666                                 if (client->driver != driver)
667                                         continue;
668                                 dev_dbg(&adap->dev, "detaching client [%s] "
669                                         "at 0x%02x\n", client->name,
670                                         client->addr);
671                                 if (driver->detach_client(client)) {
672                                         dev_err(&adap->dev, "detach_client "
673                                                 "failed for client [%s] at "
674                                                 "0x%02x\n", client->name,
675                                                 client->addr);
676                                 }
677                         }
678                 }
679         }
680         up(&i2c_adapter_class.sem);
681
682  unregister:
683         driver_unregister(&driver->driver);
684         pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
685
686         mutex_unlock(&core_lock);
687 }
688 EXPORT_SYMBOL(i2c_del_driver);
689
690 /* ------------------------------------------------------------------------- */
691
692 static int __i2c_check_addr(struct device *dev, void *addrp)
693 {
694         struct i2c_client       *client = i2c_verify_client(dev);
695         int                     addr = *(int *)addrp;
696
697         if (client && client->addr == addr)
698                 return -EBUSY;
699         return 0;
700 }
701
702 static int i2c_check_addr(struct i2c_adapter *adapter, int addr)
703 {
704         return device_for_each_child(&adapter->dev, &addr, __i2c_check_addr);
705 }
706
707 int i2c_attach_client(struct i2c_client *client)
708 {
709         struct i2c_adapter *adapter = client->adapter;
710         int res = 0;
711
712         client->dev.parent = &client->adapter->dev;
713         client->dev.bus = &i2c_bus_type;
714
715         if (client->driver)
716                 client->dev.driver = &client->driver->driver;
717
718         if (client->driver && !is_newstyle_driver(client->driver)) {
719                 client->dev.release = i2c_client_release;
720                 client->dev.uevent_suppress = 1;
721         } else
722                 client->dev.release = i2c_client_dev_release;
723
724         snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
725                 "%d-%04x", i2c_adapter_id(adapter), client->addr);
726         res = device_register(&client->dev);
727         if (res)
728                 goto out_err;
729
730         mutex_lock(&adapter->clist_lock);
731         list_add_tail(&client->list, &adapter->clients);
732         mutex_unlock(&adapter->clist_lock);
733
734         dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
735                 client->name, client->dev.bus_id);
736
737         if (adapter->client_register)  {
738                 if (adapter->client_register(client)) {
739                         dev_dbg(&adapter->dev, "client_register "
740                                 "failed for client [%s] at 0x%02x\n",
741                                 client->name, client->addr);
742                 }
743         }
744
745         return 0;
746
747 out_err:
748         dev_err(&adapter->dev, "Failed to attach i2c client %s at 0x%02x "
749                 "(%d)\n", client->name, client->addr, res);
750         return res;
751 }
752 EXPORT_SYMBOL(i2c_attach_client);
753
754 int i2c_detach_client(struct i2c_client *client)
755 {
756         struct i2c_adapter *adapter = client->adapter;
757         int res = 0;
758
759         if (adapter->client_unregister)  {
760                 res = adapter->client_unregister(client);
761                 if (res) {
762                         dev_err(&client->dev,
763                                 "client_unregister [%s] failed, "
764                                 "client not detached\n", client->name);
765                         goto out;
766                 }
767         }
768
769         mutex_lock(&adapter->clist_lock);
770         list_del(&client->list);
771         init_completion(&client->released);
772         device_unregister(&client->dev);
773         mutex_unlock(&adapter->clist_lock);
774         wait_for_completion(&client->released);
775
776  out:
777         return res;
778 }
779 EXPORT_SYMBOL(i2c_detach_client);
780
781 /**
782  * i2c_use_client - increments the reference count of the i2c client structure
783  * @client: the client being referenced
784  *
785  * Each live reference to a client should be refcounted. The driver model does
786  * that automatically as part of driver binding, so that most drivers don't
787  * need to do this explicitly: they hold a reference until they're unbound
788  * from the device.
789  *
790  * A pointer to the client with the incremented reference counter is returned.
791  */
792 struct i2c_client *i2c_use_client(struct i2c_client *client)
793 {
794         get_device(&client->dev);
795         return client;
796 }
797 EXPORT_SYMBOL(i2c_use_client);
798
799 /**
800  * i2c_release_client - release a use of the i2c client structure
801  * @client: the client being no longer referenced
802  *
803  * Must be called when a user of a client is finished with it.
804  */
805 void i2c_release_client(struct i2c_client *client)
806 {
807         put_device(&client->dev);
808 }
809 EXPORT_SYMBOL(i2c_release_client);
810
811 struct i2c_cmd_arg {
812         unsigned        cmd;
813         void            *arg;
814 };
815
816 static int i2c_cmd(struct device *dev, void *_arg)
817 {
818         struct i2c_client       *client = i2c_verify_client(dev);
819         struct i2c_cmd_arg      *arg = _arg;
820
821         if (client && client->driver && client->driver->command)
822                 client->driver->command(client, arg->cmd, arg->arg);
823         return 0;
824 }
825
826 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
827 {
828         struct i2c_cmd_arg      cmd_arg;
829
830         cmd_arg.cmd = cmd;
831         cmd_arg.arg = arg;
832         device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
833 }
834 EXPORT_SYMBOL(i2c_clients_command);
835
836 static int __init i2c_init(void)
837 {
838         int retval;
839
840         retval = bus_register(&i2c_bus_type);
841         if (retval)
842                 return retval;
843         return class_register(&i2c_adapter_class);
844 }
845
846 static void __exit i2c_exit(void)
847 {
848         class_unregister(&i2c_adapter_class);
849         bus_unregister(&i2c_bus_type);
850 }
851
852 subsys_initcall(i2c_init);
853 module_exit(i2c_exit);
854
855 /* ----------------------------------------------------
856  * the functional interface to the i2c busses.
857  * ----------------------------------------------------
858  */
859
860 int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
861 {
862         int ret;
863
864         if (adap->algo->master_xfer) {
865 #ifdef DEBUG
866                 for (ret = 0; ret < num; ret++) {
867                         dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
868                                 "len=%d%s\n", ret, (msgs[ret].flags & I2C_M_RD)
869                                 ? 'R' : 'W', msgs[ret].addr, msgs[ret].len,
870                                 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
871                 }
872 #endif
873
874                 if (in_atomic() || irqs_disabled()) {
875                         ret = mutex_trylock(&adap->bus_lock);
876                         if (!ret)
877                                 /* I2C activity is ongoing. */
878                                 return -EAGAIN;
879                 } else {
880                         mutex_lock_nested(&adap->bus_lock, adap->level);
881                 }
882
883                 ret = adap->algo->master_xfer(adap,msgs,num);
884                 mutex_unlock(&adap->bus_lock);
885
886                 return ret;
887         } else {
888                 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
889                 return -ENOSYS;
890         }
891 }
892 EXPORT_SYMBOL(i2c_transfer);
893
894 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
895 {
896         int ret;
897         struct i2c_adapter *adap=client->adapter;
898         struct i2c_msg msg;
899
900         msg.addr = client->addr;
901         msg.flags = client->flags & I2C_M_TEN;
902         msg.len = count;
903         msg.buf = (char *)buf;
904
905         ret = i2c_transfer(adap, &msg, 1);
906
907         /* If everything went ok (i.e. 1 msg transmitted), return #bytes
908            transmitted, else error code. */
909         return (ret == 1) ? count : ret;
910 }
911 EXPORT_SYMBOL(i2c_master_send);
912
913 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
914 {
915         struct i2c_adapter *adap=client->adapter;
916         struct i2c_msg msg;
917         int ret;
918
919         msg.addr = client->addr;
920         msg.flags = client->flags & I2C_M_TEN;
921         msg.flags |= I2C_M_RD;
922         msg.len = count;
923         msg.buf = buf;
924
925         ret = i2c_transfer(adap, &msg, 1);
926
927         /* If everything went ok (i.e. 1 msg transmitted), return #bytes
928            transmitted, else error code. */
929         return (ret == 1) ? count : ret;
930 }
931 EXPORT_SYMBOL(i2c_master_recv);
932
933 /* ----------------------------------------------------
934  * the i2c address scanning function
935  * Will not work for 10-bit addresses!
936  * ----------------------------------------------------
937  */
938 static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind,
939                              int (*found_proc) (struct i2c_adapter *, int, int))
940 {
941         int err;
942
943         /* Make sure the address is valid */
944         if (addr < 0x03 || addr > 0x77) {
945                 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
946                          addr);
947                 return -EINVAL;
948         }
949
950         /* Skip if already in use */
951         if (i2c_check_addr(adapter, addr))
952                 return 0;
953
954         /* Make sure there is something at this address, unless forced */
955         if (kind < 0) {
956                 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0,
957                                    I2C_SMBUS_QUICK, NULL) < 0)
958                         return 0;
959
960                 /* prevent 24RF08 corruption */
961                 if ((addr & ~0x0f) == 0x50)
962                         i2c_smbus_xfer(adapter, addr, 0, 0, 0,
963                                        I2C_SMBUS_QUICK, NULL);
964         }
965
966         /* Finally call the custom detection function */
967         err = found_proc(adapter, addr, kind);
968         /* -ENODEV can be returned if there is a chip at the given address
969            but it isn't supported by this chip driver. We catch it here as
970            this isn't an error. */
971         if (err == -ENODEV)
972                 err = 0;
973
974         if (err)
975                 dev_warn(&adapter->dev, "Client creation failed at 0x%x (%d)\n",
976                          addr, err);
977         return err;
978 }
979
980 int i2c_probe(struct i2c_adapter *adapter,
981               const struct i2c_client_address_data *address_data,
982               int (*found_proc) (struct i2c_adapter *, int, int))
983 {
984         int i, err;
985         int adap_id = i2c_adapter_id(adapter);
986
987         /* Force entries are done first, and are not affected by ignore
988            entries */
989         if (address_data->forces) {
990                 const unsigned short * const *forces = address_data->forces;
991                 int kind;
992
993                 for (kind = 0; forces[kind]; kind++) {
994                         for (i = 0; forces[kind][i] != I2C_CLIENT_END;
995                              i += 2) {
996                                 if (forces[kind][i] == adap_id
997                                  || forces[kind][i] == ANY_I2C_BUS) {
998                                         dev_dbg(&adapter->dev, "found force "
999                                                 "parameter for adapter %d, "
1000                                                 "addr 0x%02x, kind %d\n",
1001                                                 adap_id, forces[kind][i + 1],
1002                                                 kind);
1003                                         err = i2c_probe_address(adapter,
1004                                                 forces[kind][i + 1],
1005                                                 kind, found_proc);
1006                                         if (err)
1007                                                 return err;
1008                                 }
1009                         }
1010                 }
1011         }
1012
1013         /* Stop here if we can't use SMBUS_QUICK */
1014         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
1015                 if (address_data->probe[0] == I2C_CLIENT_END
1016                  && address_data->normal_i2c[0] == I2C_CLIENT_END)
1017                         return 0;
1018
1019                 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
1020                          "can't probe for chips\n");
1021                 return -1;
1022         }
1023
1024         /* Probe entries are done second, and are not affected by ignore
1025            entries either */
1026         for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {
1027                 if (address_data->probe[i] == adap_id
1028                  || address_data->probe[i] == ANY_I2C_BUS) {
1029                         dev_dbg(&adapter->dev, "found probe parameter for "
1030                                 "adapter %d, addr 0x%02x\n", adap_id,
1031                                 address_data->probe[i + 1]);
1032                         err = i2c_probe_address(adapter,
1033                                                 address_data->probe[i + 1],
1034                                                 -1, found_proc);
1035                         if (err)
1036                                 return err;
1037                 }
1038         }
1039
1040         /* Normal entries are done last, unless shadowed by an ignore entry */
1041         for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) {
1042                 int j, ignore;
1043
1044                 ignore = 0;
1045                 for (j = 0; address_data->ignore[j] != I2C_CLIENT_END;
1046                      j += 2) {
1047                         if ((address_data->ignore[j] == adap_id ||
1048                              address_data->ignore[j] == ANY_I2C_BUS)
1049                          && address_data->ignore[j + 1]
1050                             == address_data->normal_i2c[i]) {
1051                                 dev_dbg(&adapter->dev, "found ignore "
1052                                         "parameter for adapter %d, "
1053                                         "addr 0x%02x\n", adap_id,
1054                                         address_data->ignore[j + 1]);
1055                                 ignore = 1;
1056                                 break;
1057                         }
1058                 }
1059                 if (ignore)
1060                         continue;
1061
1062                 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
1063                         "addr 0x%02x\n", adap_id,
1064                         address_data->normal_i2c[i]);
1065                 err = i2c_probe_address(adapter, address_data->normal_i2c[i],
1066                                         -1, found_proc);
1067                 if (err)
1068                         return err;
1069         }
1070
1071         return 0;
1072 }
1073 EXPORT_SYMBOL(i2c_probe);
1074
1075 struct i2c_client *
1076 i2c_new_probed_device(struct i2c_adapter *adap,
1077                       struct i2c_board_info *info,
1078                       unsigned short const *addr_list)
1079 {
1080         int i;
1081
1082         /* Stop here if the bus doesn't support probing */
1083         if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) {
1084                 dev_err(&adap->dev, "Probing not supported\n");
1085                 return NULL;
1086         }
1087
1088         mutex_lock(&adap->clist_lock);
1089         for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
1090                 /* Check address validity */
1091                 if (addr_list[i] < 0x03 || addr_list[i] > 0x77) {
1092                         dev_warn(&adap->dev, "Invalid 7-bit address "
1093                                  "0x%02x\n", addr_list[i]);
1094                         continue;
1095                 }
1096
1097                 /* Check address availability */
1098                 if (i2c_check_addr(adap, addr_list[i])) {
1099                         dev_dbg(&adap->dev, "Address 0x%02x already in "
1100                                 "use, not probing\n", addr_list[i]);
1101                         continue;
1102                 }
1103
1104                 /* Test address responsiveness
1105                    The default probe method is a quick write, but it is known
1106                    to corrupt the 24RF08 EEPROMs due to a state machine bug,
1107                    and could also irreversibly write-protect some EEPROMs, so
1108                    for address ranges 0x30-0x37 and 0x50-0x5f, we use a byte
1109                    read instead. Also, some bus drivers don't implement
1110                    quick write, so we fallback to a byte read it that case
1111                    too. */
1112                 if ((addr_list[i] & ~0x07) == 0x30
1113                  || (addr_list[i] & ~0x0f) == 0x50
1114                  || !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) {
1115                         if (i2c_smbus_xfer(adap, addr_list[i], 0,
1116                                            I2C_SMBUS_READ, 0,
1117                                            I2C_SMBUS_BYTE, NULL) >= 0)
1118                                 break;
1119                 } else {
1120                         if (i2c_smbus_xfer(adap, addr_list[i], 0,
1121                                            I2C_SMBUS_WRITE, 0,
1122                                            I2C_SMBUS_QUICK, NULL) >= 0)
1123                                 break;
1124                 }
1125         }
1126         mutex_unlock(&adap->clist_lock);
1127
1128         if (addr_list[i] == I2C_CLIENT_END) {
1129                 dev_dbg(&adap->dev, "Probing failed, no device found\n");
1130                 return NULL;
1131         }
1132
1133         info->addr = addr_list[i];
1134         return i2c_new_device(adap, info);
1135 }
1136 EXPORT_SYMBOL_GPL(i2c_new_probed_device);
1137
1138 struct i2c_adapter* i2c_get_adapter(int id)
1139 {
1140         struct i2c_adapter *adapter;
1141
1142         mutex_lock(&core_lock);
1143         adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
1144         if (adapter && !try_module_get(adapter->owner))
1145                 adapter = NULL;
1146
1147         mutex_unlock(&core_lock);
1148         return adapter;
1149 }
1150 EXPORT_SYMBOL(i2c_get_adapter);
1151
1152 void i2c_put_adapter(struct i2c_adapter *adap)
1153 {
1154         module_put(adap->owner);
1155 }
1156 EXPORT_SYMBOL(i2c_put_adapter);
1157
1158 /* The SMBus parts */
1159
1160 #define POLY    (0x1070U << 3)
1161 static u8
1162 crc8(u16 data)
1163 {
1164         int i;
1165
1166         for(i = 0; i < 8; i++) {
1167                 if (data & 0x8000)
1168                         data = data ^ POLY;
1169                 data = data << 1;
1170         }
1171         return (u8)(data >> 8);
1172 }
1173
1174 /* Incremental CRC8 over count bytes in the array pointed to by p */
1175 static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
1176 {
1177         int i;
1178
1179         for(i = 0; i < count; i++)
1180                 crc = crc8((crc ^ p[i]) << 8);
1181         return crc;
1182 }
1183
1184 /* Assume a 7-bit address, which is reasonable for SMBus */
1185 static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
1186 {
1187         /* The address will be sent first */
1188         u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
1189         pec = i2c_smbus_pec(pec, &addr, 1);
1190
1191         /* The data buffer follows */
1192         return i2c_smbus_pec(pec, msg->buf, msg->len);
1193 }
1194
1195 /* Used for write only transactions */
1196 static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
1197 {
1198         msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
1199         msg->len++;
1200 }
1201
1202 /* Return <0 on CRC error
1203    If there was a write before this read (most cases) we need to take the
1204    partial CRC from the write part into account.
1205    Note that this function does modify the message (we need to decrease the
1206    message length to hide the CRC byte from the caller). */
1207 static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
1208 {
1209         u8 rpec = msg->buf[--msg->len];
1210         cpec = i2c_smbus_msg_pec(cpec, msg);
1211
1212         if (rpec != cpec) {
1213                 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
1214                         rpec, cpec);
1215                 return -1;
1216         }
1217         return 0;
1218 }
1219
1220 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
1221 {
1222         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1223                               value,0,I2C_SMBUS_QUICK,NULL);
1224 }
1225 EXPORT_SYMBOL(i2c_smbus_write_quick);
1226
1227 s32 i2c_smbus_read_byte(struct i2c_client *client)
1228 {
1229         union i2c_smbus_data data;
1230         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1231                            I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
1232                 return -1;
1233         else
1234                 return data.byte;
1235 }
1236 EXPORT_SYMBOL(i2c_smbus_read_byte);
1237
1238 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
1239 {
1240         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1241                               I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
1242 }
1243 EXPORT_SYMBOL(i2c_smbus_write_byte);
1244
1245 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
1246 {
1247         union i2c_smbus_data data;
1248         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1249                            I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
1250                 return -1;
1251         else
1252                 return data.byte;
1253 }
1254 EXPORT_SYMBOL(i2c_smbus_read_byte_data);
1255
1256 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
1257 {
1258         union i2c_smbus_data data;
1259         data.byte = value;
1260         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1261                               I2C_SMBUS_WRITE,command,
1262                               I2C_SMBUS_BYTE_DATA,&data);
1263 }
1264 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
1265
1266 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
1267 {
1268         union i2c_smbus_data data;
1269         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1270                            I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
1271                 return -1;
1272         else
1273                 return data.word;
1274 }
1275 EXPORT_SYMBOL(i2c_smbus_read_word_data);
1276
1277 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
1278 {
1279         union i2c_smbus_data data;
1280         data.word = value;
1281         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1282                               I2C_SMBUS_WRITE,command,
1283                               I2C_SMBUS_WORD_DATA,&data);
1284 }
1285 EXPORT_SYMBOL(i2c_smbus_write_word_data);
1286
1287 /**
1288  * i2c_smbus_read_block_data - SMBus block read request
1289  * @client: Handle to slave device
1290  * @command: Command byte issued to let the slave know what data should
1291  *      be returned
1292  * @values: Byte array into which data will be read; big enough to hold
1293  *      the data returned by the slave.  SMBus allows at most 32 bytes.
1294  *
1295  * Returns the number of bytes read in the slave's response, else a
1296  * negative number to indicate some kind of error.
1297  *
1298  * Note that using this function requires that the client's adapter support
1299  * the I2C_FUNC_SMBUS_READ_BLOCK_DATA functionality.  Not all adapter drivers
1300  * support this; its emulation through I2C messaging relies on a specific
1301  * mechanism (I2C_M_RECV_LEN) which may not be implemented.
1302  */
1303 s32 i2c_smbus_read_block_data(struct i2c_client *client, u8 command,
1304                               u8 *values)
1305 {
1306         union i2c_smbus_data data;
1307
1308         if (i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1309                            I2C_SMBUS_READ, command,
1310                            I2C_SMBUS_BLOCK_DATA, &data))
1311                 return -1;
1312
1313         memcpy(values, &data.block[1], data.block[0]);
1314         return data.block[0];
1315 }
1316 EXPORT_SYMBOL(i2c_smbus_read_block_data);
1317
1318 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
1319                                u8 length, const u8 *values)
1320 {
1321         union i2c_smbus_data data;
1322
1323         if (length > I2C_SMBUS_BLOCK_MAX)
1324                 length = I2C_SMBUS_BLOCK_MAX;
1325         data.block[0] = length;
1326         memcpy(&data.block[1], values, length);
1327         return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1328                               I2C_SMBUS_WRITE,command,
1329                               I2C_SMBUS_BLOCK_DATA,&data);
1330 }
1331 EXPORT_SYMBOL(i2c_smbus_write_block_data);
1332
1333 /* Returns the number of read bytes */
1334 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command,
1335                                   u8 length, u8 *values)
1336 {
1337         union i2c_smbus_data data;
1338
1339         if (length > I2C_SMBUS_BLOCK_MAX)
1340                 length = I2C_SMBUS_BLOCK_MAX;
1341         data.block[0] = length;
1342         if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
1343                               I2C_SMBUS_READ,command,
1344                               I2C_SMBUS_I2C_BLOCK_DATA,&data))
1345                 return -1;
1346
1347         memcpy(values, &data.block[1], data.block[0]);
1348         return data.block[0];
1349 }
1350 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
1351
1352 s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
1353                                    u8 length, const u8 *values)
1354 {
1355         union i2c_smbus_data data;
1356
1357         if (length > I2C_SMBUS_BLOCK_MAX)
1358                 length = I2C_SMBUS_BLOCK_MAX;
1359         data.block[0] = length;
1360         memcpy(data.block + 1, values, length);
1361         return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
1362                               I2C_SMBUS_WRITE, command,
1363                               I2C_SMBUS_I2C_BLOCK_DATA, &data);
1364 }
1365 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
1366
1367 /* Simulate a SMBus command using the i2c protocol
1368    No checking of parameters is done!  */
1369 static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1370                                    unsigned short flags,
1371                                    char read_write, u8 command, int size,
1372                                    union i2c_smbus_data * data)
1373 {
1374         /* So we need to generate a series of msgs. In the case of writing, we
1375           need to use only one message; when reading, we need two. We initialize
1376           most things with sane defaults, to keep the code below somewhat
1377           simpler. */
1378         unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1379         unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
1380         int num = read_write == I2C_SMBUS_READ?2:1;
1381         struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1382                                   { addr, flags | I2C_M_RD, 0, msgbuf1 }
1383                                 };
1384         int i;
1385         u8 partial_pec = 0;
1386
1387         msgbuf0[0] = command;
1388         switch(size) {
1389         case I2C_SMBUS_QUICK:
1390                 msg[0].len = 0;
1391                 /* Special case: The read/write field is used as data */
1392                 msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;
1393                 num = 1;
1394                 break;
1395         case I2C_SMBUS_BYTE:
1396                 if (read_write == I2C_SMBUS_READ) {
1397                         /* Special case: only a read! */
1398                         msg[0].flags = I2C_M_RD | flags;
1399                         num = 1;
1400                 }
1401                 break;
1402         case I2C_SMBUS_BYTE_DATA:
1403                 if (read_write == I2C_SMBUS_READ)
1404                         msg[1].len = 1;
1405                 else {
1406                         msg[0].len = 2;
1407                         msgbuf0[1] = data->byte;
1408                 }
1409                 break;
1410         case I2C_SMBUS_WORD_DATA:
1411                 if (read_write == I2C_SMBUS_READ)
1412                         msg[1].len = 2;
1413                 else {
1414                         msg[0].len=3;
1415                         msgbuf0[1] = data->word & 0xff;
1416                         msgbuf0[2] = data->word >> 8;
1417                 }
1418                 break;
1419         case I2C_SMBUS_PROC_CALL:
1420                 num = 2; /* Special case */
1421                 read_write = I2C_SMBUS_READ;
1422                 msg[0].len = 3;
1423                 msg[1].len = 2;
1424                 msgbuf0[1] = data->word & 0xff;
1425                 msgbuf0[2] = data->word >> 8;
1426                 break;
1427         case I2C_SMBUS_BLOCK_DATA:
1428                 if (read_write == I2C_SMBUS_READ) {
1429                         msg[1].flags |= I2C_M_RECV_LEN;
1430                         msg[1].len = 1; /* block length will be added by
1431                                            the underlying bus driver */
1432                 } else {
1433                         msg[0].len = data->block[0] + 2;
1434                         if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
1435                                 dev_err(&adapter->dev, "smbus_access called with "
1436                                        "invalid block write size (%d)\n",
1437                                        data->block[0]);
1438                                 return -1;
1439                         }
1440                         for (i = 1; i < msg[0].len; i++)
1441                                 msgbuf0[i] = data->block[i-1];
1442                 }
1443                 break;
1444         case I2C_SMBUS_BLOCK_PROC_CALL:
1445                 num = 2; /* Another special case */
1446                 read_write = I2C_SMBUS_READ;
1447                 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
1448                         dev_err(&adapter->dev, "%s called with invalid "
1449                                 "block proc call size (%d)\n", __FUNCTION__,
1450                                 data->block[0]);
1451                         return -1;
1452                 }
1453                 msg[0].len = data->block[0] + 2;
1454                 for (i = 1; i < msg[0].len; i++)
1455                         msgbuf0[i] = data->block[i-1];
1456                 msg[1].flags |= I2C_M_RECV_LEN;
1457                 msg[1].len = 1; /* block length will be added by
1458                                    the underlying bus driver */
1459                 break;
1460         case I2C_SMBUS_I2C_BLOCK_DATA:
1461                 if (read_write == I2C_SMBUS_READ) {
1462                         msg[1].len = data->block[0];
1463                 } else {
1464                         msg[0].len = data->block[0] + 1;
1465                         if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
1466                                 dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with "
1467                                        "invalid block write size (%d)\n",
1468                                        data->block[0]);
1469                                 return -1;
1470                         }
1471                         for (i = 1; i <= data->block[0]; i++)
1472                                 msgbuf0[i] = data->block[i];
1473                 }
1474                 break;
1475         default:
1476                 dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n",
1477                        size);
1478                 return -1;
1479         }
1480
1481         i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
1482                                       && size != I2C_SMBUS_I2C_BLOCK_DATA);
1483         if (i) {
1484                 /* Compute PEC if first message is a write */
1485                 if (!(msg[0].flags & I2C_M_RD)) {
1486                         if (num == 1) /* Write only */
1487                                 i2c_smbus_add_pec(&msg[0]);
1488                         else /* Write followed by read */
1489                                 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1490                 }
1491                 /* Ask for PEC if last message is a read */
1492                 if (msg[num-1].flags & I2C_M_RD)
1493                         msg[num-1].len++;
1494         }
1495
1496         if (i2c_transfer(adapter, msg, num) < 0)
1497                 return -1;
1498
1499         /* Check PEC if last message is a read */
1500         if (i && (msg[num-1].flags & I2C_M_RD)) {
1501                 if (i2c_smbus_check_pec(partial_pec, &msg[num-1]) < 0)
1502                         return -1;
1503         }
1504
1505         if (read_write == I2C_SMBUS_READ)
1506                 switch(size) {
1507                         case I2C_SMBUS_BYTE:
1508                                 data->byte = msgbuf0[0];
1509                                 break;
1510                         case I2C_SMBUS_BYTE_DATA:
1511                                 data->byte = msgbuf1[0];
1512                                 break;
1513                         case I2C_SMBUS_WORD_DATA:
1514                         case I2C_SMBUS_PROC_CALL:
1515                                 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1516                                 break;
1517                         case I2C_SMBUS_I2C_BLOCK_DATA:
1518                                 for (i = 0; i < data->block[0]; i++)
1519                                         data->block[i+1] = msgbuf1[i];
1520                                 break;
1521                         case I2C_SMBUS_BLOCK_DATA:
1522                         case I2C_SMBUS_BLOCK_PROC_CALL:
1523                                 for (i = 0; i < msgbuf1[0] + 1; i++)
1524                                         data->block[i] = msgbuf1[i];
1525                                 break;
1526                 }
1527         return 0;
1528 }
1529
1530
1531 s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1532                    char read_write, u8 command, int size,
1533                    union i2c_smbus_data * data)
1534 {
1535         s32 res;
1536
1537         flags &= I2C_M_TEN | I2C_CLIENT_PEC;
1538
1539         if (adapter->algo->smbus_xfer) {
1540                 mutex_lock(&adapter->bus_lock);
1541                 res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
1542                                                 command,size,data);
1543                 mutex_unlock(&adapter->bus_lock);
1544         } else
1545                 res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
1546                                               command,size,data);
1547
1548         return res;
1549 }
1550 EXPORT_SYMBOL(i2c_smbus_xfer);
1551
1552 MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
1553 MODULE_DESCRIPTION("I2C-Bus main module");
1554 MODULE_LICENSE("GPL");