|
@@ -40,33 +40,70 @@
|
|
#define YMIN_NOMINAL 1408
|
|
#define YMIN_NOMINAL 1408
|
|
#define YMAX_NOMINAL 4448
|
|
#define YMAX_NOMINAL 4448
|
|
|
|
|
|
|
|
+
|
|
/*****************************************************************************
|
|
/*****************************************************************************
|
|
- * Synaptics communications functions
|
|
|
|
|
|
+ * Stuff we need even when we do not want native Synaptics support
|
|
****************************************************************************/
|
|
****************************************************************************/
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Send a command to the synpatics touchpad by special commands
|
|
|
|
|
|
+ * Set the synaptics touchpad mode byte by special commands
|
|
*/
|
|
*/
|
|
-static int synaptics_send_cmd(struct psmouse *psmouse, unsigned char c, unsigned char *param)
|
|
|
|
|
|
+static int synaptics_mode_cmd(struct psmouse *psmouse, unsigned char mode)
|
|
{
|
|
{
|
|
- if (psmouse_sliced_command(psmouse, c))
|
|
|
|
|
|
+ unsigned char param[1];
|
|
|
|
+
|
|
|
|
+ if (psmouse_sliced_command(psmouse, mode))
|
|
return -1;
|
|
return -1;
|
|
- if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO))
|
|
|
|
|
|
+ param[0] = SYN_PS_SET_MODE2;
|
|
|
|
+ if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_SETRATE))
|
|
return -1;
|
|
return -1;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int synaptics_detect(struct psmouse *psmouse, int set_properties)
|
|
|
|
+{
|
|
|
|
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
|
|
|
|
+ unsigned char param[4];
|
|
|
|
+
|
|
|
|
+ param[0] = 0;
|
|
|
|
+
|
|
|
|
+ ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
+ ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
+ ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
+ ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
+ ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO);
|
|
|
|
+
|
|
|
|
+ if (param[1] != 0x47)
|
|
|
|
+ return -ENODEV;
|
|
|
|
+
|
|
|
|
+ if (set_properties) {
|
|
|
|
+ psmouse->vendor = "Synaptics";
|
|
|
|
+ psmouse->name = "TouchPad";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void synaptics_reset(struct psmouse *psmouse)
|
|
|
|
+{
|
|
|
|
+ /* reset touchpad back to relative mode, gestures enabled */
|
|
|
|
+ synaptics_mode_cmd(psmouse, 0);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_MOUSE_PS2_SYNAPTICS
|
|
|
|
+
|
|
|
|
+/*****************************************************************************
|
|
|
|
+ * Synaptics communications functions
|
|
|
|
+ ****************************************************************************/
|
|
|
|
+
|
|
/*
|
|
/*
|
|
- * Set the synaptics touchpad mode byte by special commands
|
|
|
|
|
|
+ * Send a command to the synpatics touchpad by special commands
|
|
*/
|
|
*/
|
|
-static int synaptics_mode_cmd(struct psmouse *psmouse, unsigned char mode)
|
|
|
|
|
|
+static int synaptics_send_cmd(struct psmouse *psmouse, unsigned char c, unsigned char *param)
|
|
{
|
|
{
|
|
- unsigned char param[1];
|
|
|
|
-
|
|
|
|
- if (psmouse_sliced_command(psmouse, mode))
|
|
|
|
|
|
+ if (psmouse_sliced_command(psmouse, c))
|
|
return -1;
|
|
return -1;
|
|
- param[0] = SYN_PS_SET_MODE2;
|
|
|
|
- if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_SETRATE))
|
|
|
|
|
|
+ if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO))
|
|
return -1;
|
|
return -1;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -529,12 +566,6 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv)
|
|
clear_bit(REL_Y, dev->relbit);
|
|
clear_bit(REL_Y, dev->relbit);
|
|
}
|
|
}
|
|
|
|
|
|
-void synaptics_reset(struct psmouse *psmouse)
|
|
|
|
-{
|
|
|
|
- /* reset touchpad back to relative mode, gestures enabled */
|
|
|
|
- synaptics_mode_cmd(psmouse, 0);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void synaptics_disconnect(struct psmouse *psmouse)
|
|
static void synaptics_disconnect(struct psmouse *psmouse)
|
|
{
|
|
{
|
|
synaptics_reset(psmouse);
|
|
synaptics_reset(psmouse);
|
|
@@ -569,30 +600,6 @@ static int synaptics_reconnect(struct psmouse *psmouse)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-int synaptics_detect(struct psmouse *psmouse, int set_properties)
|
|
|
|
-{
|
|
|
|
- struct ps2dev *ps2dev = &psmouse->ps2dev;
|
|
|
|
- unsigned char param[4];
|
|
|
|
-
|
|
|
|
- param[0] = 0;
|
|
|
|
-
|
|
|
|
- ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
- ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
- ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
- ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
|
|
|
|
- ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO);
|
|
|
|
-
|
|
|
|
- if (param[1] != 0x47)
|
|
|
|
- return -1;
|
|
|
|
-
|
|
|
|
- if (set_properties) {
|
|
|
|
- psmouse->vendor = "Synaptics";
|
|
|
|
- psmouse->name = "TouchPad";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
#if defined(__i386__)
|
|
#if defined(__i386__)
|
|
#include <linux/dmi.h>
|
|
#include <linux/dmi.h>
|
|
static struct dmi_system_id toshiba_dmi_table[] = {
|
|
static struct dmi_system_id toshiba_dmi_table[] = {
|
|
@@ -680,4 +687,12 @@ int synaptics_init(struct psmouse *psmouse)
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#else /* CONFIG_MOUSE_PS2_SYNAPTICS */
|
|
|
|
+
|
|
|
|
+int synaptics_init(struct psmouse *psmouse)
|
|
|
|
+{
|
|
|
|
+ return -ENOSYS;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#endif /* CONFIG_MOUSE_PS2_SYNAPTICS */
|
|
|
|
|