linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / input / mouse / trackpoint.c
index ae5871a..6d9ec9a 100644 (file)
@@ -183,26 +183,21 @@ static struct attribute_group trackpoint_attr_group = {
        .attrs = trackpoint_attrs,
 };
 
-static int trackpoint_start_protocol(struct psmouse *psmouse, unsigned char *firmware_id)
+static void trackpoint_disconnect(struct psmouse *psmouse)
 {
-       unsigned char param[2] = { 0 };
-
-       if (ps2_command(&psmouse->ps2dev, param, MAKE_PS2_CMD(0, 2, TP_READ_ID)))
-               return -1;
-
-       if (param[0] != TP_MAGIC_IDENT)
-               return -1;
-
-       if (firmware_id)
-               *firmware_id = param[1];
+       sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj, &trackpoint_attr_group);
 
-       return 0;
+       kfree(psmouse->private);
+       psmouse->private = NULL;
 }
 
 static int trackpoint_sync(struct psmouse *psmouse)
 {
-       struct trackpoint_data *tp = psmouse->private;
        unsigned char toggle;
+       struct trackpoint_data *tp = psmouse->private;
+
+       if (!tp)
+               return -1;
 
        /* Disable features that may make device unusable with this driver */
        trackpoint_read(&psmouse->ps2dev, TP_TOGGLE_TWOHAND, &toggle);
@@ -268,38 +263,27 @@ static void trackpoint_defaults(struct trackpoint_data *tp)
        tp->ext_dev = TP_DEF_EXT_DEV;
 }
 
-static void trackpoint_disconnect(struct psmouse *psmouse)
-{
-       sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj, &trackpoint_attr_group);
-
-       kfree(psmouse->private);
-       psmouse->private = NULL;
-}
-
-static int trackpoint_reconnect(struct psmouse *psmouse)
-{
-       if (trackpoint_start_protocol(psmouse, NULL))
-               return -1;
-
-       if (trackpoint_sync(psmouse))
-               return -1;
-
-       return 0;
-}
-
 int trackpoint_detect(struct psmouse *psmouse, int set_properties)
 {
        struct trackpoint_data *priv;
        struct ps2dev *ps2dev = &psmouse->ps2dev;
        unsigned char firmware_id;
        unsigned char button_info;
+       unsigned char param[2];
+
+       param[0] = param[1] = 0;
 
-       if (trackpoint_start_protocol(psmouse, &firmware_id))
+       if (ps2_command(ps2dev, param, MAKE_PS2_CMD(0, 2, TP_READ_ID)))
+               return -1;
+
+       if (param[0] != TP_MAGIC_IDENT)
                return -1;
 
        if (!set_properties)
                return 0;
 
+       firmware_id = param[1];
+
        if (trackpoint_read(&psmouse->ps2dev, TP_EXT_BTN, &button_info)) {
                printk(KERN_WARNING "trackpoint.c: failed to get extended button data\n");
                button_info = 0;
@@ -312,7 +296,7 @@ int trackpoint_detect(struct psmouse *psmouse, int set_properties)
        psmouse->vendor = "IBM";
        psmouse->name = "TrackPoint";
 
-       psmouse->reconnect = trackpoint_reconnect;
+       psmouse->reconnect = trackpoint_sync;
        psmouse->disconnect = trackpoint_disconnect;
 
        trackpoint_defaults(priv);