Lines Matching +full:fn +full:- +full:keymap
1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (c) 2017-2018 Ronald Tschalär
6 * Copyright (c) 2022-2023 Kerem Karabay <kekrby@gmail.com>
7 * Copyright (c) 2024-2025 Aditya Garg <gargaditya08@live.com>
21 #include <linux/input/sparse-keymap.h>
23 #include "hid-ids.h"
39 " 0 - escape key only\n"
40 " 1 - function-keys\n"
41 " [2] - special keys");
45 MODULE_PARM_DESC(fntoggle, "Switch between Fn and media controls on pressing Fn key");
91 struct hid_report *report = kbd->mode_field->report; in appletb_kbd_set_mode()
92 struct hid_device *hdev = report->device; in appletb_kbd_set_mode()
101 ret = hid_set_field(kbd->mode_field, 0, mode); in appletb_kbd_set_mode()
109 kbd->current_mode = mode; in appletb_kbd_set_mode()
122 return sysfs_emit(buf, "%d\n", kbd->current_mode); in mode_show()
138 return -EINVAL; in mode_store()
158 return code - KEY_F1 + 1; in appletb_tb_key_to_slot()
160 return code - KEY_F11 + 11; in appletb_tb_key_to_slot()
163 return -EINVAL; in appletb_tb_key_to_slot()
171 if (kbd->backlight_dev && appletb_tb_autodim) { in appletb_inactivity_timer()
172 if (!kbd->has_dimmed) { in appletb_inactivity_timer()
173 backlight_device_set_brightness(kbd->backlight_dev, 1); in appletb_inactivity_timer()
174 kbd->has_dimmed = true; in appletb_inactivity_timer()
175 mod_timer(&kbd->inactivity_timer, jiffies + msecs_to_jiffies(appletb_tb_idle_timeout * 1000)); in appletb_inactivity_timer()
176 } else if (!kbd->has_turned_off) { in appletb_inactivity_timer()
177 backlight_device_set_brightness(kbd->backlight_dev, 0); in appletb_inactivity_timer()
178 kbd->has_turned_off = true; in appletb_inactivity_timer()
185 if (kbd->backlight_dev && appletb_tb_autodim) { in reset_inactivity_timer()
186 if (kbd->has_dimmed || kbd->has_turned_off) { in reset_inactivity_timer()
187 backlight_device_set_brightness(kbd->backlight_dev, 2); in reset_inactivity_timer()
188 kbd->has_dimmed = false; in reset_inactivity_timer()
189 kbd->has_turned_off = false; in reset_inactivity_timer()
191 mod_timer(&kbd->inactivity_timer, jiffies + msecs_to_jiffies(appletb_tb_dim_timeout * 1000)); in reset_inactivity_timer()
203 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_KEYBOARD || usage->type != EV_KEY) in appletb_kbd_hid_event()
206 input = field->hidinput->input; in appletb_kbd_hid_event()
209 * Skip non-touch-bar keys. in appletb_kbd_hid_event()
211 * Either the touch bar itself or usbhid generate a slew of key-down in appletb_kbd_hid_event()
215 slot = appletb_tb_key_to_slot(usage->code); in appletb_kbd_hid_event()
221 translation = sparse_keymap_entry_from_scancode(input, usage->code); in appletb_kbd_hid_event()
223 if (translation && kbd->current_mode == APPLETB_KBD_MODE_SPCL) { in appletb_kbd_hid_event()
224 input_event(input, usage->type, translation->keycode, value); in appletb_kbd_hid_event()
229 return kbd->current_mode == APPLETB_KBD_MODE_OFF; in appletb_kbd_hid_event()
235 struct appletb_kbd *kbd = handle->private; in appletb_kbd_inp_event()
240 (kbd->current_mode == APPLETB_KBD_MODE_SPCL || in appletb_kbd_inp_event()
241 kbd->current_mode == APPLETB_KBD_MODE_FN)) { in appletb_kbd_inp_event()
243 kbd->saved_mode = kbd->current_mode; in appletb_kbd_inp_event()
244 appletb_kbd_set_mode(kbd, kbd->current_mode == APPLETB_KBD_MODE_SPCL in appletb_kbd_inp_event()
247 if (kbd->saved_mode != kbd->current_mode) in appletb_kbd_inp_event()
248 appletb_kbd_set_mode(kbd, kbd->saved_mode); in appletb_kbd_inp_event()
257 struct appletb_kbd *kbd = handler->private; in appletb_kbd_inp_connect()
261 if (id->driver_info == APPLETB_DEVID_KEYBOARD) { in appletb_kbd_inp_connect()
262 handle = &kbd->kbd_handle; in appletb_kbd_inp_connect()
263 handle->name = "tbkbd"; in appletb_kbd_inp_connect()
264 } else if (id->driver_info == APPLETB_DEVID_TRACKPAD) { in appletb_kbd_inp_connect()
265 handle = &kbd->tpd_handle; in appletb_kbd_inp_connect()
266 handle->name = "tbtpd"; in appletb_kbd_inp_connect()
268 return -ENOENT; in appletb_kbd_inp_connect()
271 if (handle->dev) in appletb_kbd_inp_connect()
272 return -EEXIST; in appletb_kbd_inp_connect()
274 handle->open = 0; in appletb_kbd_inp_connect()
275 handle->dev = input_get_device(dev); in appletb_kbd_inp_connect()
276 handle->handler = handler; in appletb_kbd_inp_connect()
277 handle->private = kbd; in appletb_kbd_inp_connect()
292 input_put_device(handle->dev); in appletb_kbd_inp_connect()
293 handle->dev = NULL; in appletb_kbd_inp_connect()
302 input_put_device(handle->dev); in appletb_kbd_inp_disconnect()
303 handle->dev = NULL; in appletb_kbd_inp_disconnect()
309 struct input_dev *input = hidinput->input; in appletb_kbd_input_configured()
315 memset(input->evbit, 0, sizeof(input->evbit)); in appletb_kbd_input_configured()
316 memset(input->keybit, 0, sizeof(input->keybit)); in appletb_kbd_input_configured()
317 memset(input->ledbit, 0, sizeof(input->ledbit)); in appletb_kbd_input_configured()
319 __set_bit(EV_REP, input->evbit); in appletb_kbd_input_configured()
354 struct device *dev = &inp_dev->dev; in appletb_kbd_match_internal_device()
357 while (dev && !(dev->type && dev->type->name && in appletb_kbd_match_internal_device()
358 !strcmp(dev->type->name, "usb_device"))) in appletb_kbd_match_internal_device()
359 dev = dev->parent; in appletb_kbd_match_internal_device()
363 * instead of maintaining an ever expanding list of product-id's we in appletb_kbd_match_internal_device()
367 return !!strstr(to_usb_device(dev)->product, "Internal Keyboard"); in appletb_kbd_match_internal_device()
375 struct device *dev = &hdev->dev; in appletb_kbd_probe()
386 return -ENODEV; in appletb_kbd_probe()
390 return -ENOMEM; in appletb_kbd_probe()
392 kbd->mode_field = mode_field; in appletb_kbd_probe()
404 kbd->backlight_dev = backlight_device_get_by_name("appletb_backlight"); in appletb_kbd_probe()
405 if (!kbd->backlight_dev) { in appletb_kbd_probe()
406 dev_err_probe(dev, -ENODEV, "Failed to get backlight device\n"); in appletb_kbd_probe()
408 backlight_device_set_brightness(kbd->backlight_dev, 2); in appletb_kbd_probe()
409 timer_setup(&kbd->inactivity_timer, appletb_inactivity_timer, 0); in appletb_kbd_probe()
410 mod_timer(&kbd->inactivity_timer, jiffies + msecs_to_jiffies(appletb_tb_dim_timeout * 1000)); in appletb_kbd_probe()
413 kbd->inp_handler.event = appletb_kbd_inp_event; in appletb_kbd_probe()
414 kbd->inp_handler.connect = appletb_kbd_inp_connect; in appletb_kbd_probe()
415 kbd->inp_handler.disconnect = appletb_kbd_inp_disconnect; in appletb_kbd_probe()
416 kbd->inp_handler.name = "appletb"; in appletb_kbd_probe()
417 kbd->inp_handler.id_table = appletb_kbd_input_devices; in appletb_kbd_probe()
418 kbd->inp_handler.match = appletb_kbd_match_internal_device; in appletb_kbd_probe()
419 kbd->inp_handler.private = kbd; in appletb_kbd_probe()
421 ret = input_register_handler(&kbd->inp_handler); in appletb_kbd_probe()
450 input_unregister_handler(&kbd->inp_handler); in appletb_kbd_remove()
451 timer_delete_sync(&kbd->inactivity_timer); in appletb_kbd_remove()
462 kbd->saved_mode = kbd->current_mode; in appletb_kbd_suspend()
472 appletb_kbd_set_mode(kbd, kbd->saved_mode); in appletb_kbd_reset_resume()
486 .name = "hid-appletb-kbd",