Lines Matching +full:dual +full:- +full:axis
2 * Generic linux-input device driver for keyboard devices
30 * HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A
47 MODULE_LICENSE("Dual BSD/GPL");
108 idx = dev->idx4 / 4; in hil_dev_handle_command_response()
109 p = dev->data[idx - 1]; in hil_dev_handle_command_response()
113 buf = dev->idd; in hil_dev_handle_command_response()
117 buf = dev->rsc; in hil_dev_handle_command_response()
121 buf = dev->exd; in hil_dev_handle_command_response()
125 dev->rnm[HIL_PACKET_MAX_LENGTH] = 0; in hil_dev_handle_command_response()
126 buf = dev->rnm; in hil_dev_handle_command_response()
139 buf[i] = dev->data[i] & HIL_PKT_DATA_MASK; in hil_dev_handle_command_response()
143 complete(&dev->cmd_done); in hil_dev_handle_command_response()
148 struct input_dev *dev = kbd->dev; in hil_dev_handle_kbd_events()
149 int idx = kbd->idx4 / 4; in hil_dev_handle_kbd_events()
152 switch (kbd->data[0] & HIL_POL_CHARTYPE_MASK) { in hil_dev_handle_kbd_events()
157 for (i = 1; i < idx - 1; i++) in hil_dev_handle_kbd_events()
158 input_report_key(dev, kbd->data[i] & 0x7f, 1); in hil_dev_handle_kbd_events()
164 for (i = 1; i < idx - 1; i++) in hil_dev_handle_kbd_events()
165 input_report_key(dev, kbd->data[i], 1); in hil_dev_handle_kbd_events()
169 for (i = 1; i < idx - 1; i++) { in hil_dev_handle_kbd_events()
170 unsigned int key = kbd->data[i]; in hil_dev_handle_kbd_events()
180 for (i = 1; i < idx - 1; i++) { in hil_dev_handle_kbd_events()
181 unsigned int key = kbd->data[i]; in hil_dev_handle_kbd_events()
191 for (i = 1; i < idx - 1; i++) { in hil_dev_handle_kbd_events()
192 unsigned int key = kbd->data[i]; in hil_dev_handle_kbd_events()
207 struct input_dev *dev = ptr->dev; in hil_dev_handle_ptr_events()
208 int idx = ptr->idx4 / 4; in hil_dev_handle_ptr_events()
209 hil_packet p = ptr->data[idx - 1]; in hil_dev_handle_ptr_events()
213 if ((p & HIL_CMDCT_POL) != idx - 1) { in hil_dev_handle_ptr_events()
222 ax16 = ptr->idd[1] & HIL_IDD_HEADER_16BIT; /* 8 or 16bit resolution */ in hil_dev_handle_ptr_events()
223 absdev = ptr->idd[1] & HIL_IDD_HEADER_ABS; in hil_dev_handle_ptr_events()
228 lo = ptr->data[cnt++] & HIL_PKT_DATA_MASK; in hil_dev_handle_ptr_events()
229 hi = ax16 ? (ptr->data[cnt++] & HIL_PKT_DATA_MASK) : 0; in hil_dev_handle_ptr_events()
240 val = input_abs_get_max(dev, ABS_X + i) - val; in hil_dev_handle_ptr_events()
245 val *= -1; in hil_dev_handle_ptr_events()
250 while (cnt < idx - 1) { in hil_dev_handle_ptr_events()
251 unsigned int btn = ptr->data[cnt++]; in hil_dev_handle_ptr_events()
259 btn = (btn - 0x80) >> 1; in hil_dev_handle_ptr_events()
260 btn = ptr->btnmap[btn]; in hil_dev_handle_ptr_events()
270 dev->idx4 = 0; in hil_dev_process_err()
271 complete(&dev->cmd_done); /* just in case somebody is waiting */ in hil_dev_process_err()
284 if (dev->idx4 >= HIL_PACKET_MAX_LENGTH * sizeof(hil_packet)) { in hil_dev_interrupt()
289 idx = dev->idx4 / 4; in hil_dev_interrupt()
290 if (!(dev->idx4 % 4)) in hil_dev_interrupt()
291 dev->data[idx] = 0; in hil_dev_interrupt()
292 packet = dev->data[idx]; in hil_dev_interrupt()
293 packet |= ((hil_packet)data) << ((3 - (dev->idx4 % 4)) * 8); in hil_dev_interrupt()
294 dev->data[idx] = packet; in hil_dev_interrupt()
296 /* Records of N 4-byte hil_packets must terminate with a command. */ in hil_dev_interrupt()
297 if ((++dev->idx4 % 4) == 0) { in hil_dev_interrupt()
303 else if (dev->is_pointer) in hil_dev_interrupt()
307 dev->idx4 = 0; in hil_dev_interrupt()
321 input_unregister_device(dev->dev); in hil_dev_disconnect()
328 struct input_dev *input_dev = kbd->dev; in hil_dev_keyboard_setup()
329 uint8_t did = kbd->idd[0]; in hil_dev_keyboard_setup()
332 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); in hil_dev_keyboard_setup()
333 input_dev->ledbit[0] = BIT_MASK(LED_NUML) | BIT_MASK(LED_CAPSL) | in hil_dev_keyboard_setup()
337 __set_bit(hil_kbd_set1[i], input_dev->keybit); in hil_dev_keyboard_setup()
338 __set_bit(hil_kbd_set3[i], input_dev->keybit); in hil_dev_keyboard_setup()
340 __clear_bit(KEY_RESERVED, input_dev->keybit); in hil_dev_keyboard_setup()
342 input_dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE; in hil_dev_keyboard_setup()
343 input_dev->keycodesize = sizeof(hil_kbd_set1[0]); in hil_dev_keyboard_setup()
344 input_dev->keycode = hil_kbd_set1; in hil_dev_keyboard_setup()
346 input_dev->name = strlen(kbd->rnm) ? kbd->rnm : "HIL keyboard"; in hil_dev_keyboard_setup()
347 input_dev->phys = "hpkbd/input0"; in hil_dev_keyboard_setup()
355 struct input_dev *input_dev = ptr->dev; in hil_dev_pointer_setup()
356 uint8_t did = ptr->idd[0]; in hil_dev_pointer_setup()
357 uint8_t *idd = ptr->idd + 1; in hil_dev_pointer_setup()
362 ptr->naxes = HIL_IDD_NUM_AXES_PER_SET(*idd); in hil_dev_pointer_setup()
366 input_dev->evbit[0] = BIT_MASK(EV_REL); in hil_dev_pointer_setup()
368 for (i = 0; i < ptr->naxes; i++) in hil_dev_pointer_setup()
369 __set_bit(REL_X + i, input_dev->relbit); in hil_dev_pointer_setup()
371 for (i = 3; naxsets > 1 && i < ptr->naxes + 3; i++) in hil_dev_pointer_setup()
372 __set_bit(REL_X + i, input_dev->relbit); in hil_dev_pointer_setup()
378 input_dev->evbit[0] = BIT_MASK(EV_ABS); in hil_dev_pointer_setup()
380 for (i = 0; i < ptr->naxes; i++) in hil_dev_pointer_setup()
384 for (i = 3; naxsets > 1 && i < ptr->naxes + 3; i++) in hil_dev_pointer_setup()
386 0, HIL_IDD_AXIS_MAX(idd, i - 3), 0, 0); in hil_dev_pointer_setup()
394 input_abs_get_max(input_dev, ABS_X + i) - diff); in hil_dev_pointer_setup()
405 ptr->nbtn = HIL_IDD_NUM_BUTTONS(idd); in hil_dev_pointer_setup()
406 if (ptr->nbtn) in hil_dev_pointer_setup()
407 input_dev->evbit[0] |= BIT_MASK(EV_KEY); in hil_dev_pointer_setup()
422 for (i = 0; i < ptr->nbtn; i++) { in hil_dev_pointer_setup()
423 __set_bit(btntype | i, input_dev->keybit); in hil_dev_pointer_setup()
424 ptr->btnmap[i] = btntype | i; in hil_dev_pointer_setup()
429 ptr->btnmap[1] = BTN_MIDDLE; in hil_dev_pointer_setup()
430 ptr->btnmap[2] = BTN_RIGHT; in hil_dev_pointer_setup()
433 input_dev->name = strlen(ptr->rnm) ? ptr->rnm : "HIL pointer device"; in hil_dev_pointer_setup()
436 "HIL pointer device found (did: 0x%02x, axis: %s)\n", in hil_dev_pointer_setup()
440 ptr->nbtn, naxsets, ptr->naxes); in hil_dev_pointer_setup()
453 error = -ENOMEM; in hil_dev_connect()
457 dev->serio = serio; in hil_dev_connect()
458 dev->dev = input_dev; in hil_dev_connect()
467 init_completion(&dev->cmd_done); in hil_dev_connect()
472 error = wait_for_completion_killable(&dev->cmd_done); in hil_dev_connect()
476 reinit_completion(&dev->cmd_done); in hil_dev_connect()
481 error = wait_for_completion_killable(&dev->cmd_done); in hil_dev_connect()
485 reinit_completion(&dev->cmd_done); in hil_dev_connect()
490 error = wait_for_completion_killable(&dev->cmd_done); in hil_dev_connect()
494 reinit_completion(&dev->cmd_done); in hil_dev_connect()
499 error = wait_for_completion_killable(&dev->cmd_done); in hil_dev_connect()
503 did = dev->idd[0]; in hil_dev_connect()
504 idd = dev->idd + 1; in hil_dev_connect()
515 error = -EINVAL; in hil_dev_connect()
519 dev->is_pointer = false; in hil_dev_connect()
525 dev->is_pointer = true; in hil_dev_connect()
533 input_dev->id.bustype = BUS_HIL; in hil_dev_connect()
534 input_dev->id.vendor = PCI_VENDOR_ID_HP; in hil_dev_connect()
535 input_dev->id.product = 0x0001; /* TODO: get from kbd->rsc */ in hil_dev_connect()
536 input_dev->id.version = 0x0100; /* TODO: get from kbd->rsc */ in hil_dev_connect()
537 input_dev->dev.parent = &serio->dev; in hil_dev_connect()
539 if (!dev->is_pointer) { in hil_dev_connect()