#include <linux/hid.h>
#include <linux/hidraw.h>
#include <linux/hw_random.h>
#include <linux/leds.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/usb.h>
#include "usbhid/usbhid.h"
#include "hid-ids.h"
#define DRIVER_SHORT …
#define HID_REPORT_SIZE …
enum hw_revision { … };
struct hw_revision_config { … };
static const struct hw_revision_config hw_configs[] = …;
#define CID_BROADCAST …
struct u2f_hid_msg { … } __packed;
struct u2f_hid_report { … } __packed;
#define U2F_HID_MSG_LEN(f) …
struct u2fzero_device { … };
static int u2fzero_send(struct u2fzero_device *dev, struct u2f_hid_report *req)
{ … }
struct u2fzero_transfer_context { … };
static void u2fzero_read_callback(struct urb *urb)
{ … }
static int u2fzero_recv(struct u2fzero_device *dev,
struct u2f_hid_report *req,
struct u2f_hid_msg *resp)
{ … }
static int u2fzero_blink(struct led_classdev *ldev)
{ … }
static int u2fzero_brightness_set(struct led_classdev *ldev,
enum led_brightness brightness)
{ … }
static int u2fzero_rng_read(struct hwrng *rng, void *data,
size_t max, bool wait)
{ … }
static int u2fzero_init_led(struct u2fzero_device *dev,
unsigned int minor)
{ … }
static int u2fzero_init_hwrng(struct u2fzero_device *dev,
unsigned int minor)
{ … }
static int u2fzero_fill_in_urb(struct u2fzero_device *dev)
{ … }
static int u2fzero_probe(struct hid_device *hdev,
const struct hid_device_id *id)
{ … }
static void u2fzero_remove(struct hid_device *hdev)
{ … }
static const struct hid_device_id u2fzero_table[] = …;
MODULE_DEVICE_TABLE(hid, u2fzero_table);
static struct hid_driver u2fzero_driver = …;
module_hid_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;