#include <linux/unaligned.h>
#include <linux/hid.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/types.h>
#include <linux/surface_aggregator/controller.h>
#include "surface_hid_core.h"
#define KBD_FEATURE_REPORT_SIZE …
enum surface_kbd_cid { … };
static int ssam_kbd_get_descriptor(struct surface_hid_device *shid, u8 entry, u8 *buf, size_t len)
{ … }
static int ssam_kbd_set_caps_led(struct surface_hid_device *shid, bool value)
{ … }
static int ssam_kbd_get_feature_report(struct surface_hid_device *shid, u8 *buf, size_t len)
{ … }
static bool ssam_kbd_is_input_event(const struct ssam_event *event)
{ … }
static u32 ssam_kbd_event_fn(struct ssam_event_notifier *nf, const struct ssam_event *event)
{ … }
static int skbd_get_caps_led_value(struct hid_device *hid, u8 rprt_id, u8 *buf, size_t len)
{ … }
static int skbd_output_report(struct surface_hid_device *shid, u8 rprt_id, u8 *buf, size_t len)
{ … }
static int skbd_get_feature_report(struct surface_hid_device *shid, u8 rprt_id, u8 *buf, size_t len)
{ … }
static int skbd_set_feature_report(struct surface_hid_device *shid, u8 rprt_id, u8 *buf, size_t len)
{ … }
static int surface_kbd_probe(struct platform_device *pdev)
{ … }
static void surface_kbd_remove(struct platform_device *pdev)
{ … }
static const struct acpi_device_id surface_kbd_match[] = …;
MODULE_DEVICE_TABLE(acpi, surface_kbd_match);
static struct platform_driver surface_kbd_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;