cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i2c-dev.c (20069B)


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