psmouse-base.c (8d0bc2b456103a34c11e01305cd1aed1cde579e5) psmouse-base.c (a62f0d27b4196bad5e900d766b285feb7069cd16)
1/*
2 * PS/2 mouse driver
3 *
4 * Copyright (c) 1999-2002 Vojtech Pavlik
5 * Copyright (c) 2003-2004 Dmitry Torokhov
6 */
7
8/*

--- 133 unchanged lines hidden (view full) ---

142 input_report_rel(dev, REL_WHEEL, -(signed char) packet[3]);
143
144/*
145 * Scroll wheel and buttons on IntelliMouse Explorer
146 */
147
148 if (psmouse->type == PSMOUSE_IMEX) {
149 switch (packet[3] & 0xC0) {
1/*
2 * PS/2 mouse driver
3 *
4 * Copyright (c) 1999-2002 Vojtech Pavlik
5 * Copyright (c) 2003-2004 Dmitry Torokhov
6 */
7
8/*

--- 133 unchanged lines hidden (view full) ---

142 input_report_rel(dev, REL_WHEEL, -(signed char) packet[3]);
143
144/*
145 * Scroll wheel and buttons on IntelliMouse Explorer
146 */
147
148 if (psmouse->type == PSMOUSE_IMEX) {
149 switch (packet[3] & 0xC0) {
150 case 0x80: /* vertical scroll on IntelliMouse Explorer 4.0 */
151 input_report_rel(dev, REL_WHEEL, (int) (packet[3] & 32) - (int) (packet[3] & 31));
152 break;
153 case 0x40: /* horizontal scroll on IntelliMouse Explorer 4.0 */
154 input_report_rel(dev, REL_HWHEEL, (int) (packet[3] & 32) - (int) (packet[3] & 31));
155 break;
156 case 0x00:
157 case 0xC0:
158 input_report_rel(dev, REL_WHEEL, (int) (packet[3] & 8) - (int) (packet[3] & 7));
159 input_report_key(dev, BTN_SIDE, (packet[3] >> 4) & 1);
160 input_report_key(dev, BTN_EXTRA, (packet[3] >> 5) & 1);
161 break;
150 case 0x80: /* vertical scroll on IntelliMouse Explorer 4.0 */
151 input_report_rel(dev, REL_WHEEL, (int) (packet[3] & 32) - (int) (packet[3] & 31));
152 break;
153 case 0x40: /* horizontal scroll on IntelliMouse Explorer 4.0 */
154 input_report_rel(dev, REL_HWHEEL, (int) (packet[3] & 32) - (int) (packet[3] & 31));
155 break;
156 case 0x00:
157 case 0xC0:
158 input_report_rel(dev, REL_WHEEL, (int) (packet[3] & 8) - (int) (packet[3] & 7));
159 input_report_key(dev, BTN_SIDE, (packet[3] >> 4) & 1);
160 input_report_key(dev, BTN_EXTRA, (packet[3] >> 5) & 1);
161 break;
162 }
163 }
164
165/*
166 * Extra buttons on Genius NewNet 3D
167 */
168
169 if (psmouse->type == PSMOUSE_GENPS) {

--- 72 unchanged lines hidden (view full) ---

242 * by calling corresponding protocol handler.
243 */
244
245static int psmouse_handle_byte(struct psmouse *psmouse)
246{
247 psmouse_ret_t rc = psmouse->protocol_handler(psmouse);
248
249 switch (rc) {
162 }
163 }
164
165/*
166 * Extra buttons on Genius NewNet 3D
167 */
168
169 if (psmouse->type == PSMOUSE_GENPS) {

--- 72 unchanged lines hidden (view full) ---

242 * by calling corresponding protocol handler.
243 */
244
245static int psmouse_handle_byte(struct psmouse *psmouse)
246{
247 psmouse_ret_t rc = psmouse->protocol_handler(psmouse);
248
249 switch (rc) {
250 case PSMOUSE_BAD_DATA:
251 if (psmouse->state == PSMOUSE_ACTIVATED) {
252 printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n",
253 psmouse->name, psmouse->phys, psmouse->pktcnt);
254 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) {
255 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
256 printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n");
257 serio_reconnect(psmouse->ps2dev.serio);
258 return -1;
259 }
250 case PSMOUSE_BAD_DATA:
251 if (psmouse->state == PSMOUSE_ACTIVATED) {
252 printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n",
253 psmouse->name, psmouse->phys, psmouse->pktcnt);
254 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) {
255 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
256 printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n");
257 serio_reconnect(psmouse->ps2dev.serio);
258 return -1;
260 }
259 }
261 psmouse->pktcnt = 0;
262 break;
260 }
261 psmouse->pktcnt = 0;
262 break;
263
263
264 case PSMOUSE_FULL_PACKET:
265 psmouse->pktcnt = 0;
266 if (psmouse->out_of_sync_cnt) {
267 psmouse->out_of_sync_cnt = 0;
268 printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n",
269 psmouse->name, psmouse->phys);
270 }
271 break;
264 case PSMOUSE_FULL_PACKET:
265 psmouse->pktcnt = 0;
266 if (psmouse->out_of_sync_cnt) {
267 psmouse->out_of_sync_cnt = 0;
268 printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n",
269 psmouse->name, psmouse->phys);
270 }
271 break;
272
272
273 case PSMOUSE_GOOD_DATA:
274 break;
273 case PSMOUSE_GOOD_DATA:
274 break;
275 }
276 return 0;
277}
278
279/*
280 * psmouse_interrupt() handles incoming characters, either passing them
281 * for normal processing or gathering them as command response.
282 */

--- 957 unchanged lines hidden (view full) ---

1240
1241 psmouse->set_rate = psmouse_set_rate;
1242 psmouse->set_resolution = psmouse_set_resolution;
1243 psmouse->poll = psmouse_poll;
1244 psmouse->protocol_handler = psmouse_process_byte;
1245 psmouse->pktsize = 3;
1246
1247 if (proto && (proto->detect || proto->init)) {
275 }
276 return 0;
277}
278
279/*
280 * psmouse_interrupt() handles incoming characters, either passing them
281 * for normal processing or gathering them as command response.
282 */

--- 957 unchanged lines hidden (view full) ---

1240
1241 psmouse->set_rate = psmouse_set_rate;
1242 psmouse->set_resolution = psmouse_set_resolution;
1243 psmouse->poll = psmouse_poll;
1244 psmouse->protocol_handler = psmouse_process_byte;
1245 psmouse->pktsize = 3;
1246
1247 if (proto && (proto->detect || proto->init)) {
1248 if (proto->detect && proto->detect(psmouse, 1) < 0)
1248 if (proto->detect && proto->detect(psmouse, true) < 0)
1249 return -1;
1250
1251 if (proto->init && proto->init(psmouse) < 0)
1252 return -1;
1253
1254 psmouse->type = proto->type;
1255 selected_proto = proto;
1256 } else {

--- 477 unchanged lines hidden ---
1249 return -1;
1250
1251 if (proto->init && proto->init(psmouse) < 0)
1252 return -1;
1253
1254 psmouse->type = proto->type;
1255 selected_proto = proto;
1256 } else {

--- 477 unchanged lines hidden ---