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 [EMAIL PROTECTED]  Wed Sep 13 22:59:01 2006
Date: Wed, 13 Sep 2006 16:11:35 +0200
From: Kay Sievers <[EMAIL PROTECTED]>
To: Greg KH <[EMAIL PROTECTED]>
Subject: Driver core: convert input core to use struct device

From: Kay Sievers <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>

---
 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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to