Lines Matching refs:psc
183 pms_elantech_init(struct pms_softc *psc)
189 res = pms_elantech_write_1(psc->sc_kbctag, psc->sc_kbcslot, 0x10, 0x54);
192 res = pms_elantech_write_1(psc->sc_kbctag, psc->sc_kbcslot, 0x11, 0x88);
195 res = pms_elantech_write_1(psc->sc_kbctag, psc->sc_kbcslot, 0x21, 0x60);
199 res = pms_elantech_read_1(psc->sc_kbctag, psc->sc_kbcslot, 0x10, &val);
202 aprint_error_dev(psc->sc_dev, "couldn't set absolute mode\n");
210 struct pms_softc *psc = opaque;
211 struct elantech_softc *sc = &psc->u.elantech;
215 if (!psc->sc_enabled)
219 if ((psc->inputstate == 0 && (data & 0x0c) != 0x04) ||
220 (psc->inputstate == 3 && (data & 0x0f) != 0x02)) {
221 aprint_debug_dev(psc->sc_dev, "waiting for sync..\n");
222 psc->inputstate = 0;
226 if ((psc->inputstate == 0 && (data & 0x0c) != 0x0c) ||
227 (psc->inputstate == 3 && (data & 0x0e) != 0x08)) {
228 aprint_debug_dev(psc->sc_dev, "waiting for sync..\n");
229 psc->inputstate = 0;
234 psc->packet[psc->inputstate++] = data & 0xff;
235 if (psc->inputstate != 6)
238 psc->inputstate = 0;
240 ep.ep_nfingers = (psc->packet[0] & 0xc0) >> 6;
242 ep.ep_buttons = psc->packet[0] & 1; /* left button */
243 ep.ep_buttons |= (psc->packet[0] & 2) << 1; /* right button */
252 ep.ep_x = ((int16_t)(psc->packet[1] & 0xf) << 8) | psc->packet[2];
253 ep.ep_y = ((int16_t)(psc->packet[4] & 0xf) << 8) | psc->packet[5];
255 aprint_debug_dev(psc->sc_dev,
257 aprint_debug_dev(psc->sc_dev,
259 aprint_debug_dev(psc->sc_dev,
261 psc->packet[0], psc->packet[1], psc->packet[2],
262 psc->packet[3], psc->packet[4], psc->packet[5]);
265 wsmouse_input(psc->sc_wsmousedev, ep.ep_buttons,
283 ep.ep_z = psc->packet[2];
284 aprint_debug_dev(psc->sc_dev,
286 aprint_debug_dev(psc->sc_dev,
288 psc->packet[0], psc->packet[1], psc->packet[2],
289 psc->packet[3], psc->packet[4], psc->packet[5]);
292 wsmouse_input(psc->sc_wsmousedev, 0,
305 aprint_debug_dev(psc->sc_dev, "that's a lot of fingers!\n");
317 struct pms_softc *psc = opaque;
318 struct elantech_softc *sc = &psc->u.elantech;
324 pckbport_flush(psc->sc_kbctag, psc->sc_kbcslot);
327 if ((res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
331 if ((res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
335 if ((res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
340 if ((res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
346 aprint_error_dev(psc->sc_dev,
354 res = pms_sliced_command(psc->sc_kbctag, psc->sc_kbcslot,
357 res |= pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot,
360 aprint_error_dev(psc->sc_dev,
367 aprint_error_dev(psc->sc_dev,
373 aprint_normal_dev(psc->sc_dev, "Elantech touchpad version %d.%d (%06x)\n",
376 res = pms_elantech_init(psc);
378 aprint_error_dev(psc->sc_dev,
384 pckbport_set_inputhandler(psc->sc_kbctag, psc->sc_kbcslot,
385 pms_elantech_input, psc, device_xname(psc->sc_dev));
391 (void)pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot, cmd,
399 struct pms_softc *psc = opaque;
400 struct elantech_softc *sc = &psc->u.elantech;
408 struct pms_softc *psc = opaque;
413 res = pckbport_poll_cmd(psc->sc_kbctag, psc->sc_kbcslot, &cmd,
416 aprint_error_dev(psc->sc_dev,
419 pms_elantech_init(psc);
420 pms_elantech_enable(psc);