Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53399
b: refs/heads/master
c: 55e3d92
h: refs/heads/master
i:
  53397: ca75789
  53395: e9cf796
  53391: ffd1f95
v: v3
  • Loading branch information
Andres Salomon authored and Dmitry Torokhov committed Mar 10, 2007
1 parent c0a3713 commit 3b46cbc
Show file tree
Hide file tree
Showing 11 changed files with 196 additions and 60 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cb9def4dff9fe7e3d3114eba4e2d89f52265e22c
refs/heads/master: 55e3d9224b60df0fd2dc36bff9b538ce40fd9586
61 changes: 60 additions & 1 deletion trunk/drivers/input/mouse/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,65 @@ config MOUSE_PS2
To compile this driver as a module, choose M here: the
module will be called psmouse.

config MOUSE_PS2_ALPS
bool "ALPS PS/2 mouse protocol extension" if EMBEDDED
default y
depends on MOUSE_PS2
---help---
Say Y here if you have an ALPS PS/2 touchpad connected to
your system.

If unsure, say Y.

config MOUSE_PS2_LOGIPS2PP
bool "Logictech PS/2++ mouse protocol extension" if EMBEDDED
default y
depends on MOUSE_PS2
---help---
Say Y here if you have a Logictech PS/2++ mouse connected to
your system.

If unsure, say Y.

config MOUSE_PS2_SYNAPTICS
bool "Synaptics PS/2 mouse protocol extension" if EMBEDDED
default y
depends on MOUSE_PS2
---help---
Say Y here if you have a Synaptics PS/2 TouchPad connected to
your system.

If unsure, say Y.

config MOUSE_PS2_LIFEBOOK
bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED
default y
depends on MOUSE_PS2
---help---
Say Y here if you have a Fujitsu B-series Lifebook PS/2
TouchScreen connected to your system.

If unsure, say Y.

config MOUSE_PS2_TRACKPOINT
bool "IBM Trackpoint PS/2 mouse protocol extension" if EMBEDDED
default y
depends on MOUSE_PS2
---help---
Say Y here if you have an IBM Trackpoint PS/2 mouse connected
to your system.

If unsure, say Y.

config MOUSE_PS2_TOUCHKIT
bool "eGalax TouchKit PS/2 protocol extension"
depends on MOUSE_PS2
---help---
Say Y here if you have an eGalax TouchKit PS/2 touchscreen
connected to your system.

If unsure, say N.

config MOUSE_SERIAL
tristate "Serial mouse"
select SERIO
Expand Down Expand Up @@ -118,7 +177,7 @@ config MOUSE_VSXXXAA
digitizer (VSXXX-AB) DEC produced.

config MOUSE_HIL
tristate "HIL pointers (mice etc)."
tristate "HIL pointers (mice etc)."
depends on GSC || HP300
select HP_SDC
select HIL_MLC
Expand Down
9 changes: 7 additions & 2 deletions trunk/drivers/input/mouse/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,10 @@ obj-$(CONFIG_MOUSE_SERIAL) += sermouse.o
obj-$(CONFIG_MOUSE_HIL) += hil_ptr.o
obj-$(CONFIG_MOUSE_VSXXXAA) += vsxxxaa.o

psmouse-objs := psmouse-base.o alps.o logips2pp.o synaptics.o lifebook.o \
trackpoint.o touchkit_ps2.o
psmouse-objs := psmouse-base.o synaptics.o

psmouse-$(CONFIG_MOUSE_PS2_ALPS) += alps.o
psmouse-$(CONFIG_MOUSE_PS2_LOGIPS2PP) += logips2pp.o
psmouse-$(CONFIG_MOUSE_PS2_LIFEBOOK) += lifebook.o
psmouse-$(CONFIG_MOUSE_PS2_TRACKPOINT) += trackpoint.o
psmouse-$(CONFIG_MOUSE_PS2_TOUCHKIT) += touchkit_ps2.o
17 changes: 14 additions & 3 deletions trunk/drivers/input/mouse/alps.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
#ifndef _ALPS_H
#define _ALPS_H

int alps_detect(struct psmouse *psmouse, int set_properties);
int alps_init(struct psmouse *psmouse);

struct alps_model_info {
unsigned char signature[3];
unsigned char byte0, mask0;
Expand All @@ -29,4 +26,18 @@ struct alps_data {
int prev_fin; /* Finger bit from previous packet */
};

#ifdef CONFIG_MOUSE_PS2_ALPS
int alps_detect(struct psmouse *psmouse, int set_properties);
int alps_init(struct psmouse *psmouse);
#else
inline int alps_detect(struct psmouse *psmouse, int set_properties)
{
return -ENOSYS;
}
inline int alps_init(struct psmouse *psmouse)
{
return -ENOSYS;
}
#endif /* CONFIG_MOUSE_PS2_ALPS */

#endif
11 changes: 11 additions & 0 deletions trunk/drivers/input/mouse/lifebook.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,18 @@
#ifndef _LIFEBOOK_H
#define _LIFEBOOK_H

#ifdef CONFIG_MOUSE_PS2_LIFEBOOK
int lifebook_detect(struct psmouse *psmouse, int set_properties);
int lifebook_init(struct psmouse *psmouse);
#else
inline int lifebook_detect(struct psmouse *psmouse, int set_properties)
{
return -ENOSYS;
}
inline int lifebook_init(struct psmouse *psmouse)
{
return -ENOSYS;
}
#endif

#endif
7 changes: 7 additions & 0 deletions trunk/drivers/input/mouse/logips2pp.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@
#ifndef _LOGIPS2PP_H
#define _LOGIPS2PP_H

#ifdef CONFIG_MOUSE_PS2_LOGIPS2PP
int ps2pp_init(struct psmouse *psmouse, int set_properties);
#else
inline int ps2pp_init(struct psmouse *psmouse, int set_properties)
{
return -ENOSYS;
}
#endif /* CONFIG_MOUSE_PS2_LOGIPS2PP */

#endif
16 changes: 15 additions & 1 deletion trunk/drivers/input/mouse/psmouse-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,9 @@ static int psmouse_extensions(struct psmouse *psmouse,
return PSMOUSE_THINKPS;

/*
* Try Synaptics TouchPad
* Try Synaptics TouchPad. Note that probing is done even if Synaptics protocol
* support is disabled in config - we need to know if it is synaptics so we
* can reset it properly after probing for intellimouse.
*/
if (max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse, set_properties) == 0) {
synaptics_hardware = 1;
Expand Down Expand Up @@ -661,12 +663,14 @@ static const struct psmouse_protocol psmouse_protocols[] = {
.maxproto = 1,
.detect = ps2bare_detect,
},
#ifdef CONFIG_MOUSE_PS2_LOGIPS2PP
{
.type = PSMOUSE_PS2PP,
.name = "PS2++",
.alias = "logitech",
.detect = ps2pp_init,
},
#endif
{
.type = PSMOUSE_THINKPS,
.name = "ThinkPS/2",
Expand All @@ -693,38 +697,48 @@ static const struct psmouse_protocol psmouse_protocols[] = {
.maxproto = 1,
.detect = im_explorer_detect,
},
#ifdef CONFIG_MOUSE_PS2_SYNAPTICS
{
.type = PSMOUSE_SYNAPTICS,
.name = "SynPS/2",
.alias = "synaptics",
.detect = synaptics_detect,
.init = synaptics_init,
},
#endif
#ifdef CONFIG_MOUSE_PS2_ALPS
{
.type = PSMOUSE_ALPS,
.name = "AlpsPS/2",
.alias = "alps",
.detect = alps_detect,
.init = alps_init,
},
#endif
#ifdef CONFIG_MOUSE_PS2_LIFEBOOK
{
.type = PSMOUSE_LIFEBOOK,
.name = "LBPS/2",
.alias = "lifebook",
.init = lifebook_init,
},
#endif
#ifdef CONFIG_MOUSE_PS2_TRACKPOINT
{
.type = PSMOUSE_TRACKPOINT,
.name = "TPPS/2",
.alias = "trackpoint",
.detect = trackpoint_detect,
},
#endif
#ifdef CONFIG_MOUSE_PS2_TOUCHKIT
{
.type = PSMOUSE_TOUCHKIT_PS2,
.name = "touchkitPS/2",
.alias = "touchkit",
.detect = touchkit_ps2_detect,
},
#endif
{
.type = PSMOUSE_AUTO,
.name = "auto",
Expand Down
99 changes: 57 additions & 42 deletions trunk/drivers/input/mouse/synaptics.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,33 +40,70 @@
#define YMIN_NOMINAL 1408
#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;
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 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;
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 0;
}
Expand Down Expand Up @@ -529,12 +566,6 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv)
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)
{
synaptics_reset(psmouse);
Expand Down Expand Up @@ -569,30 +600,6 @@ static int synaptics_reconnect(struct psmouse *psmouse)
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__)
#include <linux/dmi.h>
static struct dmi_system_id toshiba_dmi_table[] = {
Expand Down Expand Up @@ -680,4 +687,12 @@ int synaptics_init(struct psmouse *psmouse)
return -1;
}

#else /* CONFIG_MOUSE_PS2_SYNAPTICS */

int synaptics_init(struct psmouse *psmouse)
{
return -ENOSYS;
}

#endif /* CONFIG_MOUSE_PS2_SYNAPTICS */

Loading

0 comments on commit 3b46cbc

Please sign in to comment.