Lines Matching +full:fn +full:- +full:keymap
1 // SPDX-License-Identifier: GPL-2.0
13 #include <linux/input/sparse-keymap.h>
26 #define HWMI_METHOD_GUID "ABBC0F5B-8EA1-11D1-A000-C90629100000"
27 #define HWMI_EVENT_GUID "ABBC0F5C-8EA1-11D1-A000-C90629100000"
30 #define WMI0_EXPENSIVE_GUID "39142400-C6A3-40fa-BADB-8A2652834100"
31 #define WMI0_EVENT_GUID "59142400-C6A3-40fa-BADB-8A2652834100"
93 static int battery_reset = -1;
94 static int report_brightness = -1;
98 "Reset battery charge values to (0-0) before disabling it using (0-100)");
107 quirks = dmi->driver_data; in dmi_matched()
126 .ident = "Huawei MACH-WX9",
129 DMI_MATCH(DMI_PRODUCT_NAME, "MACH-WX9"),
152 mutex_lock(&huawei->wmi_lock); in huawei_wmi_call()
154 mutex_unlock(&huawei->wmi_lock); in huawei_wmi_call()
156 dev_err(huawei->dev, "Failed to evaluate wmi method\n"); in huawei_wmi_call()
157 return -ENODEV; in huawei_wmi_call()
168 * the return status is non-zero, we return -ENODEV but still copy the returned
184 * HWMI and if we get a non-zero return status we evaluate it again. in huawei_wmi_cmd()
193 err = -EIO; in huawei_wmi_cmd()
197 switch (obj->type) { in huawei_wmi_cmd()
202 if (obj->buffer.length == 0x104) { in huawei_wmi_cmd()
204 obj->buffer.pointer += 4; in huawei_wmi_cmd()
207 dev_err(huawei->dev, "Bad buffer length, got %d\n", obj->buffer.length); in huawei_wmi_cmd()
208 err = -EIO; in huawei_wmi_cmd()
217 if (obj->package.count != 2) { in huawei_wmi_cmd()
218 dev_err(huawei->dev, "Bad package count, got %d\n", obj->package.count); in huawei_wmi_cmd()
219 err = -EIO; in huawei_wmi_cmd()
223 obj = &obj->package.elements[1]; in huawei_wmi_cmd()
224 if (obj->type != ACPI_TYPE_BUFFER) { in huawei_wmi_cmd()
225 dev_err(huawei->dev, "Bad package element type, got %d\n", obj->type); in huawei_wmi_cmd()
226 err = -EIO; in huawei_wmi_cmd()
229 len = obj->buffer.length; in huawei_wmi_cmd()
234 dev_err(huawei->dev, "Unexpected obj type, got: %d\n", obj->type); in huawei_wmi_cmd()
235 err = -EIO; in huawei_wmi_cmd()
239 if (!*obj->buffer.pointer) in huawei_wmi_cmd()
243 err = (*obj->buffer.pointer) ? -ENODEV : 0; in huawei_wmi_cmd()
247 memcpy(buf, obj->buffer.pointer, len); in huawei_wmi_cmd()
261 if (quirks && quirks->ec_micmute) { in huawei_wmi_micmute_led_set()
273 return -ENODEV; in huawei_wmi_micmute_led_set()
287 return -ENODEV; in huawei_wmi_micmute_led_set()
292 return -ENODEV; in huawei_wmi_micmute_led_set()
309 huawei->cdev.name = "platform::micmute"; in huawei_wmi_leds_setup()
310 huawei->cdev.max_brightness = 1; in huawei_wmi_leds_setup()
311 huawei->cdev.brightness_set_blocking = &huawei_wmi_micmute_led_set; in huawei_wmi_leds_setup()
312 huawei->cdev.default_trigger = "audio-micmute"; in huawei_wmi_leds_setup()
313 huawei->cdev.dev = dev; in huawei_wmi_leds_setup()
314 huawei->cdev.flags = LED_CORE_SUSPENDRESUME; in huawei_wmi_leds_setup()
316 devm_led_classdev_register(dev, &huawei->cdev); in huawei_wmi_leds_setup()
330 /* Find the last two non-zero values. Return status is ignored. */ in huawei_wmi_battery_get()
331 i = ARRAY_SIZE(ret) - 1; in huawei_wmi_battery_get()
334 *start = ret[i-1]; in huawei_wmi_battery_get()
337 } while (i > 2 && !ret[i--]); in huawei_wmi_battery_get()
348 return -EINVAL; in huawei_wmi_battery_set()
359 if (quirks && quirks->battery_reset && start == 0 && end == 100) { in huawei_wmi_battery_set()
422 return -EINVAL; in charge_control_start_threshold_store()
442 return -EINVAL; in charge_control_end_threshold_store()
458 return -EINVAL; in charge_control_thresholds_store()
475 err = device_create_file(&battery->dev, &dev_attr_charge_control_start_threshold); in huawei_wmi_battery_add()
479 err = device_create_file(&battery->dev, &dev_attr_charge_control_end_threshold); in huawei_wmi_battery_add()
481 device_remove_file(&battery->dev, &dev_attr_charge_control_start_threshold); in huawei_wmi_battery_add()
488 device_remove_file(&battery->dev, &dev_attr_charge_control_start_threshold); in huawei_wmi_battery_remove()
489 device_remove_file(&battery->dev, &dev_attr_charge_control_end_threshold); in huawei_wmi_battery_remove()
504 huawei->battery_available = true; in huawei_wmi_battery_setup()
506 huawei->battery_available = false; in huawei_wmi_battery_setup()
518 if (huawei->battery_available) { in huawei_wmi_battery_exit()
524 /* Fn lock */
535 /* Find the first non-zero value. Return status is ignored. */ in huawei_wmi_fn_lock_get()
539 *on = ret[i] - 1; // -1 undefined, 0 off, 1 on. in huawei_wmi_fn_lock_get()
576 return -EINVAL; in fn_lock_state_store()
591 huawei->fn_lock_available = true; in huawei_wmi_fn_lock_setup()
593 huawei->fn_lock_available = false; in huawei_wmi_fn_lock_setup()
604 if (huawei->fn_lock_available) in huawei_wmi_fn_lock_exit()
613 struct huawei_wmi *huawei = m->private; in huawei_wmi_debugfs_call_dump()
616 switch (obj->type) { in huawei_wmi_debugfs_call_dump()
618 seq_printf(m, "0x%llx", obj->integer.value); in huawei_wmi_debugfs_call_dump()
621 seq_printf(m, "\"%.*s\"", obj->string.length, obj->string.pointer); in huawei_wmi_debugfs_call_dump()
625 for (i = 0; i < obj->buffer.length; i++) { in huawei_wmi_debugfs_call_dump()
626 seq_printf(m, "0x%02x", obj->buffer.pointer[i]); in huawei_wmi_debugfs_call_dump()
627 if (i < obj->buffer.length - 1) in huawei_wmi_debugfs_call_dump()
634 for (i = 0; i < obj->package.count; i++) { in huawei_wmi_debugfs_call_dump()
635 huawei_wmi_debugfs_call_dump(m, huawei, &obj->package.elements[i]); in huawei_wmi_debugfs_call_dump()
636 if (i < obj->package.count - 1) in huawei_wmi_debugfs_call_dump()
642 dev_err(huawei->dev, "Unexpected obj type, got %d\n", obj->type); in huawei_wmi_debugfs_call_dump()
649 struct huawei_wmi *huawei = m->private; in huawei_wmi_debugfs_call_show()
656 in.pointer = &huawei->debug.arg; in huawei_wmi_debugfs_call_show()
664 err = -EIO; in huawei_wmi_debugfs_call_show()
681 huawei->debug.root = debugfs_create_dir("huawei-wmi", NULL); in huawei_wmi_debugfs_setup()
683 debugfs_create_x64("arg", 0644, huawei->debug.root, in huawei_wmi_debugfs_setup()
684 &huawei->debug.arg); in huawei_wmi_debugfs_setup()
686 huawei->debug.root, huawei, &huawei_wmi_debugfs_call_fops); in huawei_wmi_debugfs_setup()
693 debugfs_remove_recursive(huawei->debug.root); in huawei_wmi_debugfs_exit()
717 if (obj && obj->type == ACPI_TYPE_INTEGER) in huawei_wmi_process_key()
718 code = obj->integer.value; in huawei_wmi_process_key()
725 dev_info(&idev->dev, "Unknown key pressed, code: 0x%04x\n", code); in huawei_wmi_process_key()
729 if (quirks && !quirks->report_brightness && in huawei_wmi_process_key()
730 (key->sw.code == KEY_BRIGHTNESSDOWN || in huawei_wmi_process_key()
731 key->sw.code == KEY_BRIGHTNESSUP)) in huawei_wmi_process_key()
741 if (obj && obj->type == ACPI_TYPE_INTEGER) in huawei_wmi_input_notify()
742 huawei_wmi_process_key(idev, obj->integer.value); in huawei_wmi_input_notify()
744 dev_err(&idev->dev, "Bad response type\n"); in huawei_wmi_input_notify()
755 return -ENOMEM; in huawei_wmi_input_setup()
757 idev->name = "Huawei WMI hotkeys"; in huawei_wmi_input_setup()
758 idev->phys = "wmi/input0"; in huawei_wmi_input_setup()
759 idev->id.bustype = BUS_HOST; in huawei_wmi_input_setup()
760 idev->dev.parent = dev; in huawei_wmi_input_setup()
772 return -EIO; in huawei_wmi_input_setup()
796 huawei_wmi->dev = &pdev->dev; in huawei_wmi_probe()
798 while (*guid->guid_string) { in huawei_wmi_probe()
799 if (wmi_has_guid(guid->guid_string)) { in huawei_wmi_probe()
800 err = huawei_wmi_input_setup(&pdev->dev, guid->guid_string); in huawei_wmi_probe()
802 dev_err(&pdev->dev, "Failed to setup input on %s\n", guid->guid_string); in huawei_wmi_probe()
811 mutex_init(&huawei_wmi->wmi_lock); in huawei_wmi_probe()
813 huawei_wmi_leds_setup(&pdev->dev); in huawei_wmi_probe()
814 huawei_wmi_fn_lock_setup(&pdev->dev); in huawei_wmi_probe()
815 huawei_wmi_battery_setup(&pdev->dev); in huawei_wmi_probe()
816 huawei_wmi_debugfs_setup(&pdev->dev); in huawei_wmi_probe()
826 while (*guid->guid_string) { in huawei_wmi_remove()
827 if (wmi_has_guid(guid->guid_string)) in huawei_wmi_remove()
828 huawei_wmi_input_exit(&pdev->dev, guid->guid_string); in huawei_wmi_remove()
834 huawei_wmi_debugfs_exit(&pdev->dev); in huawei_wmi_remove()
835 huawei_wmi_battery_exit(&pdev->dev); in huawei_wmi_remove()
836 huawei_wmi_fn_lock_exit(&pdev->dev); in huawei_wmi_remove()
842 .name = "huawei-wmi",
855 return -ENOMEM; in huawei_wmi_init()
859 if (battery_reset != -1) in huawei_wmi_init()
860 quirks->battery_reset = battery_reset; in huawei_wmi_init()
861 if (report_brightness != -1) in huawei_wmi_init()
862 quirks->report_brightness = report_brightness; in huawei_wmi_init()
868 pdev = platform_device_register_simple("huawei-wmi", PLATFORM_DEVID_NONE, NULL, 0); in huawei_wmi_init()
885 struct platform_device *pdev = to_platform_device(huawei_wmi->dev); in huawei_wmi_exit()