#include <linux/err.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/input.h>
#include <linux/serio.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#define ARC_PS2_PORTS …
#define ARC_ARC_PS2_ID …
#define STAT_TIMEOUT …
#define PS2_STAT_RX_FRM_ERR …
#define PS2_STAT_RX_BUF_OVER …
#define PS2_STAT_RX_INT_EN …
#define PS2_STAT_RX_VAL …
#define PS2_STAT_TX_ISNOT_FUL …
#define PS2_STAT_TX_INT_EN …
struct arc_ps2_port { … };
struct arc_ps2_data { … };
static void arc_ps2_check_rx(struct arc_ps2_data *arc_ps2,
struct arc_ps2_port *port)
{ … }
static irqreturn_t arc_ps2_interrupt(int irq, void *dev)
{ … }
static int arc_ps2_write(struct serio *io, unsigned char val)
{ … }
static int arc_ps2_open(struct serio *io)
{ … }
static void arc_ps2_close(struct serio *io)
{ … }
static void __iomem *arc_ps2_calc_addr(struct arc_ps2_data *arc_ps2,
int index, bool status)
{ … }
static void arc_ps2_inhibit_ports(struct arc_ps2_data *arc_ps2)
{ … }
static int arc_ps2_create_port(struct platform_device *pdev,
struct arc_ps2_data *arc_ps2,
int index)
{ … }
static int arc_ps2_probe(struct platform_device *pdev)
{ … }
static void arc_ps2_remove(struct platform_device *pdev)
{ … }
#ifdef CONFIG_OF
static const struct of_device_id arc_ps2_match[] = …;
MODULE_DEVICE_TABLE(of, arc_ps2_match);
#endif
static struct platform_driver arc_ps2_driver = …;
module_platform_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;