Input: logips2pp - add sugnature 56 (Cordless MouseMan Wheel), cleanup
[linux-2.6.git] / drivers / input / mouse / logips2pp.c
index c88520d3d13cadc2c6b03819ab2ff9ade3861dd5..eb03f3a3f8a77c2e28ef22c03f1da92405035c8e 100644 (file)
@@ -19,6 +19,7 @@
 #define PS2PP_KIND_WHEEL       1
 #define PS2PP_KIND_MX          2
 #define PS2PP_KIND_TP3         3
+#define PS2PP_KIND_TRACKMAN    4
 
 /* Logitech mouse features */
 #define PS2PP_WHEEL            0x01
@@ -29,9 +30,9 @@
 #define PS2PP_NAV_BTN          0x20
 
 struct ps2pp_info {
-       const int model;
-       unsigned const int kind;
-       unsigned const int features;
+       u8 model;
+       u8 kind;
+       u16 features;
 };
 
 /*
@@ -198,9 +199,9 @@ static void ps2pp_disconnect(struct psmouse *psmouse)
        device_remove_file(&psmouse->ps2dev.serio->dev, &psmouse_attr_smartscroll.dattr);
 }
 
-static struct ps2pp_info *get_model_info(unsigned char model)
+static const struct ps2pp_info *get_model_info(unsigned char model)
 {
-       static struct ps2pp_info ps2pp_list[] = {
+       static const struct ps2pp_info ps2pp_list[] = {
                { 12,   0,                      PS2PP_SIDE_BTN},
                { 13,   0,                      0 },
                { 15,   PS2PP_KIND_MX,                                  /* MX1000 */
@@ -214,6 +215,7 @@ static struct ps2pp_info *get_model_info(unsigned char model)
                { 51,   0,                      0 },
                { 52,   PS2PP_KIND_WHEEL,       PS2PP_SIDE_BTN | PS2PP_WHEEL },
                { 53,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
+               { 56,   PS2PP_KIND_WHEEL,       PS2PP_SIDE_BTN | PS2PP_WHEEL }, /* Cordless MouseMan Wheel */
                { 61,   PS2PP_KIND_MX,                                  /* MX700 */
                                PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN |
                                PS2PP_EXTRA_BTN | PS2PP_NAV_BTN },
@@ -223,6 +225,7 @@ static struct ps2pp_info *get_model_info(unsigned char model)
                { 73,   0,                      PS2PP_SIDE_BTN },
                { 75,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
                { 76,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
+               { 79,   PS2PP_KIND_TRACKMAN,    PS2PP_WHEEL },          /* TrackMan with wheel */
                { 80,   PS2PP_KIND_WHEEL,       PS2PP_SIDE_BTN | PS2PP_WHEEL },
                { 81,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
                { 83,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
@@ -232,6 +235,7 @@ static struct ps2pp_info *get_model_info(unsigned char model)
                { 88,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
                { 96,   0,                      0 },
                { 97,   PS2PP_KIND_TP3,         PS2PP_WHEEL | PS2PP_HWHEEL },
+               { 99,   PS2PP_KIND_WHEEL,       PS2PP_WHEEL },
                { 100,  PS2PP_KIND_MX,                                  /* MX510 */
                                PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN |
                                PS2PP_EXTRA_BTN | PS2PP_NAV_BTN },
@@ -242,12 +246,11 @@ static struct ps2pp_info *get_model_info(unsigned char model)
                                PS2PP_EXTRA_BTN | PS2PP_NAV_BTN },
                { 114,  PS2PP_KIND_MX,                                  /* MX310 */
                                PS2PP_WHEEL | PS2PP_SIDE_BTN |
-                               PS2PP_TASK_BTN | PS2PP_EXTRA_BTN },
-               { }
+                               PS2PP_TASK_BTN | PS2PP_EXTRA_BTN }
        };
        int i;
 
-       for (i = 0; ps2pp_list[i].model; i++)
+       for (i = 0; i < ARRAY_SIZE(ps2pp_list); i++)
                if (model == ps2pp_list[i].model)
                        return &ps2pp_list[i];
 
@@ -259,7 +262,8 @@ static struct ps2pp_info *get_model_info(unsigned char model)
  * Set up input device's properties based on the detected mouse model.
  */
 
-static void ps2pp_set_model_properties(struct psmouse *psmouse, struct ps2pp_info *model_info,
+static void ps2pp_set_model_properties(struct psmouse *psmouse,
+                                      const struct ps2pp_info *model_info,
                                       int using_ps2pp)
 {
        struct input_dev *input_dev = psmouse->dev;
@@ -297,6 +301,10 @@ static void ps2pp_set_model_properties(struct psmouse *psmouse, struct ps2pp_inf
                        psmouse->name = "TouchPad 3";
                        break;
 
+               case PS2PP_KIND_TRACKMAN:
+                       psmouse->name = "TrackMan";
+                       break;
+
                default:
                        /*
                         * Set name to "Mouse" only when using PS2++,
@@ -321,7 +329,7 @@ int ps2pp_init(struct psmouse *psmouse, int set_properties)
        struct ps2dev *ps2dev = &psmouse->ps2dev;
        unsigned char param[4];
        unsigned char model, buttons;
-       struct ps2pp_info *model_info;
+       const struct ps2pp_info *model_info;
        int use_ps2pp = 0;
 
        param[0] = 0;
@@ -343,7 +351,7 @@ int ps2pp_init(struct psmouse *psmouse, int set_properties)
 /*
  * Do Logitech PS2++ / PS2T++ magic init.
  */
-               if (model == 97) { /* Touch Pad 3 */
+               if (model_info->kind == PS2PP_KIND_TP3) { /* Touch Pad 3 */
 
                        /* Unprotect RAM */
                        param[0] = 0x11; param[1] = 0x04; param[2] = 0x68;