lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070310065443.GA20302@suse.de>
Date:	Fri, 9 Mar 2007 22:54:43 -0800
From:	Greg KH <gregkh@...e.de>
To:	Dmitry Torokhov <dtor@...ightbb.com>
Cc:	linux-kernel@...r.kernel.org,
	Andrew Morton <akpm@...ux-foundation.org>
Subject: Re: [PATCH] Use attribute groups in struct device_type

On Sat, Mar 10, 2007 at 01:37:34AM -0500, Dmitry Torokhov wrote:
> Greg,
> 
> Please consider applying the patch below. It switches struct device_type
> to using attribute groups which os more flexible. I am using it in my
> input class_device -> device conversion (which is 99% done btw).

Argh, I never sent you my version of that, did I?  Very sorry about
that, I was working on fixing up the device namespace issue first, which
isn't done yet :(

Anyway, my patch that did that is below, feel free to use it or not if
you want.

> I looked through -mm and the latest git and there does not seem to be
> any users of struct device_type yet...

Yes, the input patch below uses it and I have a block-device patch from
Kay in my tree that Andrew doesn't pull from (as it's usually really
messed up and I know to hide this kind of breakage from him...)

thanks,

greg k-h
--------------------

>>From kay.sievers@...y.org  Wed Sep 13 22:59:01 2006
Date: Wed, 13 Sep 2006 16:11:35 +0200
From: Kay Sievers <kay.sievers@...y.org>
To: Greg KH <greg@...ah.com>
Subject: Driver core: convert input core to use struct device

From: Kay Sievers <kay.sievers@...y.org>

Converts from using struct "class_device" to "struct device" making
everything show up properly in /sys/devices/ with symlinks from the
/sys/class directory.

Signed-off-by: Kay Sievers <kay.sievers@...y.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@...e.de>

---
 drivers/hid/hid-input.c                           |    2 
 drivers/hwmon/hdaps.c                             |    2 
 drivers/input/evdev.c                             |   12 --
 drivers/input/input.c                             |  110 ++++++++++++----------
 drivers/input/joydev.c                            |   12 --
 drivers/input/joystick/a3d.c                      |    2 
 drivers/input/joystick/adi.c                      |    2 
 drivers/input/joystick/cobra.c                    |    2 
 drivers/input/joystick/gf2k.c                     |    2 
 drivers/input/joystick/grip.c                     |    2 
 drivers/input/joystick/grip_mp.c                  |    2 
 drivers/input/joystick/guillemot.c                |    2 
 drivers/input/joystick/iforce/iforce-main.c       |    4 
 drivers/input/joystick/magellan.c                 |    2 
 drivers/input/joystick/sidewinder.c               |    2 
 drivers/input/joystick/spaceball.c                |    2 
 drivers/input/joystick/spaceorb.c                 |    2 
 drivers/input/joystick/stinger.c                  |    2 
 drivers/input/joystick/tmdc.c                     |    2 
 drivers/input/joystick/twidjoy.c                  |    2 
 drivers/input/joystick/warrior.c                  |    2 
 drivers/input/keyboard/atkbd.c                    |    2 
 drivers/input/keyboard/corgikbd.c                 |    2 
 drivers/input/keyboard/lkkbd.c                    |    2 
 drivers/input/keyboard/newtonkbd.c                |    2 
 drivers/input/keyboard/spitzkbd.c                 |    2 
 drivers/input/keyboard/sunkbd.c                   |    2 
 drivers/input/keyboard/xtkbd.c                    |    2 
 drivers/input/misc/pcspkr.c                       |    2 
 drivers/input/misc/wistron_btns.c                 |    2 
 drivers/input/mouse/psmouse-base.c                |    2 
 drivers/input/mouse/sermouse.c                    |    2 
 drivers/input/mouse/vsxxxaa.c                     |    2 
 drivers/input/mousedev.c                          |   24 +---
 drivers/input/touchscreen/ads7846.c               |    2 
 drivers/input/touchscreen/corgi_ts.c              |    2 
 drivers/input/touchscreen/elo.c                   |    2 
 drivers/input/touchscreen/h3600_ts_input.c        |    2 
 drivers/input/touchscreen/penmount.c              |    2 
 drivers/input/tsdev.c                             |   12 --
 drivers/media/dvb/dvb-usb/dvb-usb-remote.c        |    2 
 drivers/media/video/bt8xx/bttv-input.c            |    2 
 drivers/media/video/cx88/cx88-input.c             |    2 
 drivers/media/video/saa7134/saa7134-input.c       |    2 
 drivers/media/video/usbvideo/konicawc.c           |    2 
 drivers/media/video/usbvideo/quickcam_messenger.c |    2 
 drivers/usb/input/acecad.c                        |    2 
 drivers/usb/input/aiptek.c                        |    2 
 drivers/usb/input/appletouch.c                    |    2 
 drivers/usb/input/ati_remote.c                    |    2 
 drivers/usb/input/ati_remote2.c                   |    2 
 drivers/usb/input/gtco.c                          |    2 
 drivers/usb/input/itmtouch.c                      |    2 
 drivers/usb/input/kbtab.c                         |    2 
 drivers/usb/input/keyspan_remote.c                |    2 
 drivers/usb/input/mtouchusb.c                     |    2 
 drivers/usb/input/powermate.c                     |    2 
 drivers/usb/input/touchkitusb.c                   |    2 
 drivers/usb/input/usbkbd.c                        |    2 
 drivers/usb/input/usbmouse.c                      |    2 
 drivers/usb/input/usbtouchscreen.c                |    2 
 drivers/usb/input/wacom_sys.c                     |    2 
 drivers/usb/input/xpad.c                          |    2 
 drivers/usb/input/yealink.c                       |    2 
 include/linux/input.h                             |    8 -
 net/bluetooth/hidp/core.c                         |    2 
 66 files changed, 146 insertions(+), 154 deletions(-)

--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -896,7 +896,7 @@ int hidinput_connect(struct hid_device *
 				input_dev->id.vendor  = hid->vendor;
 				input_dev->id.product = hid->product;
 				input_dev->id.version = hid->version;
-				input_dev->cdev.dev = hid->dev;
+				input_dev->d.parent = hid->dev;
 				hidinput->input = input_dev;
 				list_add_tail(&hidinput->list, &hid->inputs);
 			}
--- a/drivers/hwmon/hdaps.c
+++ b/drivers/hwmon/hdaps.c
@@ -572,7 +572,7 @@ static int __init hdaps_init(void)
 
 	/* initialize the input class */
 	hdaps_idev->name = "hdaps";
-	hdaps_idev->cdev.dev = &pdev->dev;
+	hdaps_idev->d.parent = &pdev->dev;
 	hdaps_idev->evbit[0] = BIT(EV_ABS);
 	input_set_abs_params(hdaps_idev, ABS_X,
 			-256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT);
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -620,7 +620,6 @@ static struct input_handle *evdev_connec
 					  const struct input_device_id *id)
 {
 	struct evdev *evdev;
-	struct class_device *cdev;
 	int minor;
 
 	for (minor = 0; minor < EVDEV_MINORS && evdev_table[minor]; minor++);
@@ -645,13 +644,9 @@ static struct input_handle *evdev_connec
 
 	evdev_table[minor] = evdev;
 
-	cdev = class_device_create(&input_class, &dev->cdev,
+	device_create(&input_class, &dev->d,
 			MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor),
-			dev->cdev.dev, evdev->name);
-
-	/* temporary symlink to keep userspace happy */
-	sysfs_create_link(&input_class.subsys.kset.kobj, &cdev->kobj,
-			  evdev->name);
+			evdev->name);
 
 	return &evdev->handle;
 }
@@ -661,8 +656,7 @@ static void evdev_disconnect(struct inpu
 	struct evdev *evdev = handle->private;
 	struct evdev_list *list;
 
-	sysfs_remove_link(&input_class.subsys.kset.kobj, evdev->name);
-	class_device_destroy(&input_class,
+	device_destroy(&input_class,
 			MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + evdev->minor));
 	evdev->exist = 0;
 
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -430,7 +430,7 @@ static void input_seq_print_bitmap(struc
 static int input_devices_seq_show(struct seq_file *seq, void *v)
 {
 	struct input_dev *dev = container_of(v, struct input_dev, node);
-	const char *path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL);
+	const char *path = kobject_get_path(&dev->d.kobj, GFP_KERNEL);
 	struct input_handle *handle;
 
 	seq_printf(seq, "I: Bus=%04x Vendor=%04x Product=%04x Version=%04x\n",
@@ -585,14 +585,16 @@ static inline void input_proc_exit(void)
 #endif
 
 #define INPUT_DEV_STRING_ATTR_SHOW(name)					\
-static ssize_t input_dev_show_##name(struct class_device *dev, char *buf)	\
+static ssize_t input_dev_show_##name(struct device *dev,			\
+				     struct device_attribute *attr,		\
+				     char *buf)					\
 {										\
 	struct input_dev *input_dev = to_input_dev(dev);			\
 										\
 	return scnprintf(buf, PAGE_SIZE, "%s\n",				\
 			 input_dev->name ? input_dev->name : "");		\
 }										\
-static CLASS_DEVICE_ATTR(name, S_IRUGO, input_dev_show_##name, NULL);
+static DEVICE_ATTR(name, S_IRUGO, input_dev_show_##name, NULL);
 
 INPUT_DEV_STRING_ATTR_SHOW(name);
 INPUT_DEV_STRING_ATTR_SHOW(phys);
@@ -646,7 +648,9 @@ static int input_print_modalias(char *bu
 	return len;
 }
 
-static ssize_t input_dev_show_modalias(struct class_device *dev, char *buf)
+static ssize_t input_dev_show_modalias(struct device *dev,
+				       struct device_attribute *attr,
+				       char *buf)
 {
 	struct input_dev *id = to_input_dev(dev);
 	ssize_t len;
@@ -655,13 +659,13 @@ static ssize_t input_dev_show_modalias(s
 
 	return min_t(int, len, PAGE_SIZE);
 }
-static CLASS_DEVICE_ATTR(modalias, S_IRUGO, input_dev_show_modalias, NULL);
+static DEVICE_ATTR(modalias, S_IRUGO, input_dev_show_modalias, NULL);
 
 static struct attribute *input_dev_attrs[] = {
-	&class_device_attr_name.attr,
-	&class_device_attr_phys.attr,
-	&class_device_attr_uniq.attr,
-	&class_device_attr_modalias.attr,
+	&dev_attr_name.attr,
+	&dev_attr_phys.attr,
+	&dev_attr_uniq.attr,
+	&dev_attr_modalias.attr,
 	NULL
 };
 
@@ -670,12 +674,14 @@ static struct attribute_group input_dev_
 };
 
 #define INPUT_DEV_ID_ATTR(name)							\
-static ssize_t input_dev_show_id_##name(struct class_device *dev, char *buf)	\
+static ssize_t input_dev_show_id_##name(struct device *dev,			\
+					struct device_attribute *attr,		\
+					char *buf)				\
 {										\
 	struct input_dev *input_dev = to_input_dev(dev);			\
 	return scnprintf(buf, PAGE_SIZE, "%04x\n", input_dev->id.name);		\
 }										\
-static CLASS_DEVICE_ATTR(name, S_IRUGO, input_dev_show_id_##name, NULL);
+static DEVICE_ATTR(name, S_IRUGO, input_dev_show_id_##name, NULL);
 
 INPUT_DEV_ID_ATTR(bustype);
 INPUT_DEV_ID_ATTR(vendor);
@@ -683,10 +689,10 @@ INPUT_DEV_ID_ATTR(product);
 INPUT_DEV_ID_ATTR(version);
 
 static struct attribute *input_dev_id_attrs[] = {
-	&class_device_attr_bustype.attr,
-	&class_device_attr_vendor.attr,
-	&class_device_attr_product.attr,
-	&class_device_attr_version.attr,
+	&dev_attr_bustype.attr,
+	&dev_attr_vendor.attr,
+	&dev_attr_product.attr,
+	&dev_attr_version.attr,
 	NULL
 };
 
@@ -716,14 +722,16 @@ static int input_print_bitmap(char *buf,
 }
 
 #define INPUT_DEV_CAP_ATTR(ev, bm)						\
-static ssize_t input_dev_show_cap_##bm(struct class_device *dev, char *buf)	\
+static ssize_t input_dev_show_cap_##bm(struct device *dev,			\
+				       struct device_attribute *attr,		\
+				       char *buf)				\
 {										\
 	struct input_dev *input_dev = to_input_dev(dev);			\
 	int len = input_print_bitmap(buf, PAGE_SIZE,				\
 				     input_dev->bm##bit, ev##_MAX, 1);		\
 	return min_t(int, len, PAGE_SIZE);					\
 }										\
-static CLASS_DEVICE_ATTR(bm, S_IRUGO, input_dev_show_cap_##bm, NULL);
+static DEVICE_ATTR(bm, S_IRUGO, input_dev_show_cap_##bm, NULL);
 
 INPUT_DEV_CAP_ATTR(EV, ev);
 INPUT_DEV_CAP_ATTR(KEY, key);
@@ -736,15 +744,15 @@ INPUT_DEV_CAP_ATTR(FF, ff);
 INPUT_DEV_CAP_ATTR(SW, sw);
 
 static struct attribute *input_dev_caps_attrs[] = {
-	&class_device_attr_ev.attr,
-	&class_device_attr_key.attr,
-	&class_device_attr_rel.attr,
-	&class_device_attr_abs.attr,
-	&class_device_attr_msc.attr,
-	&class_device_attr_led.attr,
-	&class_device_attr_snd.attr,
-	&class_device_attr_ff.attr,
-	&class_device_attr_sw.attr,
+	&dev_attr_ev.attr,
+	&dev_attr_key.attr,
+	&dev_attr_rel.attr,
+	&dev_attr_abs.attr,
+	&dev_attr_msc.attr,
+	&dev_attr_led.attr,
+	&dev_attr_snd.attr,
+	&dev_attr_ff.attr,
+	&dev_attr_sw.attr,
 	NULL
 };
 
@@ -753,9 +761,9 @@ static struct attribute_group input_dev_
 	.attrs	= input_dev_caps_attrs,
 };
 
-static void input_dev_release(struct class_device *class_dev)
+static void input_dev_release(struct device *d)
 {
-	struct input_dev *dev = to_input_dev(class_dev);
+	struct input_dev *dev = to_input_dev(d);
 
 	input_ff_destroy(dev);
 	kfree(dev);
@@ -842,16 +850,23 @@ static int input_add_uevent_modalias_var
 			return err;					\
 	} while (0)
 
-static int input_dev_uevent(struct class_device *cdev, char **envp,
+static int input_dev_uevent(struct device *d, char **envp,
 			    int num_envp, char *buffer, int buffer_size)
 {
-	struct input_dev *dev = to_input_dev(cdev);
+	struct input_dev *dev;
 	int i = 0;
 	int len = 0;
 
+	/* input is a single class, this is only valid for input_dev's */
+	if (strncmp("input", kobject_name(&d->kobj), 5) != 0)
+		return 0;
+
+	dev = to_input_dev(d);
+
 	INPUT_ADD_HOTPLUG_VAR("PRODUCT=%x/%x/%x/%x",
 				dev->id.bustype, dev->id.vendor,
 				dev->id.product, dev->id.version);
+
 	if (dev->name)
 		INPUT_ADD_HOTPLUG_VAR("NAME=\"%s\"", dev->name);
 	if (dev->phys)
@@ -885,8 +900,8 @@ static int input_dev_uevent(struct class
 
 struct class input_class = {
 	.name			= "input",
-	.release		= input_dev_release,
-	.uevent			= input_dev_uevent,
+	.dev_release		= input_dev_release,
+	.dev_uevent		= input_dev_uevent,
 };
 EXPORT_SYMBOL_GPL(input_class);
 
@@ -905,8 +920,8 @@ struct input_dev *input_allocate_device(
 
 	dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
 	if (dev) {
-		dev->cdev.class = &input_class;
-		class_device_initialize(&dev->cdev);
+		device_initialize(&dev->d);
+		dev->d.class = &input_class;
 		mutex_init(&dev->mutex);
 		INIT_LIST_HEAD(&dev->h_list);
 		INIT_LIST_HEAD(&dev->node);
@@ -971,26 +986,27 @@ int input_register_device(struct input_d
 
 	list_add_tail(&dev->node, &input_dev_list);
 
-	snprintf(dev->cdev.class_id, sizeof(dev->cdev.class_id),
+	dev->d.class = &input_class;
+	snprintf(dev->d.bus_id, sizeof(dev->d.bus_id),
 		 "input%ld", (unsigned long) atomic_inc_return(&input_no) - 1);
 
-	error = class_device_add(&dev->cdev);
+	error = device_add(&dev->d);
 	if (error)
 		return error;
 
-	error = sysfs_create_group(&dev->cdev.kobj, &input_dev_attr_group);
+	error = sysfs_create_group(&dev->d.kobj, &input_dev_attr_group);
 	if (error)
 		goto fail1;
 
-	error = sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group);
+	error = sysfs_create_group(&dev->d.kobj, &input_dev_id_attr_group);
 	if (error)
 		goto fail2;
 
-	error = sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
+	error = sysfs_create_group(&dev->d.kobj, &input_dev_caps_attr_group);
 	if (error)
 		goto fail3;
 
-	path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL);
+	path = kobject_get_path(&dev->d.kobj, GFP_KERNEL);
 	printk(KERN_INFO "input: %s as %s\n",
 		dev->name ? dev->name : "Unspecified device", path ? path : "N/A");
 	kfree(path);
@@ -1008,9 +1024,9 @@ int input_register_device(struct input_d
 
 	return 0;
 
- fail3:	sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
- fail2:	sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
- fail1:	class_device_del(&dev->cdev);
+ fail3:	sysfs_remove_group(&dev->d.kobj, &input_dev_id_attr_group);
+ fail2:	sysfs_remove_group(&dev->d.kobj, &input_dev_attr_group);
+ fail1:	device_del(&dev->d);
 	return error;
 }
 EXPORT_SYMBOL(input_register_device);
@@ -1036,11 +1052,11 @@ void input_unregister_device(struct inpu
 
 	list_del_init(&dev->node);
 
-	sysfs_remove_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
-	sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
-	sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
+	sysfs_remove_group(&dev->d.kobj, &input_dev_caps_attr_group);
+	sysfs_remove_group(&dev->d.kobj, &input_dev_id_attr_group);
+	sysfs_remove_group(&dev->d.kobj, &input_dev_attr_group);
 
-	class_device_unregister(&dev->cdev);
+	device_unregister(&dev->d);
 
 	input_wakeup_procfs_readers();
 }
--- a/drivers/input/joydev.c
+++ b/drivers/input/joydev.c
@@ -469,7 +469,6 @@ static struct input_handle *joydev_conne
 					   const struct input_device_id *id)
 {
 	struct joydev *joydev;
-	struct class_device *cdev;
 	int i, j, t, minor;
 
 	for (minor = 0; minor < JOYDEV_MINORS && joydev_table[minor]; minor++);
@@ -534,13 +533,9 @@ static struct input_handle *joydev_conne
 
 	joydev_table[minor] = joydev;
 
-	cdev = class_device_create(&input_class, &dev->cdev,
+	device_create(&input_class, &dev->d,
 			MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + minor),
-			dev->cdev.dev, joydev->name);
-
-	/* temporary symlink to keep userspace happy */
-	sysfs_create_link(&input_class.subsys.kset.kobj, &cdev->kobj,
-			  joydev->name);
+			joydev->name);
 
 	return &joydev->handle;
 }
@@ -550,8 +545,7 @@ static void joydev_disconnect(struct inp
 	struct joydev *joydev = handle->private;
 	struct joydev_list *list;
 
-	sysfs_remove_link(&input_class.subsys.kset.kobj, joydev->name);
-	class_device_destroy(&input_class, MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
+	device_destroy(&input_class, MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
 	joydev->exist = 0;
 
 	if (joydev->open) {
--- a/drivers/input/joystick/a3d.c
+++ b/drivers/input/joystick/a3d.c
@@ -314,7 +314,7 @@ static int a3d_connect(struct gameport *
 	input_dev->id.vendor = GAMEPORT_ID_VENDOR_MADCATZ;
 	input_dev->id.product = a3d->mode;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &gameport->dev;
+	input_dev->d.parent = &gameport->dev;
 	input_dev->private = a3d;
 	input_dev->open = a3d_open;
 	input_dev->close = a3d_close;
--- a/drivers/input/joystick/adi.c
+++ b/drivers/input/joystick/adi.c
@@ -424,7 +424,7 @@ static int adi_init_input(struct adi *ad
 	input_dev->id.vendor = GAMEPORT_ID_VENDOR_LOGITECH;
 	input_dev->id.product = adi->id;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &port->gameport->dev;
+	input_dev->d.parent = &port->gameport->dev;
 	input_dev->private = port;
 
 	input_dev->open = adi_open;
--- a/drivers/input/joystick/cobra.c
+++ b/drivers/input/joystick/cobra.c
@@ -211,7 +211,7 @@ static int cobra_connect(struct gameport
 		input_dev->id.vendor = GAMEPORT_ID_VENDOR_CREATIVE;
 		input_dev->id.product = 0x0008;
 		input_dev->id.version = 0x0100;
-		input_dev->cdev.dev = &gameport->dev;
+		input_dev->d.parent = &gameport->dev;
 		input_dev->private = cobra;
 
 		input_dev->open = cobra_open;
--- a/drivers/input/joystick/gf2k.c
+++ b/drivers/input/joystick/gf2k.c
@@ -308,7 +308,7 @@ static int gf2k_connect(struct gameport 
 	input_dev->id.vendor = GAMEPORT_ID_VENDOR_GENIUS;
 	input_dev->id.product = gf2k->id;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &gameport->dev;
+	input_dev->d.parent = &gameport->dev;
 	input_dev->private = gf2k;
 
 	input_dev->open = gf2k_open;
--- a/drivers/input/joystick/grip.c
+++ b/drivers/input/joystick/grip.c
@@ -363,7 +363,7 @@ static int grip_connect(struct gameport 
 		input_dev->id.vendor = GAMEPORT_ID_VENDOR_GRAVIS;
 		input_dev->id.product = grip->mode[i];
 		input_dev->id.version = 0x0100;
-		input_dev->cdev.dev = &gameport->dev;
+		input_dev->d.parent = &gameport->dev;
 		input_dev->private = grip;
 
 		input_dev->open = grip_open;
--- a/drivers/input/joystick/grip_mp.c
+++ b/drivers/input/joystick/grip_mp.c
@@ -599,7 +599,7 @@ static int register_slot(int slot, struc
 	input_dev->id.vendor = GAMEPORT_ID_VENDOR_GRAVIS;
 	input_dev->id.product = 0x0100 + port->mode;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &grip->gameport->dev;
+	input_dev->d.parent = &grip->gameport->dev;
 	input_dev->private = grip;
 
 	input_dev->open = grip_open;
--- a/drivers/input/joystick/guillemot.c
+++ b/drivers/input/joystick/guillemot.c
@@ -231,7 +231,7 @@ static int guillemot_connect(struct game
 	input_dev->id.vendor = GAMEPORT_ID_VENDOR_GUILLEMOT;
 	input_dev->id.product = guillemot_type[i].id;
 	input_dev->id.version = (int)data[14] << 8 | data[15];
-	input_dev->cdev.dev = &gameport->dev;
+	input_dev->d.parent = &gameport->dev;
 	input_dev->private = guillemot;
 
 	input_dev->open = guillemot_open;
--- a/drivers/input/joystick/iforce/iforce-main.c
+++ b/drivers/input/joystick/iforce/iforce-main.c
@@ -287,13 +287,13 @@ int iforce_init_device(struct iforce *if
 #ifdef CONFIG_JOYSTICK_IFORCE_USB
 	case IFORCE_USB:
 		input_dev->id.bustype = BUS_USB;
-		input_dev->cdev.dev = &iforce->usbdev->dev;
+		input_dev->d.parent = &iforce->usbdev->dev;
 		break;
 #endif
 #ifdef CONFIG_JOYSTICK_IFORCE_232
 	case IFORCE_232:
 		input_dev->id.bustype = BUS_RS232;
-		input_dev->cdev.dev = &iforce->serio->dev;
+		input_dev->d.parent = &iforce->serio->dev;
 		break;
 #endif
 	}
--- a/drivers/input/joystick/magellan.c
+++ b/drivers/input/joystick/magellan.c
@@ -168,7 +168,7 @@ static int magellan_connect(struct serio
 	input_dev->id.vendor = SERIO_MAGELLAN;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = magellan;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
--- a/drivers/input/joystick/sidewinder.c
+++ b/drivers/input/joystick/sidewinder.c
@@ -751,7 +751,7 @@ static int sw_connect(struct gameport *g
 		input_dev->id.vendor = GAMEPORT_ID_VENDOR_MICROSOFT;
 		input_dev->id.product = sw->type;
 		input_dev->id.version = 0x0100;
-		input_dev->cdev.dev = &gameport->dev;
+		input_dev->d.parent = &gameport->dev;
 		input_dev->private = sw;
 
 		input_dev->open = sw_open;
--- a/drivers/input/joystick/spaceball.c
+++ b/drivers/input/joystick/spaceball.c
@@ -226,7 +226,7 @@ static int spaceball_connect(struct seri
 	input_dev->id.vendor = SERIO_SPACEBALL;
 	input_dev->id.product = id;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = spaceball;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
--- a/drivers/input/joystick/spaceorb.c
+++ b/drivers/input/joystick/spaceorb.c
@@ -183,7 +183,7 @@ static int spaceorb_connect(struct serio
 	input_dev->id.vendor = SERIO_SPACEORB;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = spaceorb;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
--- a/drivers/input/joystick/stinger.c
+++ b/drivers/input/joystick/stinger.c
@@ -154,7 +154,7 @@ static int stinger_connect(struct serio 
 	input_dev->id.vendor = SERIO_STINGER;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = stinger;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
--- a/drivers/input/joystick/tmdc.c
+++ b/drivers/input/joystick/tmdc.c
@@ -326,7 +326,7 @@ static int tmdc_setup_port(struct tmdc *
 	input_dev->id.vendor = GAMEPORT_ID_VENDOR_THRUSTMASTER;
 	input_dev->id.product = model->id;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &tmdc->gameport->dev;
+	input_dev->d.parent = &tmdc->gameport->dev;
 	input_dev->private = tmdc;
 
 	input_dev->open = tmdc_open;
--- a/drivers/input/joystick/twidjoy.c
+++ b/drivers/input/joystick/twidjoy.c
@@ -205,7 +205,7 @@ static int twidjoy_connect(struct serio 
 	input_dev->id.vendor = SERIO_TWIDJOY;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = twidjoy;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
--- a/drivers/input/joystick/warrior.c
+++ b/drivers/input/joystick/warrior.c
@@ -160,7 +160,7 @@ static int warrior_connect(struct serio 
 	input_dev->id.vendor = SERIO_WARRIOR;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = warrior;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL) | BIT(EV_ABS);
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -884,7 +884,7 @@ static void atkbd_set_device_attrs(struc
 	input_dev->id.version = atkbd->id;
 	input_dev->event = atkbd_event;
 	input_dev->private = atkbd;
-	input_dev->cdev.dev = &atkbd->ps2dev.serio->dev;
+	input_dev->d.parent = &atkbd->ps2dev.serio->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_MSC);
 
--- a/drivers/input/keyboard/corgikbd.c
+++ b/drivers/input/keyboard/corgikbd.c
@@ -323,7 +323,7 @@ static int __init corgikbd_probe(struct 
 	input_dev->id.vendor = 0x0001;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &pdev->dev;
+	input_dev->d.parent = &pdev->dev;
 	input_dev->private = corgikbd;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR) | BIT(EV_SW);
--- a/drivers/input/keyboard/lkkbd.c
+++ b/drivers/input/keyboard/lkkbd.c
@@ -666,7 +666,7 @@ lkkbd_connect (struct serio *serio, stru
 	input_dev->id.vendor = SERIO_LKKBD;
 	input_dev->id.product = 0;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->event = lkkbd_event;
 	input_dev->private = lk;
 
--- a/drivers/input/keyboard/newtonkbd.c
+++ b/drivers/input/keyboard/newtonkbd.c
@@ -104,7 +104,7 @@ static int nkbd_connect(struct serio *se
 	input_dev->id.vendor = SERIO_NEWTON;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = nkbd;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
--- a/drivers/input/keyboard/spitzkbd.c
+++ b/drivers/input/keyboard/spitzkbd.c
@@ -375,7 +375,7 @@ static int __init spitzkbd_probe(struct 
 	input_dev->private = spitzkbd;
 	input_dev->name = "Spitz Keyboard";
 	input_dev->phys = spitzkbd->phys;
-	input_dev->cdev.dev = &dev->dev;
+	input_dev->d.parent = &dev->dev;
 
 	input_dev->id.bustype = BUS_HOST;
 	input_dev->id.vendor = 0x0001;
--- a/drivers/input/keyboard/sunkbd.c
+++ b/drivers/input/keyboard/sunkbd.c
@@ -271,7 +271,7 @@ static int sunkbd_connect(struct serio *
 	input_dev->id.vendor  = SERIO_SUNKBD;
 	input_dev->id.product = sunkbd->type;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = sunkbd;
 	input_dev->event = sunkbd_event;
 
--- a/drivers/input/keyboard/xtkbd.c
+++ b/drivers/input/keyboard/xtkbd.c
@@ -108,7 +108,7 @@ static int xtkbd_connect(struct serio *s
 	input_dev->id.vendor  = 0x0001;
 	input_dev->id.product = 0x0001;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = xtkbd;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
--- a/drivers/input/misc/pcspkr.c
+++ b/drivers/input/misc/pcspkr.c
@@ -78,7 +78,7 @@ static int __devinit pcspkr_probe(struct
 	pcspkr_dev->id.vendor = 0x001f;
 	pcspkr_dev->id.product = 0x0001;
 	pcspkr_dev->id.version = 0x0100;
-	pcspkr_dev->cdev.dev = &dev->dev;
+	pcspkr_dev->d.parent = &dev->dev;
 
 	pcspkr_dev->evbit[0] = BIT(EV_SND);
 	pcspkr_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE);
--- a/drivers/input/misc/wistron_btns.c
+++ b/drivers/input/misc/wistron_btns.c
@@ -473,7 +473,7 @@ static int __devinit setup_input_dev(voi
 	input_dev->name = "Wistron laptop buttons";
 	input_dev->phys = "wistron/input0";
 	input_dev->id.bustype = BUS_HOST;
-	input_dev->cdev.dev = &wistron_device->dev;
+	input_dev->d.parent = &wistron_device->dev;
 
 	for (key = keymap; key->type != KE_END; key++) {
 		if (key->type == KE_KEY) {
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -1063,7 +1063,7 @@ static int psmouse_switch_protocol(struc
 	struct input_dev *input_dev = psmouse->dev;
 
 	input_dev->private = psmouse;
-	input_dev->cdev.dev = &psmouse->ps2dev.serio->dev;
+	input_dev->d.parent = &psmouse->ps2dev.serio->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
 	input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
--- a/drivers/input/mouse/sermouse.c
+++ b/drivers/input/mouse/sermouse.c
@@ -258,7 +258,7 @@ static int sermouse_connect(struct serio
 	input_dev->id.vendor  = sermouse->type;
 	input_dev->id.product = c;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
 	input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT);
--- a/drivers/input/mouse/vsxxxaa.c
+++ b/drivers/input/mouse/vsxxxaa.c
@@ -508,7 +508,7 @@ vsxxxaa_connect (struct serio *serio, st
 	input_dev->name = mouse->name;
 	input_dev->phys = mouse->phys;
 	input_dev->id.bustype = BUS_RS232;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = mouse;
 
 	set_bit (EV_KEY, input_dev->evbit);		/* We have buttons */
--- a/drivers/input/mousedev.c
+++ b/drivers/input/mousedev.c
@@ -628,7 +628,6 @@ static struct input_handle *mousedev_con
 					     const struct input_device_id *id)
 {
 	struct mousedev *mousedev;
-	struct class_device *cdev;
 	int minor = 0;
 
 	for (minor = 0; minor < MOUSEDEV_MINORS && mousedev_table[minor]; minor++);
@@ -656,13 +655,9 @@ static struct input_handle *mousedev_con
 
 	mousedev_table[minor] = mousedev;
 
-	cdev = class_device_create(&input_class, &dev->cdev,
+	device_create(&input_class, &dev->d,
 			MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + minor),
-			dev->cdev.dev, mousedev->name);
-
-	/* temporary symlink to keep userspace happy */
-	sysfs_create_link(&input_class.subsys.kset.kobj, &cdev->kobj,
-			  mousedev->name);
+			mousedev->name);
 
 	return &mousedev->handle;
 }
@@ -672,8 +667,7 @@ static void mousedev_disconnect(struct i
 	struct mousedev *mousedev = handle->private;
 	struct mousedev_list *list;
 
-	sysfs_remove_link(&input_class.subsys.kset.kobj, mousedev->name);
-	class_device_destroy(&input_class,
+	device_destroy(&input_class,
 			MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + mousedev->minor));
 	mousedev->exist = 0;
 
@@ -738,7 +732,7 @@ static int psaux_registered;
 
 static int __init mousedev_init(void)
 {
-	struct class_device *cdev;
+	struct device *dev;
 	int error;
 
 	error = input_register_handler(&mousedev_handler);
@@ -752,11 +746,11 @@ static int __init mousedev_init(void)
 	mousedev_mix.exist = 1;
 	mousedev_mix.minor = MOUSEDEV_MIX;
 
-	cdev = class_device_create(&input_class, NULL,
-			MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX), NULL, "mice");
-	if (IS_ERR(cdev)) {
+	dev = device_create(&input_class, NULL,
+			MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX), "mice");
+	if (IS_ERR(dev)) {
 		input_unregister_handler(&mousedev_handler);
-		return PTR_ERR(cdev);
+		return PTR_ERR(dev);
 	}
 
 #ifdef CONFIG_INPUT_MOUSEDEV_PSAUX
@@ -779,7 +773,7 @@ static void __exit mousedev_exit(void)
 	if (psaux_registered)
 		misc_deregister(&psaux_mouse);
 #endif
-	class_device_destroy(&input_class,
+	device_destroy(&input_class,
 			MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX));
 	input_unregister_handler(&mousedev_handler);
 }
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -897,7 +897,7 @@ static int __devinit ads7846_probe(struc
 
 	input_dev->name = "ADS784x Touchscreen";
 	input_dev->phys = ts->phys;
-	input_dev->cdev.dev = &spi->dev;
+	input_dev->d.parent = &spi->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
 	input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
--- a/drivers/input/touchscreen/corgi_ts.c
+++ b/drivers/input/touchscreen/corgi_ts.c
@@ -300,7 +300,7 @@ static int __init corgits_probe(struct p
 	input_dev->id.vendor = 0x0001;
 	input_dev->id.product = 0x0002;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &pdev->dev;
+	input_dev->d.parent = &pdev->dev;
 	input_dev->private = corgi_ts;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
--- a/drivers/input/touchscreen/elo.c
+++ b/drivers/input/touchscreen/elo.c
@@ -319,7 +319,7 @@ static int elo_connect(struct serio *ser
 	input_dev->id.vendor = SERIO_ELO;
 	input_dev->id.product = elo->id;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
 	input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
--- a/drivers/input/touchscreen/h3600_ts_input.c
+++ b/drivers/input/touchscreen/h3600_ts_input.c
@@ -367,7 +367,7 @@ static int h3600ts_connect(struct serio 
 	input_dev->id.vendor = SERIO_H3600;
 	input_dev->id.product = 0x0666;  /* FIXME !!! We can ask the hardware */
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 	input_dev->private = ts;
 
 	input_dev->event = h3600ts_event;
--- a/drivers/input/touchscreen/penmount.c
+++ b/drivers/input/touchscreen/penmount.c
@@ -112,7 +112,7 @@ static int pm_connect(struct serio *seri
 	input_dev->id.vendor = SERIO_PENMOUNT;
 	input_dev->id.product = 0;
 	input_dev->id.version = 0x0100;
-	input_dev->cdev.dev = &serio->dev;
+	input_dev->d.parent = &serio->dev;
 
         input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
         input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
--- a/drivers/input/tsdev.c
+++ b/drivers/input/tsdev.c
@@ -375,7 +375,6 @@ static struct input_handle *tsdev_connec
 					  const struct input_device_id *id)
 {
 	struct tsdev *tsdev;
-	struct class_device *cdev;
 	int minor, delta;
 
 	for (minor = 0; minor < TSDEV_MINORS / 2 && tsdev_table[minor]; minor++);
@@ -415,13 +414,9 @@ static struct input_handle *tsdev_connec
 
 	tsdev_table[minor] = tsdev;
 
-	cdev = class_device_create(&input_class, &dev->cdev,
+	device_create(&input_class, &dev->d,
 			MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
-			dev->cdev.dev, tsdev->name);
-
-	/* temporary symlink to keep userspace happy */
-	sysfs_create_link(&input_class.subsys.kset.kobj, &cdev->kobj,
-			  tsdev->name);
+			tsdev->name);
 
 	return &tsdev->handle;
 }
@@ -431,8 +426,7 @@ static void tsdev_disconnect(struct inpu
 	struct tsdev *tsdev = handle->private;
 	struct tsdev_list *list;
 
-	sysfs_remove_link(&input_class.subsys.kset.kobj, tsdev->name);
-	class_device_destroy(&input_class,
+	device_destroy(&input_class,
 			MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + tsdev->minor));
 	tsdev->exist = 0;
 
--- a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c
@@ -112,7 +112,7 @@ int dvb_usb_remote_init(struct dvb_usb_d
 	input_dev->name = "IR-receiver inside an USB DVB receiver";
 	input_dev->phys = d->rc_phys;
 	usb_to_input_id(d->udev, &input_dev->id);
-	input_dev->cdev.dev = &d->udev->dev;
+	input_dev->d.parent = &d->udev->dev;
 
 	/* set the bits for the keys */
 	deb_rc("key map size: %d\n", d->props.rc_key_map_size);
--- a/drivers/media/video/bt8xx/bttv-input.c
+++ b/drivers/media/video/bt8xx/bttv-input.c
@@ -313,7 +313,7 @@ int bttv_input_init(struct bttv *btv)
 		input_dev->id.vendor  = btv->c.pci->vendor;
 		input_dev->id.product = btv->c.pci->device;
 	}
-	input_dev->cdev.dev = &btv->c.pci->dev;
+	input_dev->d.parent = &btv->c.pci->dev;
 
 	btv->remote = ir;
 	bttv_ir_start(btv, ir);
--- a/drivers/media/video/cx88/cx88-input.c
+++ b/drivers/media/video/cx88/cx88-input.c
@@ -328,7 +328,7 @@ int cx88_ir_init(struct cx88_core *core,
 		input_dev->id.vendor = pci->vendor;
 		input_dev->id.product = pci->device;
 	}
-	input_dev->cdev.dev = &pci->dev;
+	input_dev->d.parent = &pci->dev;
 	/* record handles to ourself */
 	ir->core = core;
 	core->ir = ir;
--- a/drivers/media/video/saa7134/saa7134-input.c
+++ b/drivers/media/video/saa7134/saa7134-input.c
@@ -373,7 +373,7 @@ int saa7134_input_init1(struct saa7134_d
 		input_dev->id.vendor  = dev->pci->vendor;
 		input_dev->id.product = dev->pci->device;
 	}
-	input_dev->cdev.dev = &dev->pci->dev;
+	input_dev->d.parent = &dev->pci->dev;
 
 	dev->remote = ir;
 	saa7134_ir_start(dev, ir);
--- a/drivers/media/video/usbvideo/konicawc.c
+++ b/drivers/media/video/usbvideo/konicawc.c
@@ -236,7 +236,7 @@ static void konicawc_register_input(stru
 	input_dev->name = "Konicawc snapshot button";
 	input_dev->phys = cam->input_physname;
 	usb_to_input_id(dev, &input_dev->id);
-	input_dev->cdev.dev = &dev->dev;
+	input_dev->d.parent = &dev->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY);
 	input_dev->keybit[LONG(BTN_0)] = BIT(BTN_0);
--- a/drivers/media/video/usbvideo/quickcam_messenger.c
+++ b/drivers/media/video/usbvideo/quickcam_messenger.c
@@ -100,7 +100,7 @@ static void qcm_register_input(struct qc
 	input_dev->name = "QCM button";
 	input_dev->phys = cam->input_physname;
 	usb_to_input_id(dev, &input_dev->id);
-	input_dev->cdev.dev = &dev->dev;
+	input_dev->d.parent = &dev->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY);
 	input_dev->keybit[LONG(BTN_0)] = BIT(BTN_0);
--- a/drivers/usb/input/acecad.c
+++ b/drivers/usb/input/acecad.c
@@ -178,7 +178,7 @@ static int usb_acecad_probe(struct usb_i
 	input_dev->name = acecad->name;
 	input_dev->phys = acecad->phys;
 	usb_to_input_id(dev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = acecad;
 
 	input_dev->open = usb_acecad_open;
--- a/drivers/usb/input/aiptek.c
+++ b/drivers/usb/input/aiptek.c
@@ -2043,7 +2043,7 @@ aiptek_probe(struct usb_interface *intf,
 	inputdev->name = "Aiptek";
 	inputdev->phys = aiptek->features.usbPath;
 	usb_to_input_id(usbdev, &inputdev->id);
-	inputdev->cdev.dev = &intf->dev;
+	inputdev->d.parent = &intf->dev;
 	inputdev->private = aiptek;
 	inputdev->open = aiptek_open;
 	inputdev->close = aiptek_close;
--- a/drivers/usb/input/appletouch.c
+++ b/drivers/usb/input/appletouch.c
@@ -589,7 +589,7 @@ static int atp_probe(struct usb_interfac
 	input_dev->name = "appletouch";
 	input_dev->phys = dev->phys;
 	usb_to_input_id(dev->udev, &input_dev->id);
-	input_dev->cdev.dev = &iface->dev;
+	input_dev->d.parent = &iface->dev;
 
 	input_dev->private = dev;
 	input_dev->open = atp_open;
--- a/drivers/usb/input/ati_remote.c
+++ b/drivers/usb/input/ati_remote.c
@@ -661,7 +661,7 @@ static void ati_remote_input_init(struct
 	idev->phys = ati_remote->phys;
 
 	usb_to_input_id(ati_remote->udev, &idev->id);
-	idev->cdev.dev = &ati_remote->udev->dev;
+	idev->d.parent = &ati_remote->udev->dev;
 }
 
 static int ati_remote_initialize(struct ati_remote *ati_remote)
--- a/drivers/usb/input/ati_remote2.c
+++ b/drivers/usb/input/ati_remote2.c
@@ -330,7 +330,7 @@ static int ati_remote2_input_init(struct
 	idev->phys = ar2->phys;
 
 	usb_to_input_id(ar2->udev, &idev->id);
-	idev->cdev.dev = &ar2->udev->dev;
+	idev->d.parent = &ar2->udev->dev;
 
 	i = input_register_device(idev);
 	if (i)
--- a/drivers/usb/input/gtco.c
+++ b/drivers/usb/input/gtco.c
@@ -1007,7 +1007,7 @@ static int gtco_probe(struct usb_interfa
 
 	/* Set input device required ID information */
 	usb_to_input_id(device->usbdev, &device->inputdevice->id);
-	inputdev->cdev.dev = &usbinterface->dev;
+	inputdev->d.parent = &usbinterface->dev;
 
 	/* Setup the URB, it will be posted later on open of input device */
 	endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
--- a/drivers/usb/input/itmtouch.c
+++ b/drivers/usb/input/itmtouch.c
@@ -186,7 +186,7 @@ static int itmtouch_probe(struct usb_int
 	input_dev->name = itmtouch->name;
 	input_dev->phys = itmtouch->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = itmtouch;
 
 	input_dev->open = itmtouch_open;
--- a/drivers/usb/input/kbtab.c
+++ b/drivers/usb/input/kbtab.c
@@ -145,7 +145,7 @@ static int kbtab_probe(struct usb_interf
 	input_dev->name = "KB Gear Tablet";
 	input_dev->phys = kbtab->phys;
 	usb_to_input_id(dev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = kbtab;
 
 	input_dev->open = kbtab_open;
--- a/drivers/usb/input/keyspan_remote.c
+++ b/drivers/usb/input/keyspan_remote.c
@@ -495,7 +495,7 @@ static int keyspan_probe(struct usb_inte
 	input_dev->name = remote->name;
 	input_dev->phys = remote->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &interface->dev;
+	input_dev->d.parent = &interface->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY);		/* We will only report KEY events. */
 	for (i = 0; i < ARRAY_SIZE(keyspan_key_table); i++)
--- a/drivers/usb/input/mtouchusb.c
+++ b/drivers/usb/input/mtouchusb.c
@@ -233,7 +233,7 @@ static int mtouchusb_probe(struct usb_in
 	input_dev->name = mtouch->name;
 	input_dev->phys = mtouch->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = mtouch;
 
 	input_dev->open = mtouchusb_open;
--- a/drivers/usb/input/powermate.c
+++ b/drivers/usb/input/powermate.c
@@ -359,7 +359,7 @@ static int powermate_probe(struct usb_in
 
 	input_dev->phys = pm->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = pm;
 
 	input_dev->event = powermate_input_event;
--- a/drivers/usb/input/touchkitusb.c
+++ b/drivers/usb/input/touchkitusb.c
@@ -314,7 +314,7 @@ static int touchkit_probe(struct usb_int
 	input_dev->name = touchkit->name;
 	input_dev->phys = touchkit->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = touchkit;
 	input_dev->open = touchkit_open;
 	input_dev->close = touchkit_close;
--- a/drivers/usb/input/usbkbd.c
+++ b/drivers/usb/input/usbkbd.c
@@ -273,7 +273,7 @@ static int usb_kbd_probe(struct usb_inte
 	input_dev->name = kbd->name;
 	input_dev->phys = kbd->phys;
 	usb_to_input_id(dev, &input_dev->id);
-	input_dev->cdev.dev = &iface->dev;
+	input_dev->d.parent = &iface->dev;
 	input_dev->private = kbd;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);
--- a/drivers/usb/input/usbmouse.c
+++ b/drivers/usb/input/usbmouse.c
@@ -170,7 +170,7 @@ static int usb_mouse_probe(struct usb_in
 	input_dev->name = mouse->name;
 	input_dev->phys = mouse->phys;
 	usb_to_input_id(dev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 
 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
 	input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
--- a/drivers/usb/input/usbtouchscreen.c
+++ b/drivers/usb/input/usbtouchscreen.c
@@ -740,7 +740,7 @@ static int usbtouch_probe(struct usb_int
 	input_dev->name = usbtouch->name;
 	input_dev->phys = usbtouch->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = usbtouch;
 	input_dev->open = usbtouch_open;
 	input_dev->close = usbtouch_close;
--- a/drivers/usb/input/wacom_sys.c
+++ b/drivers/usb/input/wacom_sys.c
@@ -229,7 +229,7 @@ static int wacom_probe(struct usb_interf
 	wacom->wacom_wac = wacom_wac;
 	usb_to_input_id(dev, &input_dev->id);
 
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = wacom;
 	input_dev->open = wacom_open;
 	input_dev->close = wacom_close;
--- a/drivers/usb/input/xpad.c
+++ b/drivers/usb/input/xpad.c
@@ -344,7 +344,7 @@ static int xpad_probe(struct usb_interfa
 	input_dev->name = xpad_device[i].name;
 	input_dev->phys = xpad->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 	input_dev->private = xpad;
 	input_dev->open = xpad_open;
 	input_dev->close = xpad_close;
--- a/drivers/usb/input/yealink.c
+++ b/drivers/usb/input/yealink.c
@@ -937,7 +937,7 @@ static int usb_probe(struct usb_interfac
 	input_dev->name = nfo->name;
 	input_dev->phys = yld->phys;
 	usb_to_input_id(udev, &input_dev->id);
-	input_dev->cdev.dev = &intf->dev;
+	input_dev->d.parent = &intf->dev;
 
 	input_dev->private = yld;
 	input_dev->open = input_open;
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -995,12 +995,12 @@ struct input_dev {
 	struct mutex mutex;	/* serializes open and close operations */
 	unsigned int users;
 
-	struct class_device cdev;
+	struct device d;
 
 	struct list_head	h_list;
 	struct list_head	node;
 };
-#define to_input_dev(d) container_of(d, struct input_dev, cdev)
+#define to_input_dev(dev) container_of(dev, struct input_dev, d)
 
 /*
  * Verify that we are in sync with input_device_id mod_devicetable.h #defines
@@ -1113,12 +1113,12 @@ void input_free_device(struct input_dev 
 
 static inline struct input_dev *input_get_device(struct input_dev *dev)
 {
-	return to_input_dev(class_device_get(&dev->cdev));
+	return to_input_dev(get_device(&dev->d));
 }
 
 static inline void input_put_device(struct input_dev *dev)
 {
-	class_device_put(&dev->cdev);
+	put_device(&dev->d);
 }
 
 int input_register_device(struct input_dev *);
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -663,7 +663,7 @@ static inline void hidp_setup_input(stru
 		input->relbit[0] |= BIT(REL_WHEEL);
 	}
 
-	input->cdev.dev = hidp_get_device(session);
+	input->d.parent = hidp_get_device(session);
 
 	input->event = hidp_input_event;
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ