Magellan Linux

Annotation of /trunk/xorg-old/patches-6.8.2-r10/9010_all_6.7.99.1-logitech-ps2-plusplus-v2.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 167 - (hide annotations) (download)
Tue May 8 20:58:51 2007 UTC (17 years ago) by niro
File size: 5449 byte(s)
-import

1 niro 167 diff -rup xc-orig/programs/Xserver/hw/xfree86/input/mouse/mouse.c xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c
2     --- xc-orig/programs/Xserver/hw/xfree86/input/mouse/mouse.c 2003-02-10 19:33:06.000000000 -0800
3     +++ xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c 2003-03-05 13:52:30.000000000 -0800
4     @@ -189,6 +189,7 @@ typedef enum {
5     OPTION_X_AXIS_MAPPING,
6     OPTION_Y_AXIS_MAPPING,
7     OPTION_AUTO_SOFT,
8     + OPTION_LOGITECH_SMS,
9     OPTION_CLEAR_DTR,
10     OPTION_CLEAR_RTS,
11     OPTION_BAUD_RATE,
12     @@ -226,6 +227,7 @@ static const OptionInfoRec mouseOptions[
13     { OPTION_X_AXIS_MAPPING, "XAxisMapping", OPTV_STRING, {0}, FALSE },
14     { OPTION_Y_AXIS_MAPPING, "YAxisMapping", OPTV_STRING, {0}, FALSE },
15     { OPTION_AUTO_SOFT, "AutoSoft", OPTV_BOOLEAN, {0}, FALSE },
16     + { OPTION_LOGITECH_SMS, "SmartScroll", OPTV_INTEGER, {0}, FALSE },
17     /* serial options */
18     { OPTION_CLEAR_DTR, "ClearDTR", OPTV_BOOLEAN, {0}, FALSE },
19     { OPTION_CLEAR_RTS, "ClearRTS", OPTV_BOOLEAN, {0}, FALSE },
20     @@ -700,6 +702,12 @@ MouseHWOptions(InputInfoPtr pInfo)
21     = xf86SetBoolOption(pInfo->options, "AutoSoft", FALSE))) {
22     xf86Msg(X_CONFIG, "Don't initialize mouse when auto-probing\n");
23     }
24     +
25     + pMse->smartScroll = xf86SetIntOption(pInfo->options, "SmartScroll", 1);
26     + if (pMse->smartScroll) {
27     + xf86Msg(X_CONFIG, "%s: SmartScroll: %d \n", pInfo->name,
28     + pMse->smartScroll);
29     + }
30     pMse->sampleRate = xf86SetIntOption(pInfo->options, "SampleRate", 0);
31     if (pMse->sampleRate) {
32     xf86Msg(X_CONFIG, "%s: SampleRate: %d\n", pInfo->name,
33     @@ -1381,20 +1389,36 @@ MouseReadInput(InputInfoPtr pInfo)
34     buttons = (pBuf[0] & 0x04) >> 1 | /* Middle */
35     (pBuf[0] & 0x02) >> 1 | /* Right */
36     (pBuf[0] & 0x01) << 2; /* Left */
37     - dx = (pBuf[0] & 0x10) ? pBuf[1] - 256 : pBuf[1];
38     - if (((pBuf[0] & 0x48) == 0x48) &&
39     - (abs(dx) > 191) &&
40     - ((((pBuf[2] & 0x03) << 2) | 0x02) == (pBuf[1] & 0x0f))) {
41     +
42     + /*
43     + * PS2++ now uses 6 bits for type, 8 for data
44     + * 2 type bits were implied to be always-on
45     + */
46     + if ( ((pBuf[0] & 0x48) == 0x48) && ((pBuf[1] & 0x02) == 0x02) )
47     + {
48     /* extended data packet */
49     - switch ((((pBuf[0] & 0x30) >> 2) | ((pBuf[1] & 0x30) >> 4))) {
50     - case 1: /* wheel data packet */
51     + switch ( (pBuf[0] & 0x30) |
52     + ( (pBuf[1] & 0xf0) >> 4) ) {
53     + case 0x0d: /* P1 - wheel data, buttons 4, 5 packet */
54     + buttons |= ( pMse->lastButtons & ~0x18);
55     buttons |= ((pBuf[2] & 0x10) ? 0x08 : 0) | /* 4th button */
56     ((pBuf[2] & 0x20) ? 0x10 : 0); /* 5th button */
57     dx = dy = 0;
58     dz = (pBuf[2] & 0x08) ? (pBuf[2] & 0x0f) - 16 :
59     (pBuf[2] & 0x0f);
60     break;
61     - case 2: /* Logitech reserves this packet type */
62     + case 0x0e: /* P2 - buttons 4,5,6,7,8,9,10 info - NEW */
63     + buttons |= ( pMse->lastButtons & ~0x3f8);
64     + buttons |= ((pBuf[2] & 0x7f) << 3);
65     + break;
66     +#if 0
67     + /*
68     + * formerly case 2: Logitech updated PS/2++ (MMPS2),
69     + * and I guess it broke compatibility with manufacturers
70     + * that were latching onto it
71     + * is this what PS2TPP I see in the Linux 2.5.x
72     + * kernel source (psmouse.c) is for?
73     + */
74     /*
75     * IBM ScrollPoint uses this packet to encode its
76     * stick movement.
77     @@ -1405,7 +1429,7 @@ MouseReadInput(InputInfoPtr pInfo)
78     ((pBuf[2] >> 4) & 0x0f);
79     dw = (pBuf[2] & 0x08) ? (pBuf[2] & 0x0f) - 16 :
80     (pBuf[2] & 0x0f);
81     - break;
82     +#endif
83     case 0: /* device type packet - shouldn't happen */
84     default:
85     buttons |= (pMse->lastButtons & ~0x07);
86     @@ -2635,7 +2659,12 @@ initMouseHW(InputInfoPtr pInfo)
87     pMse->resolution);
88     } else {
89     unsigned char c2[2];
90     -
91     + unsigned char sms[] = { 0xe6,
92     + 0xe8, 0, 0xe8, 3,
93     + 0xe8, 0, 0xe8, 2,
94     + 0xe8, 0, 0xe8, 0,
95     + 0xe8, 0, 0xe8, 0 };
96     +
97     c = 0xE6; /*230*/ /* 1:1 scaling */
98     if (!ps2SendPacket(pInfo,&c,1)) {
99     if (!count--)
100     @@ -2664,6 +2693,18 @@ initMouseHW(InputInfoPtr pInfo)
101     return TRUE;
102     goto REDO;
103     }
104     + /*
105     + * this is on by default, but some users (me)
106     + * like it off
107     + */
108     + if (pMse->smartScroll)
109     + sms[16] |= 1;
110     + if (!ps2SendPacket(pInfo, sms, 17)) {
111     + if (!count--)
112     + return TRUE;
113     + goto REDO;
114     + }
115     +
116     c2[0] = 0xE8; /*232*/ /* set device resolution */
117     if (pMse->resolution > 0) {
118     if (pMse->resolution >= 200)
119     @@ -2677,11 +2718,20 @@ initMouseHW(InputInfoPtr pInfo)
120     } else {
121     c2[1] = 2;
122     }
123     - if (!ps2SendPacket(pInfo,c2,2)) {
124     + if (pMse->resolution >= 800) {
125     + /* for Logitech mice that support it */
126     + unsigned char cpi800[] = { 0xe6, 0xe6, 0xe6, 0xe8, 3 };
127     + if (!ps2SendPacket(pInfo, cpi800, 5)) {
128     + if (!count--)
129     + return TRUE;
130     + goto REDO;
131     + }
132     + } else if (!ps2SendPacket(pInfo,c2,2)) {
133     if (!count--)
134     return TRUE;
135     goto REDO;
136     - }
137     + }
138     +
139     usleep(30000);
140     xf86FlushInput(pInfo->fd);
141     if (!ps2EnableDataReporting(pInfo)) {
142     --- xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h.orig 2004-08-11 15:06:24.000000000 -0400
143     +++ xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h 2004-08-11 15:07:13.000000000 -0400
144     @@ -268,6 +268,7 @@
145     dataGoodProc dataGood;
146     int angleOffset;
147     pointer pDragLock; /* drag lock area */
148     + int smartScroll;
149     int xisbscale; /* buffer size for 1 event */
150     } MouseDevRec, *MouseDevPtr;
151    
152