Lines Matching +full:button +full:- +full:392
2 * HID driver for Asus notebook built-in keyboard.
11 * This module based on hid-ortek by
35 #include "hid-ids.h"
153 struct input_dev *input = drvdat->input; in asus_report_contact_down()
157 y = drvdat->tp->max_y - ((data[0] & CONTACT_Y_MSB_MASK) << 8 | data[2]); in asus_report_contact_down()
162 if (drvdat->tp->contact_size < 5) in asus_report_contact_down()
180 struct input_mt *mt = drvdat->input->mt; in asus_report_tool_width()
184 if (drvdat->tp->contact_size < 5) in asus_report_tool_width()
188 oldid = mt->trkid; in asus_report_tool_width()
191 for (i = 0; i < mt->num_slots; ++i) { in asus_report_tool_width()
192 struct input_mt_slot *ps = &mt->slots[i]; in asus_report_tool_width()
197 if ((id - oldid) & TRKID_SGN) { in asus_report_tool_width()
205 input_report_abs(drvdat->input, ABS_TOOL_WIDTH, in asus_report_tool_width()
215 if (size != 3 + drvdat->tp->contact_size * drvdat->tp->max_contacts) in asus_report_input()
218 for (i = 0; i < drvdat->tp->max_contacts; i++) { in asus_report_input()
221 if (drvdat->tp->contact_size >= 5) in asus_report_input()
225 input_mt_slot(drvdat->input, i); in asus_report_input()
226 input_mt_report_slot_state(drvdat->input, toolType, down); in asus_report_input()
230 contactData += drvdat->tp->contact_size; in asus_report_input()
234 input_report_key(drvdat->input, BTN_LEFT, data[1] & BTN_LEFT_MASK); in asus_report_input()
237 input_mt_sync_frame(drvdat->input); in asus_report_input()
238 input_sync(drvdat->input); in asus_report_input()
248 if (drvdata->tp && data[0] == INPUT_REPORT_ID) in asus_raw_event()
261 return -ENOMEM; in asus_kbd_set_report()
299 return -ENOMEM; in asus_kbd_get_functions()
321 if (led->brightness == brightness) in asus_kbd_backlight_set()
324 led->brightness = brightness; in asus_kbd_backlight_set()
325 schedule_work(&led->work); in asus_kbd_backlight_set()
333 return led->brightness; in asus_kbd_backlight_get()
342 if (led->removed) in asus_kbd_backlight_work()
345 buf[4] = led->brightness; in asus_kbd_backlight_work()
347 ret = asus_kbd_set_report(led->hdev, buf, sizeof(buf)); in asus_kbd_backlight_work()
349 hid_err(led->hdev, "Asus failed to set keyboard backlight: %d\n", ret); in asus_kbd_backlight_work()
370 return -ENODEV; in asus_kbd_register_leds()
372 drvdata->kbd_backlight = devm_kzalloc(&hdev->dev, in asus_kbd_register_leds()
375 if (!drvdata->kbd_backlight) in asus_kbd_register_leds()
376 return -ENOMEM; in asus_kbd_register_leds()
378 drvdata->kbd_backlight->removed = false; in asus_kbd_register_leds()
379 drvdata->kbd_backlight->brightness = 0; in asus_kbd_register_leds()
380 drvdata->kbd_backlight->hdev = hdev; in asus_kbd_register_leds()
381 drvdata->kbd_backlight->cdev.name = "asus::kbd_backlight"; in asus_kbd_register_leds()
382 drvdata->kbd_backlight->cdev.max_brightness = 3; in asus_kbd_register_leds()
383 drvdata->kbd_backlight->cdev.brightness_set = asus_kbd_backlight_set; in asus_kbd_register_leds()
384 drvdata->kbd_backlight->cdev.brightness_get = asus_kbd_backlight_get; in asus_kbd_register_leds()
385 INIT_WORK(&drvdata->kbd_backlight->work, asus_kbd_backlight_work); in asus_kbd_register_leds()
387 ret = devm_led_classdev_register(&hdev->dev, &drvdata->kbd_backlight->cdev); in asus_kbd_register_leds()
390 devm_kfree(&hdev->dev, drvdata->kbd_backlight); in asus_kbd_register_leds()
398 struct input_dev *input = hi->input; in asus_input_configured()
402 if (drvdata->quirks & QUIRK_T100CHI && in asus_input_configured()
403 hi->report->id != T100CHI_MOUSE_REPORT_ID) in asus_input_configured()
406 if (drvdata->tp) { in asus_input_configured()
410 drvdata->tp->max_x, 0, 0); in asus_input_configured()
412 drvdata->tp->max_y, 0, 0); in asus_input_configured()
413 input_abs_set_res(input, ABS_MT_POSITION_X, drvdata->tp->res_x); in asus_input_configured()
414 input_abs_set_res(input, ABS_MT_POSITION_Y, drvdata->tp->res_y); in asus_input_configured()
416 if (drvdata->tp->contact_size >= 5) { in asus_input_configured()
425 __set_bit(BTN_LEFT, input->keybit); in asus_input_configured()
426 __set_bit(INPUT_PROP_BUTTONPAD, input->propbit); in asus_input_configured()
428 ret = input_mt_init_slots(input, drvdata->tp->max_contacts, in asus_input_configured()
437 drvdata->input = input; in asus_input_configured()
439 if (drvdata->enable_backlight && asus_kbd_register_leds(hdev)) in asus_input_configured()
454 if (drvdata->quirks & QUIRK_SKIP_INPUT_MAPPING) { in asus_input_mapping()
458 return -1; in asus_input_mapping()
463 * This avoids a bunch of non-functional hid_input devices getting in asus_input_mapping()
466 if (drvdata->quirks & QUIRK_T100CHI) { in asus_input_mapping()
467 if (field->application == (HID_UP_GENDESK | 0x0080) || in asus_input_mapping()
468 usage->hid == (HID_UP_GENDEVCTRLS | 0x0024) || in asus_input_mapping()
469 usage->hid == (HID_UP_GENDEVCTRLS | 0x0025) || in asus_input_mapping()
470 usage->hid == (HID_UP_GENDEVCTRLS | 0x0026)) in asus_input_mapping()
471 return -1; in asus_input_mapping()
474 * keep the left button, to avoid the core removing it. in asus_input_mapping()
476 if (field->application == HID_GD_MOUSE && in asus_input_mapping()
477 usage->hid != (HID_UP_BUTTON | 1)) in asus_input_mapping()
478 return -1; in asus_input_mapping()
481 /* ASUS-specific keyboard hotkeys */ in asus_input_mapping()
482 if ((usage->hid & HID_USAGE_PAGE) == 0xff310000) { in asus_input_mapping()
483 set_bit(EV_REP, hi->input->evbit); in asus_input_mapping()
484 switch (usage->hid & HID_USAGE) { in asus_input_mapping()
510 return -1; in asus_input_mapping()
519 if (drvdata->quirks & QUIRK_USE_KBD_BACKLIGHT) in asus_input_mapping()
520 drvdata->enable_backlight = true; in asus_input_mapping()
525 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) { in asus_input_mapping()
526 set_bit(EV_REP, hi->input->evbit); in asus_input_mapping()
527 switch (usage->hid & HID_USAGE) { in asus_input_mapping()
552 if (drvdata->quirks & QUIRK_NO_CONSUMER_USAGES && in asus_input_mapping()
553 (usage->hid & HID_USAGE_PAGE) == HID_UP_CONSUMER) { in asus_input_mapping()
554 switch (usage->hid & HID_USAGE) { in asus_input_mapping()
563 return -1; in asus_input_mapping()
579 ret = -ENOMEM; in asus_start_multitouch()
601 if (drvdata->tp) in asus_reset_resume()
612 drvdata = devm_kzalloc(&hdev->dev, sizeof(*drvdata), GFP_KERNEL); in asus_probe()
615 return -ENOMEM; in asus_probe()
620 drvdata->quirks = id->driver_data; in asus_probe()
622 if (drvdata->quirks & QUIRK_IS_MULTITOUCH) in asus_probe()
623 drvdata->tp = &asus_i2c_tp; in asus_probe()
625 if (drvdata->quirks & QUIRK_T100_KEYBOARD) { in asus_probe()
626 struct usb_interface *intf = to_usb_interface(hdev->dev.parent); in asus_probe()
628 if (intf->altsetting->desc.bInterfaceNumber == T100_TPAD_INTF) { in asus_probe()
629 drvdata->quirks = QUIRK_SKIP_INPUT_MAPPING; in asus_probe()
631 * The T100HA uses the same USB-ids as the T100TAF and in asus_probe()
632 * the T200TA uses the same USB-ids as the T100TA, while in asus_probe()
636 drvdata->tp = &asus_t100ha_tp; in asus_probe()
638 drvdata->tp = &asus_t200ta_tp; in asus_probe()
640 drvdata->tp = &asus_t100ta_tp; in asus_probe()
644 if (drvdata->quirks & QUIRK_T100CHI) { in asus_probe()
649 hdev->quirks |= HID_QUIRK_MULTI_INPUT; in asus_probe()
650 drvdata->tp = &asus_t100chi_tp; in asus_probe()
653 if (drvdata->quirks & QUIRK_NO_INIT_REPORTS) in asus_probe()
654 hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS; in asus_probe()
668 if (!drvdata->input) { in asus_probe()
670 ret = -ENOMEM; in asus_probe()
674 if (drvdata->tp) { in asus_probe()
675 drvdata->input->name = "Asus TouchPad"; in asus_probe()
677 drvdata->input->name = "Asus Keyboard"; in asus_probe()
680 if (drvdata->tp) { in asus_probe()
696 if (drvdata->kbd_backlight) { in asus_remove()
697 drvdata->kbd_backlight->removed = true; in asus_remove()
698 cancel_work_sync(&drvdata->kbd_backlight->work); in asus_remove()
714 if (drvdata->quirks & QUIRK_FIX_NOTEBOOK_REPORT && in asus_report_fixup()
720 if (drvdata->quirks & QUIRK_T100_KEYBOARD && in asus_report_fixup()
727 if (drvdata->quirks & QUIRK_T100CHI && in asus_report_fixup()
741 memmove(rdesc + 392, rdesc + 390, 12); in asus_report_fixup()
748 if (drvdata->quirks & QUIRK_G752_KEYBOARD && in asus_report_fixup()
754 new_rdesc = devm_kzalloc(&hdev->dev, new_size, GFP_KERNEL); in asus_report_fixup()
764 memcpy(new_rdesc + 61 + sizeof(asus_g752_fixed_rdesc), rdesc + 61, *rsize - 61); in asus_report_fixup()