Hi, thanks for the feedback. > [...] > >> +static void input_key(struct system76_data *data, unsigned int code) > >> +{ > >> + input_report_key(data->input, code, 1); > >> + input_sync(data->input); > >> + > >> + input_report_key(data->input, code, 0); > >> + input_sync(data->input); > >> +} > >> + > >> // Handle ACPI notification > >> static void system76_notify(struct acpi_device *acpi_dev, u32 event) > >> { > >> @@ -459,6 +470,9 @@ static void system76_notify(struct acpi_device *acpi_dev, u32 event) > >> case 0x84: > >> kb_led_hotkey_color(data); > >> break; > >> + case 0x85: > >> + input_key(data, KEY_SCREENLOCK); > >> + break; > >> } > >> } > >> > >> @@ -524,6 +538,21 @@ static int system76_add(struct acpi_device *acpi_dev) > >> if (IS_ERR(data->therm)) > >> return PTR_ERR(data->therm); > >> > >> + data->input = devm_input_allocate_device(&acpi_dev->dev); > >> + if (!data->input) > >> + return -ENOMEM; > >> + data->input->name = "System76 ACPI Hotkeys"; > >> + data->input->phys = "system76_acpi/input0"; > >> + data->input->id.bustype = BUS_HOST; > >> + data->input->dev.parent = &acpi_dev->dev; > >> + set_bit(EV_KEY, data->input->evbit); > >> + set_bit(KEY_SCREENLOCK, data->input->keybit); > >> + err = input_register_device(data->input); > >> + if (err) { > >> + input_free_device(data->input); > >> + return err; > >> + } > >> + > >> return 0; > >> } > > > > Hi, > > > > wouldn't sparse_keymap be a better choice here? > > Since none of the notify events are actually keys; I'm not sure I understand what you mean, could you please clarify? > and since there is only one keycode involved atm, that > seems like a bit of overkill to me. Indeed, it might be an overkill, but I'd still vote for that since - it is an ε effort investment to convert the current code, and - the number of keys is expected to grow (at least that's my assumption), and - it avoids code duplication, the resulting code is simple and short. > [...] Barnabás Pőcze