#define DRIVER_NAME …
#include <linux/fs.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/miscdevice.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/uaccess.h>
struct smo8800_device { … };
static irqreturn_t smo8800_interrupt_quick(int irq, void *data)
{ … }
static irqreturn_t smo8800_interrupt_thread(int irq, void *data)
{ … }
static ssize_t smo8800_misc_read(struct file *file, char __user *buf,
size_t count, loff_t *pos)
{ … }
static int smo8800_misc_open(struct inode *inode, struct file *file)
{ … }
static int smo8800_misc_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations smo8800_misc_fops = …;
static int smo8800_probe(struct platform_device *device)
{ … }
static void smo8800_remove(struct platform_device *device)
{ … }
static const struct acpi_device_id smo8800_ids[] = …;
MODULE_DEVICE_TABLE(acpi, smo8800_ids);
static struct platform_driver smo8800_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;