HID: google: Add support for vivaldi to hid-hammer

Add support to the hammer driver to parse vivaldi keyboard layouts and
expose them to userspace. This allows hammer devices to use vivaldi
function row keys while also supporting the other features this driver
supports, like the CBAS (chrome base attached switch) and a keyboard
backlight.

Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Tested-by: Stephen Boyd <swboyd@chromium.org> # coachz, wormdingler
Link: https://lore.kernel.org/r/20220228075446.466016-5-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Stephen Boyd 2022-03-14 21:08:44 -07:00 committed by Dmitry Torokhov
parent 33bbe04a15
commit a9d672998a
2 changed files with 13 additions and 0 deletions

View File

@ -412,6 +412,8 @@ config HID_VIVALDI_COMMON
config HID_GOOGLE_HAMMER
tristate "Google Hammer Keyboard"
select HID_VIVALDI_COMMON
select INPUT_VIVALDIFMAP
depends on USB_HID && LEDS_CLASS && CROS_EC
help
Say Y here if you have a Google Hammer device.

View File

@ -15,6 +15,7 @@
#include <linux/acpi.h>
#include <linux/hid.h>
#include <linux/input/vivaldi-fmap.h>
#include <linux/leds.h>
#include <linux/module.h>
#include <linux/of.h>
@ -25,6 +26,7 @@
#include <asm/unaligned.h>
#include "hid-ids.h"
#include "hid-vivaldi-common.h"
/*
* C(hrome)B(ase)A(ttached)S(witch) - switch exported by Chrome EC and reporting
@ -501,8 +503,15 @@ static void hammer_stop(void *hdev)
static int hammer_probe(struct hid_device *hdev,
const struct hid_device_id *id)
{
struct vivaldi_data *vdata;
int error;
vdata = devm_kzalloc(&hdev->dev, sizeof(*vdata), GFP_KERNEL);
if (!vdata)
return -ENOMEM;
hid_set_drvdata(hdev, vdata);
error = hid_parse(hdev);
if (error)
return error;
@ -598,6 +607,8 @@ static struct hid_driver hammer_driver = {
.id_table = hammer_devices,
.probe = hammer_probe,
.remove = hammer_remove,
.feature_mapping = vivaldi_feature_mapping,
.input_configured = vivaldi_input_configured,
.input_mapping = hammer_input_mapping,
.event = hammer_event,
};