Skip to content

Commit

Permalink
HID: google: Add support for vivaldi to hid-hammer
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Stephen Boyd authored and Dmitry Torokhov committed Mar 15, 2022
1 parent 33bbe04 commit a9d6729
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/hid/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
11 changes: 11 additions & 0 deletions drivers/hid/hid-google-hammer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
};
Expand Down

0 comments on commit a9d6729

Please sign in to comment.