162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * HID support for Vivaldi Keyboard 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2020 Google LLC. 662306a36Sopenharmony_ci * Author: Sean O'Brien <seobrien@chromium.org> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/device.h> 1062306a36Sopenharmony_ci#include <linux/hid.h> 1162306a36Sopenharmony_ci#include <linux/input/vivaldi-fmap.h> 1262306a36Sopenharmony_ci#include <linux/kernel.h> 1362306a36Sopenharmony_ci#include <linux/module.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include "hid-vivaldi-common.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistatic int vivaldi_probe(struct hid_device *hdev, 1862306a36Sopenharmony_ci const struct hid_device_id *id) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci struct vivaldi_data *drvdata; 2162306a36Sopenharmony_ci int ret; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci drvdata = devm_kzalloc(&hdev->dev, sizeof(*drvdata), GFP_KERNEL); 2462306a36Sopenharmony_ci if (!drvdata) 2562306a36Sopenharmony_ci return -ENOMEM; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci hid_set_drvdata(hdev, drvdata); 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci ret = hid_parse(hdev); 3062306a36Sopenharmony_ci if (ret) 3162306a36Sopenharmony_ci return ret; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci return hid_hw_start(hdev, HID_CONNECT_DEFAULT); 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic const struct hid_device_id vivaldi_table[] = { 3762306a36Sopenharmony_ci { HID_DEVICE(HID_BUS_ANY, HID_GROUP_VIVALDI, HID_ANY_ID, HID_ANY_ID) }, 3862306a36Sopenharmony_ci { } 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciMODULE_DEVICE_TABLE(hid, vivaldi_table); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic struct hid_driver hid_vivaldi = { 4462306a36Sopenharmony_ci .name = "hid-vivaldi", 4562306a36Sopenharmony_ci .id_table = vivaldi_table, 4662306a36Sopenharmony_ci .probe = vivaldi_probe, 4762306a36Sopenharmony_ci .feature_mapping = vivaldi_feature_mapping, 4862306a36Sopenharmony_ci .driver = { 4962306a36Sopenharmony_ci .dev_groups = vivaldi_attribute_groups, 5062306a36Sopenharmony_ci }, 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cimodule_hid_driver(hid_vivaldi); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciMODULE_AUTHOR("Sean O'Brien"); 5662306a36Sopenharmony_ciMODULE_DESCRIPTION("HID vivaldi driver"); 5762306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 58