Commit a9d67299 authored by Stephen Boyd's avatar Stephen Boyd Committed by Dmitry Torokhov
Browse files

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: default avatarStephen 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: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 33bbe04a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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.
+11 −0
Original line number Diff line number Diff line
@@ -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,
};