#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/kobject.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_data/cros_ec_commands.h>
#include <linux/platform_data/cros_ec_proto.h>
#include <linux/platform_device.h>
#include <linux/printk.h>
#include <linux/slab.h>
#include <linux/stat.h>
#include <linux/types.h>
#include <linux/uaccess.h>
#define DRV_NAME …
static ssize_t reboot_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t reboot_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static ssize_t version_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t flashinfo_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t kb_wake_angle_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t kb_wake_angle_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static DEVICE_ATTR_RW(reboot);
static DEVICE_ATTR_RO(version);
static DEVICE_ATTR_RO(flashinfo);
static DEVICE_ATTR_RW(kb_wake_angle);
static struct attribute *__ec_attrs[] = …;
static umode_t cros_ec_ctrl_visible(struct kobject *kobj,
struct attribute *a, int n)
{ … }
static const struct attribute_group cros_ec_attr_group = …;
static int cros_ec_sysfs_probe(struct platform_device *pd)
{ … }
static void cros_ec_sysfs_remove(struct platform_device *pd)
{ … }
static const struct platform_device_id cros_ec_sysfs_id[] = …;
MODULE_DEVICE_TABLE(platform, cros_ec_sysfs_id);
static struct platform_driver cros_ec_sysfs_driver = …;
module_platform_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;