Lines Matching refs:psc
198 synaptics_poll_cmd(struct pms_softc *psc, ...)
204 va_start(ap, psc);
211 int res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot, cmd, i, 0,
214 device_printf(psc->sc_dev, "command error %#x\n", cmd[0]);
219 synaptics_poll_reset(struct pms_softc *psc)
225 res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot, cmd, 1, 2,
227 DPRINTF(10, &psc->u.synaptics, "reset %d 0x%02x 0x%02x\n",
233 synaptics_special_read(struct pms_softc *psc, u_char slice, u_char resp[3])
236 int res = pms_sliced_command(psc->sc_kbctag, psc->sc_kbcslot, slice);
238 return res | pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
243 synaptics_special_write(struct pms_softc *psc, u_char command, u_char arg)
245 int res = pms_sliced_command(psc->sc_kbctag, psc->sc_kbcslot, arg);
252 res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
349 pms_synaptics_probe_extended(struct pms_softc *psc)
351 struct synaptics_softc *sc = &psc->u.synaptics;
373 res = synaptics_special_read(psc, SYNAPTICS_EXTENDED_QUERY, resp);
410 res = synaptics_special_read(psc,
497 struct pms_softc *psc = vsc;
498 struct synaptics_softc *sc = &psc->u.synaptics;
503 res = pms_sliced_command(psc->sc_kbctag, psc->sc_kbcslot,
506 res |= pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot, cmd, 1, 3,
509 aprint_debug_dev(psc->sc_dev,
515 (void)synaptics_poll_reset(psc);
520 aprint_debug_dev(psc->sc_dev,
536 aprint_normal_dev(psc->sc_dev, "Synaptics touchpad version %d.%d\n",
545 res = synaptics_special_read(psc, SYNAPTICS_READ_CAPABILITIES, resp);
548 aprint_error_dev(psc->sc_dev,
562 pms_synaptics_probe_extended(psc);
568 aprint_normal_dev(psc->sc_dev, "");
579 res = synaptics_special_read(psc, SYNAPTICS_READ_MAX_COORDS,
582 aprint_error_dev(psc->sc_dev,
600 aprint_normal_dev(psc->sc_dev,
607 res = synaptics_special_read(psc, SYNAPTICS_READ_MIN_COORDS,
610 aprint_error_dev(psc->sc_dev,
627 aprint_normal_dev(psc->sc_dev,
637 pckbport_set_inputhandler(psc->sc_kbctag, psc->sc_kbcslot,
638 pms_synaptics_input, psc, device_xname(psc->sc_dev));
646 struct pms_softc *psc = vsc;
647 struct synaptics_softc *sc = &psc->u.synaptics;
656 res = synaptics_poll_reset(psc);
675 synaptics_poll_cmd(psc, PMS_DEV_DISABLE, 0);
678 synaptics_poll_cmd(psc, PMS_SET_SCALE11, 0);
680 res = synaptics_special_write(psc, SYNAPTICS_CMD_SET_MODE2, enable_modes);
682 device_printf(psc->sc_dev, "set mode error\n");
686 synaptics_poll_cmd(psc, PMS_SET_SCALE11, 0);
691 synaptics_special_write(psc, SYNAPTICS_WRITE_DELUXE_3, 0x3);
1196 pms_synaptics_get_fingers(struct pms_softc *psc, u_char w, short z)
1198 struct synaptics_softc *sc = &psc->u.synaptics;
1214 ew_mode = psc->packet[5] >> 4;
1226 fingers = psc->packet[1] & 0x0f;
1230 device_printf(psc->sc_dev,
1266 pms_synaptics_parse(struct pms_softc *psc)
1268 struct synaptics_softc *sc = &psc->u.synaptics;
1281 nsp.sp_w = ((psc->packet[0] & 0x30) >> 2)
1282 + ((psc->packet[0] & 0x04) >> 1)
1283 + ((psc->packet[3] & 0x04) >> 2);
1290 ew_mode = psc->packet[5] >> 4;
1303 nsp.sp_sx = ((psc->packet[1] & 0xfe) << 1)
1304 + ((psc->packet[4] & 0x0f) << 9);
1305 nsp.sp_sy = ((psc->packet[2] & 0xfe) << 1)
1306 + ((psc->packet[4] & 0xf0) << 5);
1307 nsp.sp_sz = (psc->packet[3] & 0x30)
1308 + ((psc->packet[5] & 0x0e) << 1);
1332 v = 8 + (psc->packet[1] & 0x01) +
1333 ((psc->packet[2] & 0x01) << 1) +
1334 ((psc->packet[5] & 0x01) << 2);
1351 primary_finger = psc->packet[2];
1352 secondary_finger = psc->packet[4];
1354 nsp.sp_finger_count = pms_synaptics_get_fingers(psc,
1359 device_printf(psc->sc_dev,
1378 ((psc->packet[0] & PMS_RBUTMASK) ^
1379 (psc->packet[3] & PMS_RBUTMASK))) {
1383 packet4 = psc->packet[4] & btn_mask;
1384 packet5 = psc->packet[5] & btn_mask;
1406 ((psc->packet[1] & 0x0f) << 8) +
1407 ((psc->packet[3] & 0x10) << 8);
1411 ((psc->packet[1] & 0xf0) << 4) +
1412 ((psc->packet[3] & 0x20) << 7);
1415 nsp.sp_z = psc->packet[2] & 0xfe;
1420 ((psc->packet[2] & 0x01) << 2);
1425 ((psc->packet[1] & 0x0f) << 8) +
1426 ((psc->packet[3] & 0x10) << 8);
1429 ((psc->packet[1] & 0xf0) << 4) +
1430 ((psc->packet[3] & 0x20) << 7);
1433 nsp.sp_z = psc->packet[2];
1457 nsp.sp_finger_count = pms_synaptics_get_fingers(psc,
1475 if ((psc->packet[0] ^ psc->packet[3]) & 0x02) {
1480 psc->packet[0], psc->packet[1], psc->packet[2],
1481 psc->packet[3], psc->packet[4], psc->packet[5]);
1483 if ((psc->packet[4] & SYN_1BUTMASK) != 0)
1488 if ((psc->packet[4] & SYN_3BUTMASK) != 0)
1493 if ((psc->packet[5] & SYN_2BUTMASK) != 0)
1498 if ((psc->packet[5] & SYN_4BUTMASK) != 0)
1503 if ((psc->packet[4] & SYN_5BUTMASK) != 0)
1509 nsp.sp_left = psc->packet[0] & PMS_LBUTMASK;
1510 nsp.sp_right = psc->packet[0] & PMS_RBUTMASK;
1517 (psc->packet[3] & PMS_LBUTMASK);
1519 (psc->packet[3] & PMS_RBUTMASK);
1521 ((psc->packet[0] & PMS_RBUTMASK) ^
1522 (psc->packet[3] & PMS_RBUTMASK))) {
1524 nsp.sp_up = psc->packet[4] & SYN_1BUTMASK;
1525 nsp.sp_down = psc->packet[5] & SYN_2BUTMASK;
1539 u_char bstate = (psc->packet[0] ^ psc->packet[3])
1580 nsp.sp_middle = (psc->packet[0] & PMS_LBUTMASK) ^
1581 (psc->packet[3] & PMS_LBUTMASK);
1640 psc, nsp.sp_w,
1653 pms_synaptics_process_packet(psc, &nsp);
1670 pms_synaptics_passthrough(struct pms_softc *psc)
1676 buttons = ((psc->packet[1] & PMS_LBUTMASK) ? 0x20 : 0) |
1677 ((psc->packet[1] & PMS_MBUTMASK) ? 0x40 : 0) |
1678 ((psc->packet[1] & PMS_RBUTMASK) ? 0x80 : 0);
1680 dx = psc->packet[4];
1686 dy = psc->packet[5];
1694 changed = buttons ^ (psc->buttons & 0xe0);
1695 psc->buttons ^= changed;
1704 dy && (psc->buttons & 0x42)) {
1705 wsmouse_precision_scroll(psc->sc_wsmousedev, dx, dy);
1707 buttons = (psc->buttons & 0x1f) | ((psc->buttons >> 5) & 0x7);
1708 wsmouse_input(psc->sc_wsmousedev,
1719 struct pms_softc *psc = vsc;
1722 if (!psc->sc_enabled) {
1727 getmicrouptime(&psc->current);
1729 if (psc->inputstate > 0) {
1730 timersub(&psc->current, &psc->last, &diff);
1732 device_printf(psc->sc_dev,
1736 psc->inputstate = 0;
1737 psc->sc_enabled = 0;
1738 wakeup(&psc->sc_enabled);
1742 psc->last = psc->current;
1744 switch (psc->inputstate) {
1752 device_printf(psc->sc_dev,
1755 psc->inputstate--;
1758 psc->inputstate = 0;
1764 device_printf(psc->sc_dev,
1766 psc->inputstate = 0;
1767 psc->sc_enabled = 0;
1768 wakeup(&psc->sc_enabled);
1772 if (psc->inputstate >= sizeof(psc->packet))
1773 panic("inputstate should never be %d", psc->inputstate);
1775 psc->packet[psc->inputstate++] = data & 0xff;
1776 if (psc->inputstate == 6) {
1777 struct synaptics_softc *sc = &psc->u.synaptics;
1779 psc->packet[0], psc->packet[1], psc->packet[2],
1780 psc->packet[3], psc->packet[4], psc->packet[5]);
1785 psc->inputstate = 0;
1786 if ((psc->packet[0] & 0xfc) == 0x84 &&
1787 (psc->packet[3] & 0xcc) == 0xc4) {
1789 pms_synaptics_passthrough(psc);
1791 pms_synaptics_parse(psc);
2256 pms_synaptics_process_packet(struct pms_softc *psc, struct synaptics_packet *sp)
2258 struct synaptics_softc *sc = &psc->u.synaptics;
2311 changed = buttons ^ (psc->buttons & 0x1f);
2312 psc->buttons ^= changed;
2338 psc->sc_wsmousedev, dx, dy);
2401 buttons = (psc->buttons & 0x1f) | ((psc->buttons >> 5) & 0x7);
2403 wsmouse_input(psc->sc_wsmousedev,