Hi,
Default touchpad behaves as mouse (compatible with xf86-input-mouse)
for full power need used xf86-input-synaptics.
Please check work of touchpad in compat mode (xf86-input-mouse),
who are interested check xf86-input-synaptics.
Driver xf86-input-synaptics need to build manually:
update src and xenocara tree
cd /usr/src
make obj includes
cd /usr/xenocara/driver/xf86-input-synaptics
make -f Makefile.bsd-wrapper obj build
--
Alexandr Shadchin
Index: pms.c
===
RCS file: /cvs/src/sys/dev/pckbc/pms.c,v
retrieving revision 1.18
diff -u -p -r1.18 pms.c
--- pms.c 3 Jan 2011 19:46:34 - 1.18
+++ pms.c 7 May 2011 21:27:46 -
@@ -28,6 +28,7 @@
#include sys/systm.h
#include sys/device.h
#include sys/ioctl.h
+#include sys/malloc.h
#include machine/bus.h
@@ -40,12 +41,15 @@
#define DEVNAME(sc)((sc)-sc_dev.dv_xname)
+#define WSMOUSE_BUTTON(x) (1 ((x) - 1))
+
struct pms_softc;
struct pms_protocol {
int type;
#define PMS_STANDARD 0
#define PMS_INTELLI1
+#define PMS_SYNAPTICS 2
u_int packetsize;
int (*enable)(struct pms_softc *);
int (*ioctl)(struct pms_softc *, u_long, caddr_t, int, struct proc *);
@@ -54,6 +58,30 @@ struct pms_protocol {
void (*disable)(struct pms_softc *);
};
+struct synaptics_softc {
+ int identify;
+ int capabilities, ext_capabilities;
+ int model, ext_model;
+ int resolution, dimension;
+
+ int mode;
+
+ int res_x, res_y;
+ int min_x, min_y;
+ int max_x, max_y;
+
+ /* Compat mode */
+ int wsmode;
+ int old_x, old_y;
+ int count;
+#define SYNAPTICS_COUNT2
+#define SYNAPTICS_SCALE4
+#define SYNAPTICS_PRESSURE 30
+#define SYNAPTICS_MAXSPEED 30
+
+ int dev_pt_attach;
+};
+
struct pms_softc { /* driver status information */
struct device sc_dev;
@@ -64,56 +92,48 @@ struct pms_softc { /* driver status inf
#define PMS_STATE_ENABLED 1
#define PMS_STATE_SUSPENDED2
+ int sc_dev_enable;
+#define PMS_DEV_IGNORE 0x00
+#define PMS_DEV_PRIMARY0x01
+#define PMS_DEV_SECONDARY 0x02
+
int poll;
int inputstate;
+ int is_touchpad;
const struct pms_protocol *protocol;
+ struct synaptics_softc *synaptics;
u_char packet[8];
struct device *sc_wsmousedev;
+ struct device *sc_pt_wsmousedev;
};
-#define PMS_BUTTON1DOWN0x0001 /* left */
-#define PMS_BUTTON2DOWN0x0002 /* middle */
-#define PMS_BUTTON3DOWN0x0004 /* right */
-
static const u_int butmap[8] = {
0,
- PMS_BUTTON1DOWN,
- PMS_BUTTON3DOWN,
- PMS_BUTTON1DOWN | PMS_BUTTON3DOWN,
- PMS_BUTTON2DOWN,
- PMS_BUTTON1DOWN | PMS_BUTTON2DOWN,
- PMS_BUTTON2DOWN | PMS_BUTTON3DOWN,
- PMS_BUTTON1DOWN | PMS_BUTTON2DOWN | PMS_BUTTON3DOWN
+ WSMOUSE_BUTTON(1),
+ WSMOUSE_BUTTON(3),
+ WSMOUSE_BUTTON(1) | WSMOUSE_BUTTON(3),
+ WSMOUSE_BUTTON(2),
+ WSMOUSE_BUTTON(1) | WSMOUSE_BUTTON(2),
+ WSMOUSE_BUTTON(2) | WSMOUSE_BUTTON(3),
+ WSMOUSE_BUTTON(1) | WSMOUSE_BUTTON(2) | WSMOUSE_BUTTON(3)
};
-/* PS/2 mouse data packet */
-#define PMS_PS2_BUTTONSMASK0x07
-#define PMS_PS2_BUTTON10x01/* left */
-#define PMS_PS2_BUTTON20x04/* middle */
-#define PMS_PS2_BUTTON30x02/* right */
-#define PMS_PS2_XNEG 0x10
-#define PMS_PS2_YNEG 0x20
-
-#define PMS_INTELLI_MAGIC1 200
-#define PMS_INTELLI_MAGIC2 100
-#define PMS_INTELLI_MAGIC3 80
-#define PMS_INTELLI_ID 0x03
-
intpmsprobe(struct device *, void *, void *);
void pmsattach(struct device *, struct device *, void *);
intpmsactivate(struct device *, int);
void pmsinput(void *, int);
-intpms_change_state(struct pms_softc *, int);
+intpms_change_state(struct pms_softc *, int, int);
intpms_ioctl(void *, u_long, caddr_t, int, struct proc *);
intpms_enable(void *);
void pms_disable(void *);
intpms_cmd(struct pms_softc *, u_char *, int, u_char *, int);
+intpms_spec_cmd(struct pms_softc *, int);
intpms_get_devid(struct pms_softc *, u_char *);
intpms_get_status(struct pms_softc *, u_char *);
intpms_set_rate(struct pms_softc *, int);
@@ -129,6 +149,21 @@ intpms_ioctl_mouse(struct pms_softc *,
intpms_sync_mouse(struct pms_softc *, int);
void pms_proc_mouse(struct pms_softc *);
+intpms_enable_synaptics(struct pms_softc *);
+intpms_ioctl_synaptics(struct pms_softc *, u_long, caddr_t, int, struct
proc *);
+intpms_sync_synaptics(struct pms_softc *, int);
+void pms_proc_synaptics(struct pms_softc *);
+void pms_disable_synaptics(struct pms_softc *);
+
+intsynaptics_set_mode(struct pms_softc *,