Lines Matching +full:input +full:- +full:value
1 // SPDX-License-Identifier: GPL-2.0+
14 #include <linux/hwmon-sysfs.h>
16 #include <linux/input.h>
43 struct input_dev *input; member
64 // Array of keyboard LED colors in 24-bit RGB format
75 // Get a System76 ACPI device value by name
82 handle = acpi_device_handle(data->acpi_dev); in system76_get()
86 return -ENODEV; in system76_get()
89 // Get a System76 ACPI device value by name with index
99 obj.integer.value = index; in system76_get_index()
103 handle = acpi_device_handle(data->acpi_dev); in system76_get_index()
107 return -ENODEV; in system76_get_index()
117 handle = acpi_device_handle(data->acpi_dev); in system76_get_object()
124 return -ENODEV; in system76_get_object()
130 if (obj && obj->type == ACPI_TYPE_PACKAGE && index <= obj->package.count) { in system76_name()
131 if (obj->package.elements[index].type == ACPI_TYPE_STRING) in system76_name()
132 return obj->package.elements[index].string.pointer; in system76_name()
138 // Set a System76 ACPI device value by name
139 static int system76_set(struct system76_data *data, char *method, int value) in system76_set() argument
147 obj.integer.value = value; in system76_set()
150 handle = acpi_device_handle(data->acpi_dev); in system76_set()
155 return -1; in system76_set()
167 struct acpi_object_list input; in battery_get_threshold() local
175 return -ENODEV; in battery_get_threshold()
177 input.count = 1; in battery_get_threshold()
178 input.pointer = ¶m; in battery_get_threshold()
181 param.integer.value = which; in battery_get_threshold()
183 status = acpi_evaluate_integer(handle, "GBCT", &input, &ret); in battery_get_threshold()
185 return -EIO; in battery_get_threshold()
187 return -EINVAL; in battery_get_threshold()
194 struct acpi_object_list input; in battery_set_threshold() local
198 unsigned int value; in battery_set_threshold() local
203 return -ENODEV; in battery_set_threshold()
205 ret = kstrtouint(buf, 10, &value); in battery_set_threshold()
209 if (value > 100) in battery_set_threshold()
210 return -EINVAL; in battery_set_threshold()
212 input.count = 2; in battery_set_threshold()
213 input.pointer = params; in battery_set_threshold()
216 params[0].integer.value = which; in battery_set_threshold()
217 // Threshold value in battery_set_threshold()
219 params[1].integer.value = value; in battery_set_threshold()
221 status = acpi_evaluate_object(handle, "SBCT", &input, NULL); in battery_set_threshold()
223 return -EIO; in battery_set_threshold()
267 if (strcmp(battery->desc->name, "BAT0") != 0) in system76_battery_add()
268 return -ENODEV; in system76_battery_add()
270 if (device_add_groups(&battery->dev, system76_battery_groups)) in system76_battery_add()
271 return -ENODEV; in system76_battery_add()
278 device_remove_groups(&battery->dev, system76_battery_groups); in system76_battery_remove()
302 int value; in ap_led_get() local
305 value = system76_get(data, "GAPL"); in ap_led_get()
306 if (value > 0) in ap_led_get()
307 return (enum led_brightness)value; in ap_led_get()
313 static int ap_led_set(struct led_classdev *led, enum led_brightness value) in ap_led_set() argument
318 return system76_set(data, "SAPL", value == LED_OFF ? 0 : 1); in ap_led_set()
327 return data->kb_brightness; in kb_led_get()
331 static int kb_led_set(struct led_classdev *led, enum led_brightness value) in kb_led_set() argument
336 data->kb_brightness = value; in kb_led_set()
337 if (acpi_has_method(acpi_device_handle(data->acpi_dev), "GKBK")) { in kb_led_set()
338 return system76_set(data, "SKBB", (int)data->kb_brightness); in kb_led_set()
340 return system76_set(data, "SKBL", (int)data->kb_brightness); in kb_led_set()
355 return sysfs_emit(buf, "%06X\n", data->kb_color); in kb_led_color_show()
376 return -EINVAL; in kb_led_color_store()
377 data->kb_color = (int)val; in kb_led_color_store()
378 system76_set(data, "SKBC", data->kb_color); in kb_led_color_store()
403 &data->kb_led, in kb_led_notify()
404 data->kb_brightness in kb_led_notify()
411 int value; in kb_led_hotkey_hardware() local
413 if (acpi_has_method(acpi_device_handle(data->acpi_dev), "GKBK")) { in kb_led_hotkey_hardware()
414 value = system76_get(data, "GKBB"); in kb_led_hotkey_hardware()
416 value = system76_get(data, "GKBL"); in kb_led_hotkey_hardware()
419 if (value < 0) in kb_led_hotkey_hardware()
421 data->kb_brightness = value; in kb_led_hotkey_hardware()
428 if (data->kb_brightness > 0) { in kb_led_hotkey_toggle()
429 data->kb_toggle_brightness = data->kb_brightness; in kb_led_hotkey_toggle()
430 kb_led_set(&data->kb_led, 0); in kb_led_hotkey_toggle()
432 kb_led_set(&data->kb_led, data->kb_toggle_brightness); in kb_led_hotkey_toggle()
442 if (data->kb_brightness > 0) { in kb_led_hotkey_down()
443 for (i = ARRAY_SIZE(kb_levels); i > 0; i--) { in kb_led_hotkey_down()
444 if (kb_levels[i - 1] < data->kb_brightness) { in kb_led_hotkey_down()
445 kb_led_set(&data->kb_led, kb_levels[i - 1]); in kb_led_hotkey_down()
450 kb_led_set(&data->kb_led, data->kb_toggle_brightness); in kb_led_hotkey_down()
460 if (data->kb_brightness > 0) { in kb_led_hotkey_up()
462 if (kb_levels[i] > data->kb_brightness) { in kb_led_hotkey_up()
463 kb_led_set(&data->kb_led, kb_levels[i]); in kb_led_hotkey_up()
468 kb_led_set(&data->kb_led, data->kb_toggle_brightness); in kb_led_hotkey_up()
478 if (data->kbled_type != KBLED_RGB) in kb_led_hotkey_color()
481 if (data->kb_brightness > 0) { in kb_led_hotkey_color()
483 if (kb_colors[i] == data->kb_color) in kb_led_hotkey_color()
489 data->kb_color = kb_colors[i]; in kb_led_hotkey_color()
490 system76_set(data, "SKBC", data->kb_color); in kb_led_hotkey_color()
492 kb_led_set(&data->kb_led, data->kb_toggle_brightness); in kb_led_hotkey_color()
505 if (system76_name(data->nfan, channel)) in thermal_is_visible()
510 if (system76_name(data->ntmp, channel)) in thermal_is_visible()
559 return -EOPNOTSUPP; in thermal_read()
562 return -EOPNOTSUPP; in thermal_read()
573 *str = system76_name(data->nfan, channel); in thermal_read_string()
581 *str = system76_name(data->ntmp, channel); in thermal_read_string()
588 return -EOPNOTSUPP; in thermal_read_string()
591 return -EOPNOTSUPP; in thermal_read_string()
639 input_report_key(data->input, code, 1); in input_key()
640 input_sync(data->input); in input_key()
642 input_report_key(data->input, code, 0); in input_key()
643 input_sync(data->input); in input_key()
680 data = devm_kzalloc(&acpi_dev->dev, sizeof(*data), GFP_KERNEL); in system76_add()
682 return -ENOMEM; in system76_add()
683 acpi_dev->driver_data = data; in system76_add()
684 data->acpi_dev = acpi_dev; in system76_add()
688 data->has_open_ec = acpi_has_method(acpi_device_handle(data->acpi_dev), "NFAN"); in system76_add()
693 data->ap_led.name = "system76_acpi::airplane"; in system76_add()
694 data->ap_led.flags = LED_CORE_SUSPENDRESUME; in system76_add()
695 data->ap_led.brightness_get = ap_led_get; in system76_add()
696 data->ap_led.brightness_set_blocking = ap_led_set; in system76_add()
697 data->ap_led.max_brightness = 1; in system76_add()
698 data->ap_led.default_trigger = "rfkill-none"; in system76_add()
699 err = devm_led_classdev_register(&acpi_dev->dev, &data->ap_led); in system76_add()
703 data->kb_led.name = "system76_acpi::kbd_backlight"; in system76_add()
704 data->kb_led.flags = LED_BRIGHT_HW_CHANGED | LED_CORE_SUSPENDRESUME; in system76_add()
705 data->kb_led.brightness_get = kb_led_get; in system76_add()
706 data->kb_led.brightness_set_blocking = kb_led_set; in system76_add()
707 if (acpi_has_method(acpi_device_handle(data->acpi_dev), "GKBK")) { in system76_add()
709 data->kbled_type = system76_get(data, "GKBK"); in system76_add()
711 switch (data->kbled_type) { in system76_add()
716 data->kb_led.max_brightness = 255; in system76_add()
717 data->kb_toggle_brightness = 72; in system76_add()
720 data->kb_led.max_brightness = 255; in system76_add()
721 data->kb_led.groups = system76_kb_led_color_groups; in system76_add()
722 data->kb_toggle_brightness = 72; in system76_add()
723 data->kb_color = 0xffffff; in system76_add()
724 system76_set(data, "SKBC", data->kb_color); in system76_add()
729 if (acpi_has_method(acpi_device_handle(data->acpi_dev), "SKBC")) { in system76_add()
730 data->kbled_type = KBLED_RGB; in system76_add()
731 data->kb_led.max_brightness = 255; in system76_add()
732 data->kb_led.groups = system76_kb_led_color_groups; in system76_add()
733 data->kb_toggle_brightness = 72; in system76_add()
734 data->kb_color = 0xffffff; in system76_add()
735 system76_set(data, "SKBC", data->kb_color); in system76_add()
737 data->kbled_type = KBLED_WHITE; in system76_add()
738 data->kb_led.max_brightness = 5; in system76_add()
742 if (data->kbled_type != KBLED_NONE) { in system76_add()
743 err = devm_led_classdev_register(&acpi_dev->dev, &data->kb_led); in system76_add()
748 data->input = devm_input_allocate_device(&acpi_dev->dev); in system76_add()
749 if (!data->input) in system76_add()
750 return -ENOMEM; in system76_add()
752 data->input->name = "System76 ACPI Hotkeys"; in system76_add()
753 data->input->phys = "system76_acpi/input0"; in system76_add()
754 data->input->id.bustype = BUS_HOST; in system76_add()
755 data->input->dev.parent = &acpi_dev->dev; in system76_add()
756 input_set_capability(data->input, EV_KEY, KEY_SCREENLOCK); in system76_add()
758 err = input_register_device(data->input); in system76_add()
762 if (data->has_open_ec) { in system76_add()
763 err = system76_get_object(data, "NFAN", &data->nfan); in system76_add()
767 err = system76_get_object(data, "NTMP", &data->ntmp); in system76_add()
771 data->therm = devm_hwmon_device_register_with_info(&acpi_dev->dev, in system76_add()
773 err = PTR_ERR_OR_ZERO(data->therm); in system76_add()
783 if (data->has_open_ec) { in system76_add()
784 kfree(data->ntmp); in system76_add()
785 kfree(data->nfan); in system76_add()
797 if (data->has_open_ec) { in system76_remove()
799 kfree(data->nfan); in system76_remove()
800 kfree(data->ntmp); in system76_remove()
803 devm_led_classdev_unregister(&acpi_dev->dev, &data->ap_led); in system76_remove()
804 devm_led_classdev_unregister(&acpi_dev->dev, &data->kb_led); in system76_remove()