#include <linux/device.h>
#include <linux/input.h>
#include <linux/hid.h>
#include <linux/module.h>
#include "hid-ids.h"
#define MS_HIDINPUT …
#define MS_ERGONOMY …
#define MS_PRESENTER …
#define MS_RDESC …
#define MS_NOGET …
#define MS_DUPLICATE_USAGES …
#define MS_SURFACE_DIAL …
#define MS_QUIRK_FF …
struct ms_data { … };
#define XB1S_FF_REPORT …
#define ENABLE_WEAK …
#define ENABLE_STRONG …
enum { … };
struct xb1s_ff_report { … } __packed;
static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc,
unsigned int *rsize)
{ … }
#define ms_map_key_clear(c) …
static int ms_ergonomy_kb_quirk(struct hid_input *hi, struct hid_usage *usage,
unsigned long **bit, int *max)
{ … }
static int ms_presenter_8k_quirk(struct hid_input *hi, struct hid_usage *usage,
unsigned long **bit, int *max)
{ … }
static int ms_surface_dial_quirk(struct hid_input *hi, struct hid_field *field,
struct hid_usage *usage, unsigned long **bit, int *max)
{ … }
static int ms_input_mapping(struct hid_device *hdev, struct hid_input *hi,
struct hid_field *field, struct hid_usage *usage,
unsigned long **bit, int *max)
{ … }
static int ms_input_mapped(struct hid_device *hdev, struct hid_input *hi,
struct hid_field *field, struct hid_usage *usage,
unsigned long **bit, int *max)
{ … }
static int ms_event(struct hid_device *hdev, struct hid_field *field,
struct hid_usage *usage, __s32 value)
{ … }
static void ms_ff_worker(struct work_struct *work)
{ … }
static int ms_play_effect(struct input_dev *dev, void *data,
struct ff_effect *effect)
{ … }
static int ms_init_ff(struct hid_device *hdev)
{ … }
static void ms_remove_ff(struct hid_device *hdev)
{ … }
static int ms_probe(struct hid_device *hdev, const struct hid_device_id *id)
{ … }
static void ms_remove(struct hid_device *hdev)
{ … }
static const struct hid_device_id ms_devices[] = …;
MODULE_DEVICE_TABLE(hid, ms_devices);
static struct hid_driver ms_driver = …;
module_hid_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;