Input: elantech - trust firmware about trackpoint presence
[deliverable/linux.git] / drivers / input / mouse / alps.h
index 03f88b6940c7c4e4b2f61c529adcf7dce0aaf96d..66240b47819a9569c975cedd1d5443b2b59f6b86 100644 (file)
 #ifndef _ALPS_H
 #define _ALPS_H
 
+#include <linux/input/mt.h>
+
 #define ALPS_PROTO_V1  1
 #define ALPS_PROTO_V2  2
 #define ALPS_PROTO_V3  3
 #define ALPS_PROTO_V4  4
 #define ALPS_PROTO_V5  5
 #define ALPS_PROTO_V6  6
+#define ALPS_PROTO_V7  7       /* t3btl t4s */
+
+#define MAX_TOUCHES    2
 
 #define DOLPHIN_COUNT_PER_ELECTRODE    64
 #define DOLPHIN_PROFILE_XOFFSET                8       /* x-electrode offset */
 #define DOLPHIN_PROFILE_YOFFSET                1       /* y-electrode offset */
 
+/*
+ * enum V7_PACKET_ID - defines the packet type for V7
+ * V7_PACKET_ID_IDLE: There's no finger and no button activity.
+ * V7_PACKET_ID_TWO: There's one or two non-resting fingers on touchpad
+ *  or there's button activities.
+ * V7_PACKET_ID_MULTI: There are at least three non-resting fingers.
+ * V7_PACKET_ID_NEW: The finger position in slot is not continues from
+ *  previous packet.
+*/
+enum V7_PACKET_ID {
+        V7_PACKET_ID_IDLE,
+        V7_PACKET_ID_TWO,
+        V7_PACKET_ID_MULTI,
+        V7_PACKET_ID_NEW,
+        V7_PACKET_ID_UNKNOWN,
+};
+
 /**
  * struct alps_model_info - touchpad ID table
  * @signature: E7 response string to match.
@@ -46,7 +68,7 @@ struct alps_model_info {
        unsigned char command_mode_resp;
        unsigned char proto_version;
        unsigned char byte0, mask0;
-       unsigned char flags;
+       int flags;
 };
 
 /**
@@ -65,14 +87,19 @@ struct alps_nibble_commands {
        unsigned char data;
 };
 
+struct alps_bitmap_point {
+       int start_bit;
+       int num_bits;
+};
+
 /**
  * struct alps_fields - decoded version of the report packet
  * @x_map: Bitmap of active X positions for MT.
  * @y_map: Bitmap of active Y positions for MT.
  * @fingers: Number of fingers for MT.
- * @x: X position for ST.
- * @y: Y position for ST.
- * @z: Z position for ST.
+ * @pressure: Pressure.
+ * @st: position for ST.
+ * @mt: position for MT.
  * @first_mp: Packet is the first of a multi-packet report.
  * @is_mp: Packet is part of a multi-packet report.
  * @left: Left touchpad button is active.
@@ -86,9 +113,11 @@ struct alps_fields {
        unsigned int x_map;
        unsigned int y_map;
        unsigned int fingers;
-       unsigned int x;
-       unsigned int y;
-       unsigned int z;
+
+       int pressure;
+       struct input_mt_pos st;
+       struct input_mt_pos mt[MAX_TOUCHES];
+
        unsigned int first_mp:1;
        unsigned int is_mp:1;
 
@@ -113,6 +142,7 @@ struct alps_fields {
  *   known format for this model.  The first byte of the report, ANDed with
  *   mask0, should match byte0.
  * @mask0: The mask used to check the first byte of the report.
+ * @fw_ver: cached copy of firmware version (EC report)
  * @flags: Additional device capabilities (passthrough port, trackstick, etc.).
  * @x_max: Largest possible X position value.
  * @y_max: Largest possible Y position value.
@@ -125,11 +155,7 @@ struct alps_fields {
  * @prev_fin: Finger bit from previous packet.
  * @multi_packet: Multi-packet data in progress.
  * @multi_data: Saved multi-packet data.
- * @x1: First X coordinate from last MT report.
- * @x2: Second X coordinate from last MT report.
- * @y1: First Y coordinate from last MT report.
- * @y2: Second Y coordinate from last MT report.
- * @fingers: Number of fingers from last MT report.
+ * @f: Decoded packet data fields.
  * @quirks: Bitmap of ALPS_QUIRK_*.
  * @timer: Timer for flushing out the final report packet in the stream.
  */
@@ -142,23 +168,25 @@ struct alps_data {
        int addr_command;
        unsigned char proto_version;
        unsigned char byte0, mask0;
-       unsigned char flags;
+       unsigned char fw_ver[3];
+       int flags;
        int x_max;
        int y_max;
        int x_bits;
        int y_bits;
+       unsigned int x_res;
+       unsigned int y_res;
 
        int (*hw_init)(struct psmouse *psmouse);
        void (*process_packet)(struct psmouse *psmouse);
-       void (*decode_fields)(struct alps_fields *f, unsigned char *p,
+       int (*decode_fields)(struct alps_fields *f, unsigned char *p,
                              struct psmouse *psmouse);
        void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1);
 
        int prev_fin;
        int multi_packet;
        unsigned char multi_data[6];
-       int x1, x2, y1, y2;
-       int fingers;
+       struct alps_fields f;
        u8 quirks;
        struct timer_list timer;
 };
This page took 0.029799 seconds and 5 git commands to generate.