Lines Matching refs:hdev
46 struct hid_device *hdev; member
68 static int lenovo_led_set_tp10ubkbd(struct hid_device *hdev, u8 led_code, in lenovo_led_set_tp10ubkbd() argument
71 struct lenovo_drvdata *data = hid_get_drvdata(hdev); in lenovo_led_set_tp10ubkbd()
79 ret = hid_hw_raw_request(hdev, data->led_report[0], data->led_report, 3, in lenovo_led_set_tp10ubkbd()
83 hid_err(hdev, "Set LED output report error: %d\n", ret); in lenovo_led_set_tp10ubkbd()
100 lenovo_led_set_tp10ubkbd(data->hdev, TP10UBKBD_FN_LOCK_LED, in lenovo_tp10ubkbd_sync_fn_lock()
113 static __u8 *lenovo_report_fixup(struct hid_device *hdev, __u8 *rdesc, in lenovo_report_fixup() argument
116 switch (hdev->product) { in lenovo_report_fixup()
133 static int lenovo_input_mapping_tpkbd(struct hid_device *hdev, in lenovo_input_mapping_tpkbd() argument
139 hid_set_drvdata(hdev, (void *)1); in lenovo_input_mapping_tpkbd()
146 static int lenovo_input_mapping_cptkbd(struct hid_device *hdev, in lenovo_input_mapping_cptkbd() argument
220 static int lenovo_input_mapping_scrollpoint(struct hid_device *hdev, in lenovo_input_mapping_scrollpoint() argument
231 static int lenovo_input_mapping_tp10_ultrabook_kbd(struct hid_device *hdev, in lenovo_input_mapping_tp10_ultrabook_kbd() argument
269 static int lenovo_input_mapping(struct hid_device *hdev, in lenovo_input_mapping() argument
273 switch (hdev->product) { in lenovo_input_mapping()
275 return lenovo_input_mapping_tpkbd(hdev, hi, field, in lenovo_input_mapping()
279 return lenovo_input_mapping_cptkbd(hdev, hi, field, in lenovo_input_mapping()
287 return lenovo_input_mapping_scrollpoint(hdev, hi, field, in lenovo_input_mapping()
290 return lenovo_input_mapping_tp10_ultrabook_kbd(hdev, hi, field, in lenovo_input_mapping()
300 static int lenovo_send_cmd_cptkbd(struct hid_device *hdev, in lenovo_send_cmd_cptkbd() argument
314 switch (hdev->product) { in lenovo_send_cmd_cptkbd()
316 ret = hid_hw_raw_request(hdev, 0x13, buf, 3, in lenovo_send_cmd_cptkbd()
320 ret = hid_hw_output_report(hdev, buf, 3); in lenovo_send_cmd_cptkbd()
332 static void lenovo_features_set_cptkbd(struct hid_device *hdev) in lenovo_features_set_cptkbd() argument
335 struct lenovo_drvdata *cptkbd_data = hid_get_drvdata(hdev); in lenovo_features_set_cptkbd()
337 ret = lenovo_send_cmd_cptkbd(hdev, 0x05, cptkbd_data->fn_lock); in lenovo_features_set_cptkbd()
339 hid_err(hdev, "Fn-lock setting failed: %d\n", ret); in lenovo_features_set_cptkbd()
341 ret = lenovo_send_cmd_cptkbd(hdev, 0x02, cptkbd_data->sensitivity); in lenovo_features_set_cptkbd()
343 hid_err(hdev, "Sensitivity setting failed: %d\n", ret); in lenovo_features_set_cptkbd()
350 struct hid_device *hdev = to_hid_device(dev); in attr_fn_lock_show() local
351 struct lenovo_drvdata *data = hid_get_drvdata(hdev); in attr_fn_lock_show()
361 struct hid_device *hdev = to_hid_device(dev); in attr_fn_lock_store() local
362 struct lenovo_drvdata *data = hid_get_drvdata(hdev); in attr_fn_lock_store()
372 switch (hdev->product) { in attr_fn_lock_store()
375 lenovo_features_set_cptkbd(hdev); in attr_fn_lock_store()
378 ret = lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, value); in attr_fn_lock_store()
391 struct hid_device *hdev = to_hid_device(dev); in attr_sensitivity_show_cptkbd() local
392 struct lenovo_drvdata *cptkbd_data = hid_get_drvdata(hdev); in attr_sensitivity_show_cptkbd()
403 struct hid_device *hdev = to_hid_device(dev); in attr_sensitivity_store_cptkbd() local
404 struct lenovo_drvdata *cptkbd_data = hid_get_drvdata(hdev); in attr_sensitivity_store_cptkbd()
411 lenovo_features_set_cptkbd(hdev); in attr_sensitivity_store_cptkbd()
438 static int lenovo_raw_event(struct hid_device *hdev, in lenovo_raw_event() argument
446 if (unlikely(hdev->product == USB_DEVICE_ID_LENOVO_CUSBKBD in lenovo_raw_event()
458 static int lenovo_event_tp10ubkbd(struct hid_device *hdev, in lenovo_event_tp10ubkbd() argument
461 struct lenovo_drvdata *data = hid_get_drvdata(hdev); in lenovo_event_tp10ubkbd()
476 static int lenovo_event_cptkbd(struct hid_device *hdev, in lenovo_event_cptkbd() argument
479 struct lenovo_drvdata *cptkbd_data = hid_get_drvdata(hdev); in lenovo_event_cptkbd()
511 static int lenovo_event(struct hid_device *hdev, struct hid_field *field, in lenovo_event() argument
514 if (!hid_get_drvdata(hdev)) in lenovo_event()
517 switch (hdev->product) { in lenovo_event()
520 return lenovo_event_cptkbd(hdev, field, usage, value); in lenovo_event()
522 return lenovo_event_tp10ubkbd(hdev, field, usage, value); in lenovo_event()
528 static int lenovo_features_set_tpkbd(struct hid_device *hdev) in lenovo_features_set_tpkbd() argument
531 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in lenovo_features_set_tpkbd()
533 report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[4]; in lenovo_features_set_tpkbd()
543 hid_hw_request(hdev, report, HID_REQ_SET_REPORT); in lenovo_features_set_tpkbd()
551 struct hid_device *hdev = to_hid_device(dev); in attr_press_to_select_show_tpkbd() local
552 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_press_to_select_show_tpkbd()
562 struct hid_device *hdev = to_hid_device(dev); in attr_press_to_select_store_tpkbd() local
563 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_press_to_select_store_tpkbd()
572 lenovo_features_set_tpkbd(hdev); in attr_press_to_select_store_tpkbd()
581 struct hid_device *hdev = to_hid_device(dev); in attr_dragging_show_tpkbd() local
582 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_dragging_show_tpkbd()
592 struct hid_device *hdev = to_hid_device(dev); in attr_dragging_store_tpkbd() local
593 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_dragging_store_tpkbd()
602 lenovo_features_set_tpkbd(hdev); in attr_dragging_store_tpkbd()
611 struct hid_device *hdev = to_hid_device(dev); in attr_release_to_select_show_tpkbd() local
612 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_release_to_select_show_tpkbd()
622 struct hid_device *hdev = to_hid_device(dev); in attr_release_to_select_store_tpkbd() local
623 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_release_to_select_store_tpkbd()
632 lenovo_features_set_tpkbd(hdev); in attr_release_to_select_store_tpkbd()
641 struct hid_device *hdev = to_hid_device(dev); in attr_select_right_show_tpkbd() local
642 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_select_right_show_tpkbd()
652 struct hid_device *hdev = to_hid_device(dev); in attr_select_right_store_tpkbd() local
653 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_select_right_store_tpkbd()
662 lenovo_features_set_tpkbd(hdev); in attr_select_right_store_tpkbd()
671 struct hid_device *hdev = to_hid_device(dev); in attr_sensitivity_show_tpkbd() local
672 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_sensitivity_show_tpkbd()
683 struct hid_device *hdev = to_hid_device(dev); in attr_sensitivity_store_tpkbd() local
684 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_sensitivity_store_tpkbd()
691 lenovo_features_set_tpkbd(hdev); in attr_sensitivity_store_tpkbd()
700 struct hid_device *hdev = to_hid_device(dev); in attr_press_speed_show_tpkbd() local
701 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_press_speed_show_tpkbd()
712 struct hid_device *hdev = to_hid_device(dev); in attr_press_speed_store_tpkbd() local
713 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in attr_press_speed_store_tpkbd()
720 lenovo_features_set_tpkbd(hdev); in attr_press_speed_store_tpkbd()
769 static void lenovo_led_set_tpkbd(struct hid_device *hdev) in lenovo_led_set_tpkbd() argument
771 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in lenovo_led_set_tpkbd()
774 report = hdev->report_enum[HID_OUTPUT_REPORT].report_id_hash[3]; in lenovo_led_set_tpkbd()
777 hid_hw_request(hdev, report, HID_REQ_SET_REPORT); in lenovo_led_set_tpkbd()
784 struct hid_device *hdev = to_hid_device(dev); in lenovo_led_brightness_get() local
785 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in lenovo_led_brightness_get()
800 struct hid_device *hdev = to_hid_device(dev); in lenovo_led_brightness_set() local
801 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in lenovo_led_brightness_set()
814 switch (hdev->product) { in lenovo_led_brightness_set()
816 lenovo_led_set_tpkbd(hdev); in lenovo_led_brightness_set()
819 ret = lenovo_led_set_tp10ubkbd(hdev, tp10ubkbd_led[led_nr], value); in lenovo_led_brightness_set()
826 static int lenovo_register_leds(struct hid_device *hdev) in lenovo_register_leds() argument
828 struct lenovo_drvdata *data = hid_get_drvdata(hdev); in lenovo_register_leds()
829 size_t name_sz = strlen(dev_name(&hdev->dev)) + 16; in lenovo_register_leds()
833 name_mute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL); in lenovo_register_leds()
834 name_micm = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL); in lenovo_register_leds()
836 hid_err(hdev, "Could not allocate memory for led data\n"); in lenovo_register_leds()
839 snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(&hdev->dev)); in lenovo_register_leds()
840 snprintf(name_micm, name_sz, "%s:amber:micmute", dev_name(&hdev->dev)); in lenovo_register_leds()
846 data->led_mute.dev = &hdev->dev; in lenovo_register_leds()
847 ret = led_classdev_register(&hdev->dev, &data->led_mute); in lenovo_register_leds()
855 data->led_micmute.dev = &hdev->dev; in lenovo_register_leds()
856 ret = led_classdev_register(&hdev->dev, &data->led_micmute); in lenovo_register_leds()
865 static int lenovo_probe_tpkbd(struct hid_device *hdev) in lenovo_probe_tpkbd() argument
874 if (!hid_get_drvdata(hdev)) in lenovo_probe_tpkbd()
877 hid_set_drvdata(hdev, NULL); in lenovo_probe_tpkbd()
881 if (!hid_validate_values(hdev, HID_FEATURE_REPORT, 4, i, 1)) in lenovo_probe_tpkbd()
884 if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 3, 0, 2)) in lenovo_probe_tpkbd()
887 ret = sysfs_create_group(&hdev->dev.kobj, &lenovo_attr_group_tpkbd); in lenovo_probe_tpkbd()
889 hid_warn(hdev, "Could not create sysfs group: %d\n", ret); in lenovo_probe_tpkbd()
891 data_pointer = devm_kzalloc(&hdev->dev, in lenovo_probe_tpkbd()
895 hid_err(hdev, "Could not allocate memory for driver data\n"); in lenovo_probe_tpkbd()
904 hid_set_drvdata(hdev, data_pointer); in lenovo_probe_tpkbd()
906 ret = lenovo_register_leds(hdev); in lenovo_probe_tpkbd()
910 lenovo_features_set_tpkbd(hdev); in lenovo_probe_tpkbd()
914 sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tpkbd); in lenovo_probe_tpkbd()
918 static int lenovo_probe_cptkbd(struct hid_device *hdev) in lenovo_probe_cptkbd() argument
924 if (hdev->product == USB_DEVICE_ID_LENOVO_CUSBKBD in lenovo_probe_cptkbd()
925 && hdev->type != HID_TYPE_USBMOUSE) { in lenovo_probe_cptkbd()
926 hid_dbg(hdev, "Ignoring keyboard half of device\n"); in lenovo_probe_cptkbd()
930 cptkbd_data = devm_kzalloc(&hdev->dev, in lenovo_probe_cptkbd()
934 hid_err(hdev, "can't alloc keyboard descriptor\n"); in lenovo_probe_cptkbd()
937 hid_set_drvdata(hdev, cptkbd_data); in lenovo_probe_cptkbd()
943 ret = lenovo_send_cmd_cptkbd(hdev, 0x01, 0x03); in lenovo_probe_cptkbd()
945 hid_warn(hdev, "Failed to switch F7/9/11 mode: %d\n", ret); in lenovo_probe_cptkbd()
948 ret = lenovo_send_cmd_cptkbd(hdev, 0x09, 0x01); in lenovo_probe_cptkbd()
950 hid_warn(hdev, "Failed to switch middle button: %d\n", ret); in lenovo_probe_cptkbd()
956 lenovo_features_set_cptkbd(hdev); in lenovo_probe_cptkbd()
958 ret = sysfs_create_group(&hdev->dev.kobj, &lenovo_attr_group_cptkbd); in lenovo_probe_cptkbd()
960 hid_warn(hdev, "Could not create sysfs group: %d\n", ret); in lenovo_probe_cptkbd()
974 static int lenovo_probe_tp10ubkbd(struct hid_device *hdev) in lenovo_probe_tp10ubkbd() argument
980 if (hdev->type != HID_TYPE_USBMOUSE) in lenovo_probe_tp10ubkbd()
983 data = devm_kzalloc(&hdev->dev, sizeof(*data), GFP_KERNEL); in lenovo_probe_tp10ubkbd()
989 data->hdev = hdev; in lenovo_probe_tp10ubkbd()
991 hid_set_drvdata(hdev, data); in lenovo_probe_tp10ubkbd()
1000 lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, data->fn_lock); in lenovo_probe_tp10ubkbd()
1002 ret = sysfs_create_group(&hdev->dev.kobj, &lenovo_attr_group_tp10ubkbd); in lenovo_probe_tp10ubkbd()
1006 ret = lenovo_register_leds(hdev); in lenovo_probe_tp10ubkbd()
1012 sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tp10ubkbd); in lenovo_probe_tp10ubkbd()
1016 static int lenovo_probe(struct hid_device *hdev, in lenovo_probe() argument
1021 ret = hid_parse(hdev); in lenovo_probe()
1023 hid_err(hdev, "hid_parse failed\n"); in lenovo_probe()
1027 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); in lenovo_probe()
1029 hid_err(hdev, "hid_hw_start failed\n"); in lenovo_probe()
1033 switch (hdev->product) { in lenovo_probe()
1035 ret = lenovo_probe_tpkbd(hdev); in lenovo_probe()
1039 ret = lenovo_probe_cptkbd(hdev); in lenovo_probe()
1042 ret = lenovo_probe_tp10ubkbd(hdev); in lenovo_probe()
1053 hid_hw_stop(hdev); in lenovo_probe()
1058 static void lenovo_remove_tpkbd(struct hid_device *hdev) in lenovo_remove_tpkbd() argument
1060 struct lenovo_drvdata *data_pointer = hid_get_drvdata(hdev); in lenovo_remove_tpkbd()
1069 sysfs_remove_group(&hdev->dev.kobj, in lenovo_remove_tpkbd()
1076 static void lenovo_remove_cptkbd(struct hid_device *hdev) in lenovo_remove_cptkbd() argument
1078 sysfs_remove_group(&hdev->dev.kobj, in lenovo_remove_cptkbd()
1082 static void lenovo_remove_tp10ubkbd(struct hid_device *hdev) in lenovo_remove_tp10ubkbd() argument
1084 struct lenovo_drvdata *data = hid_get_drvdata(hdev); in lenovo_remove_tp10ubkbd()
1092 sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tp10ubkbd); in lenovo_remove_tp10ubkbd()
1096 static void lenovo_remove(struct hid_device *hdev) in lenovo_remove() argument
1098 switch (hdev->product) { in lenovo_remove()
1100 lenovo_remove_tpkbd(hdev); in lenovo_remove()
1104 lenovo_remove_cptkbd(hdev); in lenovo_remove()
1107 lenovo_remove_tp10ubkbd(hdev); in lenovo_remove()
1111 hid_hw_stop(hdev); in lenovo_remove()
1114 static int lenovo_input_configured(struct hid_device *hdev, in lenovo_input_configured() argument
1117 switch (hdev->product) { in lenovo_input_configured()