xref: /openbmc/linux/drivers/i2c/i2c-dev.c (revision 12eb4683)
1 /*
2     i2c-dev.c - i2c-bus driver, char device interface
3 
4     Copyright (C) 1995-97 Simon G. Vogl
5     Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>
6     Copyright (C) 2003 Greg Kroah-Hartman <greg@kroah.com>
7 
8     This program is free software; you can redistribute it and/or modify
9     it under the terms of the GNU General Public License as published by
10     the Free Software Foundation; either version 2 of the License, or
11     (at your option) any later version.
12 
13     This program is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16     GNU General Public License for more details.
17 
18     You should have received a copy of the GNU General Public License
19     along with this program; if not, write to the Free Software
20     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21     MA 02110-1301 USA.
22 */
23 
24 /* Note that this is a complete rewrite of Simon Vogl's i2c-dev module.
25    But I have used so much of his original code and ideas that it seems
26    only fair to recognize him as co-author -- Frodo */
27 
28 /* The I2C_RDWR ioctl code is written by Kolja Waschk <waschk@telos.de> */
29 
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/device.h>
33 #include <linux/notifier.h>
34 #include <linux/fs.h>
35 #include <linux/slab.h>
36 #include <linux/init.h>
37 #include <linux/list.h>
38 #include <linux/i2c.h>
39 #include <linux/i2c-dev.h>
40 #include <linux/jiffies.h>
41 #include <linux/uaccess.h>
42 
43 /*
44  * An i2c_dev represents an i2c_adapter ... an I2C or SMBus master, not a
45  * slave (i2c_client) with which messages will be exchanged.  It's coupled
46  * with a character special file which is accessed by user mode drivers.
47  *
48  * The list of i2c_dev structures is parallel to the i2c_adapter lists
49  * maintained by the driver model, and is updated using bus notifications.
50  */
51 struct i2c_dev {
52 	struct list_head list;
53 	struct i2c_adapter *adap;
54 	struct device *dev;
55 };
56 
57 #define I2C_MINORS	256
58 static LIST_HEAD(i2c_dev_list);
59 static DEFINE_SPINLOCK(i2c_dev_list_lock);
60 
61 static struct i2c_dev *i2c_dev_get_by_minor(unsigned index)
62 {
63 	struct i2c_dev *i2c_dev;
64 
65 	spin_lock(&i2c_dev_list_lock);
66 	list_for_each_entry(i2c_dev, &i2c_dev_list, list) {
67 		if (i2c_dev->adap->nr == index)
68 			goto found;
69 	}
70 	i2c_dev = NULL;
71 found:
72 	spin_unlock(&i2c_dev_list_lock);
73 	return i2c_dev;
74 }
75 
76 static struct i2c_dev *get_free_i2c_dev(struct i2c_adapter *adap)
77 {
78 	struct i2c_dev *i2c_dev;
79 
80 	if (adap->nr >= I2C_MINORS) {
81 		printk(KERN_ERR "i2c-dev: Out of device minors (%d)\n",
82 		       adap->nr);
83 		return ERR_PTR(-ENODEV);
84 	}
85 
86 	i2c_dev = kzalloc(sizeof(*i2c_dev), GFP_KERNEL);
87 	if (!i2c_dev)
88 		return ERR_PTR(-ENOMEM);
89 	i2c_dev->adap = adap;
90 
91 	spin_lock(&i2c_dev_list_lock);
92 	list_add_tail(&i2c_dev->list, &i2c_dev_list);
93 	spin_unlock(&i2c_dev_list_lock);
94 	return i2c_dev;
95 }
96 
97 static void return_i2c_dev(struct i2c_dev *i2c_dev)
98 {
99 	spin_lock(&i2c_dev_list_lock);
100 	list_del(&i2c_dev->list);
101 	spin_unlock(&i2c_dev_list_lock);
102 	kfree(i2c_dev);
103 }
104 
105 static ssize_t name_show(struct device *dev,
106 			 struct device_attribute *attr, char *buf)
107 {
108 	struct i2c_dev *i2c_dev = i2c_dev_get_by_minor(MINOR(dev->devt));
109 
110 	if (!i2c_dev)
111 		return -ENODEV;
112 	return sprintf(buf, "%s\n", i2c_dev->adap->name);
113 }
114 static DEVICE_ATTR_RO(name);
115 
116 static struct attribute *i2c_attrs[] = {
117 	&dev_attr_name.attr,
118 	NULL,
119 };
120 ATTRIBUTE_GROUPS(i2c);
121 
122 /* ------------------------------------------------------------------------- */
123 
124 /*
125  * After opening an instance of this character special file, a file
126  * descriptor starts out associated only with an i2c_adapter (and bus).
127  *
128  * Using the I2C_RDWR ioctl(), you can then *immediately* issue i2c_msg
129  * traffic to any devices on the bus used by that adapter.  That's because
130  * the i2c_msg vectors embed all the addressing information they need, and
131  * are submitted directly to an i2c_adapter.  However, SMBus-only adapters
132  * don't support that interface.
133  *
134  * To use read()/write() system calls on that file descriptor, or to use
135  * SMBus interfaces (and work with SMBus-only hosts!), you must first issue
136  * an I2C_SLAVE (or I2C_SLAVE_FORCE) ioctl.  That configures an anonymous
137  * (never registered) i2c_client so it holds the addressing information
138  * needed by those system calls and by this SMBus interface.
139  */
140 
141 static ssize_t i2cdev_read(struct file *file, char __user *buf, size_t count,
142 		loff_t *offset)
143 {
144 	char *tmp;
145 	int ret;
146 
147 	struct i2c_client *client = file->private_data;
148 
149 	if (count > 8192)
150 		count = 8192;
151 
152 	tmp = kmalloc(count, GFP_KERNEL);
153 	if (tmp == NULL)
154 		return -ENOMEM;
155 
156 	pr_debug("i2c-dev: i2c-%d reading %zu bytes.\n",
157 		iminor(file_inode(file)), count);
158 
159 	ret = i2c_master_recv(client, tmp, count);
160 	if (ret >= 0)
161 		ret = copy_to_user(buf, tmp, count) ? -EFAULT : ret;
162 	kfree(tmp);
163 	return ret;
164 }
165 
166 static ssize_t i2cdev_write(struct file *file, const char __user *buf,
167 		size_t count, loff_t *offset)
168 {
169 	int ret;
170 	char *tmp;
171 	struct i2c_client *client = file->private_data;
172 
173 	if (count > 8192)
174 		count = 8192;
175 
176 	tmp = memdup_user(buf, count);
177 	if (IS_ERR(tmp))
178 		return PTR_ERR(tmp);
179 
180 	pr_debug("i2c-dev: i2c-%d writing %zu bytes.\n",
181 		iminor(file_inode(file)), count);
182 
183 	ret = i2c_master_send(client, tmp, count);
184 	kfree(tmp);
185 	return ret;
186 }
187 
188 static int i2cdev_check(struct device *dev, void *addrp)
189 {
190 	struct i2c_client *client = i2c_verify_client(dev);
191 
192 	if (!client || client->addr != *(unsigned int *)addrp)
193 		return 0;
194 
195 	return dev->driver ? -EBUSY : 0;
196 }
197 
198 /* walk up mux tree */
199 static int i2cdev_check_mux_parents(struct i2c_adapter *adapter, int addr)
200 {
201 	struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
202 	int result;
203 
204 	result = device_for_each_child(&adapter->dev, &addr, i2cdev_check);
205 	if (!result && parent)
206 		result = i2cdev_check_mux_parents(parent, addr);
207 
208 	return result;
209 }
210 
211 /* recurse down mux tree */
212 static int i2cdev_check_mux_children(struct device *dev, void *addrp)
213 {
214 	int result;
215 
216 	if (dev->type == &i2c_adapter_type)
217 		result = device_for_each_child(dev, addrp,
218 						i2cdev_check_mux_children);
219 	else
220 		result = i2cdev_check(dev, addrp);
221 
222 	return result;
223 }
224 
225 /* This address checking function differs from the one in i2c-core
226    in that it considers an address with a registered device, but no
227    driver bound to it, as NOT busy. */
228 static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr)
229 {
230 	struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
231 	int result = 0;
232 
233 	if (parent)
234 		result = i2cdev_check_mux_parents(parent, addr);
235 
236 	if (!result)
237 		result = device_for_each_child(&adapter->dev, &addr,
238 						i2cdev_check_mux_children);
239 
240 	return result;
241 }
242 
243 static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client,
244 		unsigned long arg)
245 {
246 	struct i2c_rdwr_ioctl_data rdwr_arg;
247 	struct i2c_msg *rdwr_pa;
248 	u8 __user **data_ptrs;
249 	int i, res;
250 
251 	if (copy_from_user(&rdwr_arg,
252 			   (struct i2c_rdwr_ioctl_data __user *)arg,
253 			   sizeof(rdwr_arg)))
254 		return -EFAULT;
255 
256 	/* Put an arbitrary limit on the number of messages that can
257 	 * be sent at once */
258 	if (rdwr_arg.nmsgs > I2C_RDRW_IOCTL_MAX_MSGS)
259 		return -EINVAL;
260 
261 	rdwr_pa = memdup_user(rdwr_arg.msgs,
262 			      rdwr_arg.nmsgs * sizeof(struct i2c_msg));
263 	if (IS_ERR(rdwr_pa))
264 		return PTR_ERR(rdwr_pa);
265 
266 	data_ptrs = kmalloc(rdwr_arg.nmsgs * sizeof(u8 __user *), GFP_KERNEL);
267 	if (data_ptrs == NULL) {
268 		kfree(rdwr_pa);
269 		return -ENOMEM;
270 	}
271 
272 	res = 0;
273 	for (i = 0; i < rdwr_arg.nmsgs; i++) {
274 		/* Limit the size of the message to a sane amount */
275 		if (rdwr_pa[i].len > 8192) {
276 			res = -EINVAL;
277 			break;
278 		}
279 
280 		data_ptrs[i] = (u8 __user *)rdwr_pa[i].buf;
281 		rdwr_pa[i].buf = memdup_user(data_ptrs[i], rdwr_pa[i].len);
282 		if (IS_ERR(rdwr_pa[i].buf)) {
283 			res = PTR_ERR(rdwr_pa[i].buf);
284 			break;
285 		}
286 
287 		/*
288 		 * If the message length is received from the slave (similar
289 		 * to SMBus block read), we must ensure that the buffer will
290 		 * be large enough to cope with a message length of
291 		 * I2C_SMBUS_BLOCK_MAX as this is the maximum underlying bus
292 		 * drivers allow. The first byte in the buffer must be
293 		 * pre-filled with the number of extra bytes, which must be
294 		 * at least one to hold the message length, but can be
295 		 * greater (for example to account for a checksum byte at
296 		 * the end of the message.)
297 		 */
298 		if (rdwr_pa[i].flags & I2C_M_RECV_LEN) {
299 			if (!(rdwr_pa[i].flags & I2C_M_RD) ||
300 			    rdwr_pa[i].buf[0] < 1 ||
301 			    rdwr_pa[i].len < rdwr_pa[i].buf[0] +
302 					     I2C_SMBUS_BLOCK_MAX) {
303 				res = -EINVAL;
304 				break;
305 			}
306 
307 			rdwr_pa[i].len = rdwr_pa[i].buf[0];
308 		}
309 	}
310 	if (res < 0) {
311 		int j;
312 		for (j = 0; j < i; ++j)
313 			kfree(rdwr_pa[j].buf);
314 		kfree(data_ptrs);
315 		kfree(rdwr_pa);
316 		return res;
317 	}
318 
319 	res = i2c_transfer(client->adapter, rdwr_pa, rdwr_arg.nmsgs);
320 	while (i-- > 0) {
321 		if (res >= 0 && (rdwr_pa[i].flags & I2C_M_RD)) {
322 			if (copy_to_user(data_ptrs[i], rdwr_pa[i].buf,
323 					 rdwr_pa[i].len))
324 				res = -EFAULT;
325 		}
326 		kfree(rdwr_pa[i].buf);
327 	}
328 	kfree(data_ptrs);
329 	kfree(rdwr_pa);
330 	return res;
331 }
332 
333 static noinline int i2cdev_ioctl_smbus(struct i2c_client *client,
334 		unsigned long arg)
335 {
336 	struct i2c_smbus_ioctl_data data_arg;
337 	union i2c_smbus_data temp;
338 	int datasize, res;
339 
340 	if (copy_from_user(&data_arg,
341 			   (struct i2c_smbus_ioctl_data __user *) arg,
342 			   sizeof(struct i2c_smbus_ioctl_data)))
343 		return -EFAULT;
344 	if ((data_arg.size != I2C_SMBUS_BYTE) &&
345 	    (data_arg.size != I2C_SMBUS_QUICK) &&
346 	    (data_arg.size != I2C_SMBUS_BYTE_DATA) &&
347 	    (data_arg.size != I2C_SMBUS_WORD_DATA) &&
348 	    (data_arg.size != I2C_SMBUS_PROC_CALL) &&
349 	    (data_arg.size != I2C_SMBUS_BLOCK_DATA) &&
350 	    (data_arg.size != I2C_SMBUS_I2C_BLOCK_BROKEN) &&
351 	    (data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA) &&
352 	    (data_arg.size != I2C_SMBUS_BLOCK_PROC_CALL)) {
353 		dev_dbg(&client->adapter->dev,
354 			"size out of range (%x) in ioctl I2C_SMBUS.\n",
355 			data_arg.size);
356 		return -EINVAL;
357 	}
358 	/* Note that I2C_SMBUS_READ and I2C_SMBUS_WRITE are 0 and 1,
359 	   so the check is valid if size==I2C_SMBUS_QUICK too. */
360 	if ((data_arg.read_write != I2C_SMBUS_READ) &&
361 	    (data_arg.read_write != I2C_SMBUS_WRITE)) {
362 		dev_dbg(&client->adapter->dev,
363 			"read_write out of range (%x) in ioctl I2C_SMBUS.\n",
364 			data_arg.read_write);
365 		return -EINVAL;
366 	}
367 
368 	/* Note that command values are always valid! */
369 
370 	if ((data_arg.size == I2C_SMBUS_QUICK) ||
371 	    ((data_arg.size == I2C_SMBUS_BYTE) &&
372 	    (data_arg.read_write == I2C_SMBUS_WRITE)))
373 		/* These are special: we do not use data */
374 		return i2c_smbus_xfer(client->adapter, client->addr,
375 				      client->flags, data_arg.read_write,
376 				      data_arg.command, data_arg.size, NULL);
377 
378 	if (data_arg.data == NULL) {
379 		dev_dbg(&client->adapter->dev,
380 			"data is NULL pointer in ioctl I2C_SMBUS.\n");
381 		return -EINVAL;
382 	}
383 
384 	if ((data_arg.size == I2C_SMBUS_BYTE_DATA) ||
385 	    (data_arg.size == I2C_SMBUS_BYTE))
386 		datasize = sizeof(data_arg.data->byte);
387 	else if ((data_arg.size == I2C_SMBUS_WORD_DATA) ||
388 		 (data_arg.size == I2C_SMBUS_PROC_CALL))
389 		datasize = sizeof(data_arg.data->word);
390 	else /* size == smbus block, i2c block, or block proc. call */
391 		datasize = sizeof(data_arg.data->block);
392 
393 	if ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
394 	    (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
395 	    (data_arg.size == I2C_SMBUS_I2C_BLOCK_DATA) ||
396 	    (data_arg.read_write == I2C_SMBUS_WRITE)) {
397 		if (copy_from_user(&temp, data_arg.data, datasize))
398 			return -EFAULT;
399 	}
400 	if (data_arg.size == I2C_SMBUS_I2C_BLOCK_BROKEN) {
401 		/* Convert old I2C block commands to the new
402 		   convention. This preserves binary compatibility. */
403 		data_arg.size = I2C_SMBUS_I2C_BLOCK_DATA;
404 		if (data_arg.read_write == I2C_SMBUS_READ)
405 			temp.block[0] = I2C_SMBUS_BLOCK_MAX;
406 	}
407 	res = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
408 	      data_arg.read_write, data_arg.command, data_arg.size, &temp);
409 	if (!res && ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
410 		     (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
411 		     (data_arg.read_write == I2C_SMBUS_READ))) {
412 		if (copy_to_user(data_arg.data, &temp, datasize))
413 			return -EFAULT;
414 	}
415 	return res;
416 }
417 
418 static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
419 {
420 	struct i2c_client *client = file->private_data;
421 	unsigned long funcs;
422 
423 	dev_dbg(&client->adapter->dev, "ioctl, cmd=0x%02x, arg=0x%02lx\n",
424 		cmd, arg);
425 
426 	switch (cmd) {
427 	case I2C_SLAVE:
428 	case I2C_SLAVE_FORCE:
429 		/* NOTE:  devices set up to work with "new style" drivers
430 		 * can't use I2C_SLAVE, even when the device node is not
431 		 * bound to a driver.  Only I2C_SLAVE_FORCE will work.
432 		 *
433 		 * Setting the PEC flag here won't affect kernel drivers,
434 		 * which will be using the i2c_client node registered with
435 		 * the driver model core.  Likewise, when that client has
436 		 * the PEC flag already set, the i2c-dev driver won't see
437 		 * (or use) this setting.
438 		 */
439 		if ((arg > 0x3ff) ||
440 		    (((client->flags & I2C_M_TEN) == 0) && arg > 0x7f))
441 			return -EINVAL;
442 		if (cmd == I2C_SLAVE && i2cdev_check_addr(client->adapter, arg))
443 			return -EBUSY;
444 		/* REVISIT: address could become busy later */
445 		client->addr = arg;
446 		return 0;
447 	case I2C_TENBIT:
448 		if (arg)
449 			client->flags |= I2C_M_TEN;
450 		else
451 			client->flags &= ~I2C_M_TEN;
452 		return 0;
453 	case I2C_PEC:
454 		if (arg)
455 			client->flags |= I2C_CLIENT_PEC;
456 		else
457 			client->flags &= ~I2C_CLIENT_PEC;
458 		return 0;
459 	case I2C_FUNCS:
460 		funcs = i2c_get_functionality(client->adapter);
461 		return put_user(funcs, (unsigned long __user *)arg);
462 
463 	case I2C_RDWR:
464 		return i2cdev_ioctl_rdrw(client, arg);
465 
466 	case I2C_SMBUS:
467 		return i2cdev_ioctl_smbus(client, arg);
468 
469 	case I2C_RETRIES:
470 		client->adapter->retries = arg;
471 		break;
472 	case I2C_TIMEOUT:
473 		/* For historical reasons, user-space sets the timeout
474 		 * value in units of 10 ms.
475 		 */
476 		client->adapter->timeout = msecs_to_jiffies(arg * 10);
477 		break;
478 	default:
479 		/* NOTE:  returning a fault code here could cause trouble
480 		 * in buggy userspace code.  Some old kernel bugs returned
481 		 * zero in this case, and userspace code might accidentally
482 		 * have depended on that bug.
483 		 */
484 		return -ENOTTY;
485 	}
486 	return 0;
487 }
488 
489 static int i2cdev_open(struct inode *inode, struct file *file)
490 {
491 	unsigned int minor = iminor(inode);
492 	struct i2c_client *client;
493 	struct i2c_adapter *adap;
494 	struct i2c_dev *i2c_dev;
495 
496 	i2c_dev = i2c_dev_get_by_minor(minor);
497 	if (!i2c_dev)
498 		return -ENODEV;
499 
500 	adap = i2c_get_adapter(i2c_dev->adap->nr);
501 	if (!adap)
502 		return -ENODEV;
503 
504 	/* This creates an anonymous i2c_client, which may later be
505 	 * pointed to some address using I2C_SLAVE or I2C_SLAVE_FORCE.
506 	 *
507 	 * This client is ** NEVER REGISTERED ** with the driver model
508 	 * or I2C core code!!  It just holds private copies of addressing
509 	 * information and maybe a PEC flag.
510 	 */
511 	client = kzalloc(sizeof(*client), GFP_KERNEL);
512 	if (!client) {
513 		i2c_put_adapter(adap);
514 		return -ENOMEM;
515 	}
516 	snprintf(client->name, I2C_NAME_SIZE, "i2c-dev %d", adap->nr);
517 
518 	client->adapter = adap;
519 	file->private_data = client;
520 
521 	return 0;
522 }
523 
524 static int i2cdev_release(struct inode *inode, struct file *file)
525 {
526 	struct i2c_client *client = file->private_data;
527 
528 	i2c_put_adapter(client->adapter);
529 	kfree(client);
530 	file->private_data = NULL;
531 
532 	return 0;
533 }
534 
535 static const struct file_operations i2cdev_fops = {
536 	.owner		= THIS_MODULE,
537 	.llseek		= no_llseek,
538 	.read		= i2cdev_read,
539 	.write		= i2cdev_write,
540 	.unlocked_ioctl	= i2cdev_ioctl,
541 	.open		= i2cdev_open,
542 	.release	= i2cdev_release,
543 };
544 
545 /* ------------------------------------------------------------------------- */
546 
547 static struct class *i2c_dev_class;
548 
549 static int i2cdev_attach_adapter(struct device *dev, void *dummy)
550 {
551 	struct i2c_adapter *adap;
552 	struct i2c_dev *i2c_dev;
553 	int res;
554 
555 	if (dev->type != &i2c_adapter_type)
556 		return 0;
557 	adap = to_i2c_adapter(dev);
558 
559 	i2c_dev = get_free_i2c_dev(adap);
560 	if (IS_ERR(i2c_dev))
561 		return PTR_ERR(i2c_dev);
562 
563 	/* register this i2c device with the driver core */
564 	i2c_dev->dev = device_create(i2c_dev_class, &adap->dev,
565 				     MKDEV(I2C_MAJOR, adap->nr), NULL,
566 				     "i2c-%d", adap->nr);
567 	if (IS_ERR(i2c_dev->dev)) {
568 		res = PTR_ERR(i2c_dev->dev);
569 		goto error;
570 	}
571 
572 	pr_debug("i2c-dev: adapter [%s] registered as minor %d\n",
573 		 adap->name, adap->nr);
574 	return 0;
575 error:
576 	return_i2c_dev(i2c_dev);
577 	return res;
578 }
579 
580 static int i2cdev_detach_adapter(struct device *dev, void *dummy)
581 {
582 	struct i2c_adapter *adap;
583 	struct i2c_dev *i2c_dev;
584 
585 	if (dev->type != &i2c_adapter_type)
586 		return 0;
587 	adap = to_i2c_adapter(dev);
588 
589 	i2c_dev = i2c_dev_get_by_minor(adap->nr);
590 	if (!i2c_dev) /* attach_adapter must have failed */
591 		return 0;
592 
593 	return_i2c_dev(i2c_dev);
594 	device_destroy(i2c_dev_class, MKDEV(I2C_MAJOR, adap->nr));
595 
596 	pr_debug("i2c-dev: adapter [%s] unregistered\n", adap->name);
597 	return 0;
598 }
599 
600 static int i2cdev_notifier_call(struct notifier_block *nb, unsigned long action,
601 			 void *data)
602 {
603 	struct device *dev = data;
604 
605 	switch (action) {
606 	case BUS_NOTIFY_ADD_DEVICE:
607 		return i2cdev_attach_adapter(dev, NULL);
608 	case BUS_NOTIFY_DEL_DEVICE:
609 		return i2cdev_detach_adapter(dev, NULL);
610 	}
611 
612 	return 0;
613 }
614 
615 static struct notifier_block i2cdev_notifier = {
616 	.notifier_call = i2cdev_notifier_call,
617 };
618 
619 /* ------------------------------------------------------------------------- */
620 
621 /*
622  * module load/unload record keeping
623  */
624 
625 static int __init i2c_dev_init(void)
626 {
627 	int res;
628 
629 	printk(KERN_INFO "i2c /dev entries driver\n");
630 
631 	res = register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops);
632 	if (res)
633 		goto out;
634 
635 	i2c_dev_class = class_create(THIS_MODULE, "i2c-dev");
636 	if (IS_ERR(i2c_dev_class)) {
637 		res = PTR_ERR(i2c_dev_class);
638 		goto out_unreg_chrdev;
639 	}
640 	i2c_dev_class->dev_groups = i2c_groups;
641 
642 	/* Keep track of adapters which will be added or removed later */
643 	res = bus_register_notifier(&i2c_bus_type, &i2cdev_notifier);
644 	if (res)
645 		goto out_unreg_class;
646 
647 	/* Bind to already existing adapters right away */
648 	i2c_for_each_dev(NULL, i2cdev_attach_adapter);
649 
650 	return 0;
651 
652 out_unreg_class:
653 	class_destroy(i2c_dev_class);
654 out_unreg_chrdev:
655 	unregister_chrdev(I2C_MAJOR, "i2c");
656 out:
657 	printk(KERN_ERR "%s: Driver Initialisation failed\n", __FILE__);
658 	return res;
659 }
660 
661 static void __exit i2c_dev_exit(void)
662 {
663 	bus_unregister_notifier(&i2c_bus_type, &i2cdev_notifier);
664 	i2c_for_each_dev(NULL, i2cdev_detach_adapter);
665 	class_destroy(i2c_dev_class);
666 	unregister_chrdev(I2C_MAJOR, "i2c");
667 }
668 
669 MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl> and "
670 		"Simon G. Vogl <simon@tk.uni-linz.ac.at>");
671 MODULE_DESCRIPTION("I2C /dev entries driver");
672 MODULE_LICENSE("GPL");
673 
674 module_init(i2c_dev_init);
675 module_exit(i2c_dev_exit);
676