Re: [PATCH 2/2] platform/x86: system76_acpi: Add input driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Hi,
> 
> On 9/7/20 5:49 PM, Barnabás Pőcze wrote:
> > 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?
> 
> What I meant to say (but didn't) is:
> 
> "Since none of the notify events are _currently_ actually keys"
> 
> Currently, as in before this patch:
> 
> static void system76_notify(struct acpi_device *acpi_dev, u32 event)
> {
>          struct system76_data *data;
> 
>          data = acpi_driver_data(acpi_dev);
>          switch (event) {
>          case 0x80:
>                  kb_led_hotkey_hardware(data);
>                  break;
>          case 0x81:
>                  kb_led_hotkey_toggle(data);
>                  break;
>          case 0x82:
>                  kb_led_hotkey_down(data);
>                  break;
>          case 0x83:
>                  kb_led_hotkey_up(data);
>                  break;
>          case 0x84:
>                  kb_led_hotkey_color(data);
>                  break;
>          }
> }
> 
> So we cannot just take the event code and feed it to the
> sparse_keymap code since events 0x80-0x84 are not
> key events (they are related to the LEDs on the kbd).
> 
> >> 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.
> 
> If Jeremy is ok with adding sparse_keymap support to the next version, that
> is fine with me. But IMHO it is not really necessary for adding just this
> single key.
We don't really have a plan for any more keycodes. The intel-hid driver does most of
what we need, but for some reason omits the screenlock key. So we have added it
here.

If there is a keycode we want to add, I would not mind looking into any alternative,
provided it is less code to maintain.
> Regards,
> 
> Hans
> 
>




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux