Lines Matching refs:mouse

114 static void vsxxxaa_drop_bytes(struct vsxxxaa *mouse, int num)  in vsxxxaa_drop_bytes()  argument
116 if (num >= mouse->count) { in vsxxxaa_drop_bytes()
117 mouse->count = 0; in vsxxxaa_drop_bytes()
119 memmove(mouse->buf, mouse->buf + num, BUFLEN - num); in vsxxxaa_drop_bytes()
120 mouse->count -= num; in vsxxxaa_drop_bytes()
124 static void vsxxxaa_queue_byte(struct vsxxxaa *mouse, unsigned char byte) in vsxxxaa_queue_byte() argument
126 if (mouse->count == BUFLEN) { in vsxxxaa_queue_byte()
128 mouse->name, mouse->phys); in vsxxxaa_queue_byte()
129 vsxxxaa_drop_bytes(mouse, 1); in vsxxxaa_queue_byte()
134 mouse->buf[mouse->count++] = byte; in vsxxxaa_queue_byte()
137 static void vsxxxaa_detection_done(struct vsxxxaa *mouse) in vsxxxaa_detection_done() argument
139 switch (mouse->type) { in vsxxxaa_detection_done()
141 strlcpy(mouse->name, "DEC VSXXX-AA/-GA mouse", in vsxxxaa_detection_done()
142 sizeof(mouse->name)); in vsxxxaa_detection_done()
146 strlcpy(mouse->name, "DEC VSXXX-AB digitizer", in vsxxxaa_detection_done()
147 sizeof(mouse->name)); in vsxxxaa_detection_done()
151 snprintf(mouse->name, sizeof(mouse->name), in vsxxxaa_detection_done()
153 mouse->type); in vsxxxaa_detection_done()
159 mouse->name, mouse->version, mouse->country, mouse->phys); in vsxxxaa_detection_done()
165 static int vsxxxaa_check_packet(struct vsxxxaa *mouse, int packet_len) in vsxxxaa_check_packet() argument
170 if (!IS_HDR_BYTE(mouse->buf[0])) { in vsxxxaa_check_packet()
171 DBG("vsck: len=%d, 1st=0x%02x\n", packet_len, mouse->buf[0]); in vsxxxaa_check_packet()
177 if (IS_HDR_BYTE(mouse->buf[i])) { in vsxxxaa_check_packet()
182 packet_len, i, mouse->buf[i]); in vsxxxaa_check_packet()
190 static inline int vsxxxaa_smells_like_packet(struct vsxxxaa *mouse, in vsxxxaa_smells_like_packet() argument
193 return mouse->count >= len && MATCH_PACKET_TYPE(mouse->buf[0], type); in vsxxxaa_smells_like_packet()
196 static void vsxxxaa_handle_REL_packet(struct vsxxxaa *mouse) in vsxxxaa_handle_REL_packet() argument
198 struct input_dev *dev = mouse->dev; in vsxxxaa_handle_REL_packet()
199 unsigned char *buf = mouse->buf; in vsxxxaa_handle_REL_packet()
234 vsxxxaa_drop_bytes(mouse, 3); in vsxxxaa_handle_REL_packet()
237 mouse->name, mouse->phys, dx, dy, in vsxxxaa_handle_REL_packet()
252 static void vsxxxaa_handle_ABS_packet(struct vsxxxaa *mouse) in vsxxxaa_handle_ABS_packet() argument
254 struct input_dev *dev = mouse->dev; in vsxxxaa_handle_ABS_packet()
255 unsigned char *buf = mouse->buf; in vsxxxaa_handle_ABS_packet()
285 vsxxxaa_drop_bytes(mouse, 5); in vsxxxaa_handle_ABS_packet()
288 mouse->name, mouse->phys, x, y, in vsxxxaa_handle_ABS_packet()
304 static void vsxxxaa_handle_POR_packet(struct vsxxxaa *mouse) in vsxxxaa_handle_POR_packet() argument
306 struct input_dev *dev = mouse->dev; in vsxxxaa_handle_POR_packet()
307 unsigned char *buf = mouse->buf; in vsxxxaa_handle_POR_packet()
329 mouse->version = buf[0] & 0x0f; in vsxxxaa_handle_POR_packet()
330 mouse->country = (buf[1] >> 4) & 0x07; in vsxxxaa_handle_POR_packet()
331 mouse->type = buf[1] & 0x0f; in vsxxxaa_handle_POR_packet()
343 vsxxxaa_drop_bytes(mouse, 4); in vsxxxaa_handle_POR_packet()
344 vsxxxaa_detection_done(mouse); in vsxxxaa_handle_POR_packet()
356 mouse->name, mouse->phys, error); in vsxxxaa_handle_POR_packet()
367 mouse->name, mouse->phys); in vsxxxaa_handle_POR_packet()
368 serio_write(mouse->serio, 'S'); /* Standard format */ in vsxxxaa_handle_POR_packet()
370 serio_write(mouse->serio, 'R'); /* Incremental */ in vsxxxaa_handle_POR_packet()
372 serio_write(mouse->serio, 'L'); /* 72 samples/sec */ in vsxxxaa_handle_POR_packet()
375 static void vsxxxaa_parse_buffer(struct vsxxxaa *mouse) in vsxxxaa_parse_buffer() argument
377 unsigned char *buf = mouse->buf; in vsxxxaa_parse_buffer()
391 while (mouse->count > 0 && !IS_HDR_BYTE(buf[0])) { in vsxxxaa_parse_buffer()
394 mouse->name, mouse->phys); in vsxxxaa_parse_buffer()
395 vsxxxaa_drop_bytes(mouse, 1); in vsxxxaa_parse_buffer()
402 if (vsxxxaa_smells_like_packet(mouse, VSXXXAA_PACKET_REL, 3)) { in vsxxxaa_parse_buffer()
404 stray_bytes = vsxxxaa_check_packet(mouse, 3); in vsxxxaa_parse_buffer()
406 vsxxxaa_handle_REL_packet(mouse); in vsxxxaa_parse_buffer()
408 } else if (vsxxxaa_smells_like_packet(mouse, in vsxxxaa_parse_buffer()
411 stray_bytes = vsxxxaa_check_packet(mouse, 5); in vsxxxaa_parse_buffer()
413 vsxxxaa_handle_ABS_packet(mouse); in vsxxxaa_parse_buffer()
415 } else if (vsxxxaa_smells_like_packet(mouse, in vsxxxaa_parse_buffer()
418 stray_bytes = vsxxxaa_check_packet(mouse, 4); in vsxxxaa_parse_buffer()
420 vsxxxaa_handle_POR_packet(mouse); in vsxxxaa_parse_buffer()
429 vsxxxaa_drop_bytes(mouse, stray_bytes); in vsxxxaa_parse_buffer()
438 struct vsxxxaa *mouse = serio_get_drvdata(serio); in vsxxxaa_interrupt() local
440 vsxxxaa_queue_byte(mouse, data); in vsxxxaa_interrupt()
441 vsxxxaa_parse_buffer(mouse); in vsxxxaa_interrupt()
448 struct vsxxxaa *mouse = serio_get_drvdata(serio); in vsxxxaa_disconnect() local
452 input_unregister_device(mouse->dev); in vsxxxaa_disconnect()
453 kfree(mouse); in vsxxxaa_disconnect()
458 struct vsxxxaa *mouse; in vsxxxaa_connect() local
462 mouse = kzalloc(sizeof(struct vsxxxaa), GFP_KERNEL); in vsxxxaa_connect()
464 if (!mouse || !input_dev) in vsxxxaa_connect()
467 mouse->dev = input_dev; in vsxxxaa_connect()
468 mouse->serio = serio; in vsxxxaa_connect()
469 strlcat(mouse->name, "DEC VSXXX-AA/-GA mouse or VSXXX-AB digitizer", in vsxxxaa_connect()
470 sizeof(mouse->name)); in vsxxxaa_connect()
471 snprintf(mouse->phys, sizeof(mouse->phys), "%s/input0", serio->phys); in vsxxxaa_connect()
473 input_dev->name = mouse->name; in vsxxxaa_connect()
474 input_dev->phys = mouse->phys; in vsxxxaa_connect()
490 serio_set_drvdata(serio, mouse); in vsxxxaa_connect()
511 kfree(mouse); in vsxxxaa_connect()