Lines Matching +full:tablet +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Driver for DEC VSXXX-AA mouse (hockey-puck mouse, ball or two rollers)
4 * DEC VSXXX-GA mouse (rectangular mouse, with ball)
5 * DEC VSXXX-AB tablet (digitizer with hair cross or stylus)
7 * Copyright (C) 2003-2004 by Jan-Benedict Glaw <jbglaw@lug-owl.de>
27 * supply at +5V and -12V.
33 * | 4 --- 3 |
35 * -------
38 * 1 (GND) 5 7 -
39 * 2 (RxD) 2 3 -
40 * 3 (TxD) 3 2 -
41 * 4 (-12V) - - Somewhere from the PSU. At ATX, it's
44 * VSXXX-AA/-GA mice.
45 * 5 (+5V) - - PSU (red wires of ATX power connector
48 * 6 (+12V) - - HDD power connector, yellow wire. Only
49 * required for VSXXX-AB digitizer.
50 * 7 (dev. avail.) - - The mouse shorts this one to pin 1.
57 * -12V to the PSU.
61 * The mice and tablet are described in "VCB02 Video Subsystem - Technical
62 * Manual", DEC EK-104AA-TM-001. You'll find it at MANX, a search engine
64 * http://www.vt100.net/manx/details?pn=EK-104AA-TM-001;id=21;cp=1
74 #define DRIVER_DESC "Driver for DEC VSXXX-AA and -GA mice and VSXXX-AB tablet"
76 MODULE_AUTHOR("Jan-Benedict Glaw <jbglaw@lug-owl.de>");
104 #define BUFLEN 15 /* At least 5 is needed for a full tablet packet */
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()
126 if (mouse->count == BUFLEN) { in vsxxxaa_queue_byte()
128 mouse->name, mouse->phys); in vsxxxaa_queue_byte()
134 mouse->buf[mouse->count++] = byte; in vsxxxaa_queue_byte()
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()
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()
180 i - 1); in vsxxxaa_check_packet()
182 packet_len, i, mouse->buf[i]); in vsxxxaa_check_packet()
183 return i - 1; in vsxxxaa_check_packet()
193 return mouse->count >= len && MATCH_PACKET_TYPE(mouse->buf[0], type); in vsxxxaa_smells_like_packet()
198 struct input_dev *dev = mouse->dev; in vsxxxaa_handle_REL_packet()
199 unsigned char *buf = mouse->buf; in vsxxxaa_handle_REL_packet()
217 dx *= ((buf[0] >> 4) & 0x01) ? 1 : -1; in vsxxxaa_handle_REL_packet()
224 dy *= ((buf[0] >> 3) & 0x01) ? -1 : 1; in vsxxxaa_handle_REL_packet()
237 mouse->name, mouse->phys, dx, dy, in vsxxxaa_handle_REL_packet()
254 struct input_dev *dev = mouse->dev; in vsxxxaa_handle_ABS_packet()
255 unsigned char *buf = mouse->buf; in vsxxxaa_handle_ABS_packet()
260 * Tablet position / button packet in vsxxxaa_handle_ABS_packet()
270 * Get X/Y position. Y axis needs to be inverted since VSXXX-AB in vsxxxaa_handle_ABS_packet()
271 * counts down->top while monitor counts top->bottom. in vsxxxaa_handle_ABS_packet()
275 y = 1023 - y; in vsxxxaa_handle_ABS_packet()
288 mouse->name, mouse->phys, x, y, in vsxxxaa_handle_ABS_packet()
306 struct input_dev *dev = mouse->dev; in vsxxxaa_handle_POR_packet()
307 unsigned char *buf = mouse->buf; in vsxxxaa_handle_POR_packet()
312 * Check for Power-On-Reset packets. These are sent out in vsxxxaa_handle_POR_packet()
326 * D: <0010> == mouse, <0100> == tablet 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()
337 * has some meaning if a tablet is attached. in vsxxxaa_handle_POR_packet()
356 mouse->name, mouse->phys, error); in vsxxxaa_handle_POR_packet()
361 * If the mouse was hot-plugged, we need to force differential mode in vsxxxaa_handle_POR_packet()
366 "incremental streaming mode and 72 samples/sec\n", 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()
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()
452 input_unregister_device(mouse->dev); in vsxxxaa_disconnect()
460 int err = -ENOMEM; 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()
475 input_dev->id.bustype = BUS_RS232; in vsxxxaa_connect()
476 input_dev->dev.parent = &serio->dev; in vsxxxaa_connect()
478 __set_bit(EV_KEY, input_dev->evbit); /* We have buttons */ in vsxxxaa_connect()
479 __set_bit(EV_REL, input_dev->evbit); in vsxxxaa_connect()
480 __set_bit(EV_ABS, input_dev->evbit); in vsxxxaa_connect()
481 __set_bit(BTN_LEFT, input_dev->keybit); /* We have 3 buttons */ in vsxxxaa_connect()
482 __set_bit(BTN_MIDDLE, input_dev->keybit); in vsxxxaa_connect()
483 __set_bit(BTN_RIGHT, input_dev->keybit); in vsxxxaa_connect()
484 __set_bit(BTN_TOUCH, input_dev->keybit); /* ...and Tablet */ in vsxxxaa_connect()
485 __set_bit(REL_X, input_dev->relbit); in vsxxxaa_connect()
486 __set_bit(REL_Y, input_dev->relbit); in vsxxxaa_connect()
498 * mode will be requested after the device ID'ed successfully. in vsxxxaa_connect()