// SPDX-License-Identifier: GPL-2.0-only /* * Touchwindow serial touchscreen driver * * Copyright (c) 2006 Rick Koch <[email protected]> * * Based on MicroTouch driver (drivers/input/touchscreen/mtouch.c) * Copyright (c) 2004 Vojtech Pavlik * and Dan Streetman <[email protected]> */ /* * 2005/02/19 Rick Koch: * The Touchwindow I used is made by Edmark Corp. and * constantly outputs a stream of 0's unless it is touched. * It then outputs 3 bytes: X, Y, and a copy of Y. */ #include <linux/errno.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/input.h> #include <linux/serio.h> #define DRIVER_DESC … MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…); MODULE_LICENSE(…) …; /* * Definitions & global arrays. */ #define TW_LENGTH … #define TW_MIN_XC … #define TW_MAX_XC … #define TW_MIN_YC … #define TW_MAX_YC … /* * Per-touchscreen data. */ struct tw { … }; static irqreturn_t tw_interrupt(struct serio *serio, unsigned char data, unsigned int flags) { … } /* * tw_disconnect() is the opposite of tw_connect() */ static void tw_disconnect(struct serio *serio) { … } /* * tw_connect() is the routine that is called when someone adds a * new serio device that supports the Touchwin protocol and registers it as * an input device. */ static int tw_connect(struct serio *serio, struct serio_driver *drv) { … } /* * The serio driver structure. */ static const struct serio_device_id tw_serio_ids[] = …; MODULE_DEVICE_TABLE(serio, tw_serio_ids); static struct serio_driver tw_drv = …; module_serio_driver(…) …;