Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Input: mk712 - remove driver

This touchscreen controller was used om Gateway AOL Connected Touchpad
released in 2000 and, according to Wikipedia, removed from the market
in October 2001 due to slow sales.

It looks like it can still be bought on eBay for $1000 but I really
doubt anyone will actually use it.

Remove the driver.

Link: https://patch.msgid.link/20240808172733.1194442-5-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

-220
-12
drivers/input/touchscreen/Kconfig
··· 723 723 To compile this driver as a module, choose M here: the 724 724 module will be called inexio. 725 725 726 - config TOUCHSCREEN_MK712 727 - tristate "ICS MicroClock MK712 touchscreen" 728 - depends on ISA 729 - help 730 - Say Y here if you have the ICS MicroClock MK712 touchscreen 731 - controller chip in your system. 732 - 733 - If unsure, say N. 734 - 735 - To compile this driver as a module, choose M here: the 736 - module will be called mk712. 737 - 738 726 config TOUCHSCREEN_HP600 739 727 tristate "HP Jornada 6xx touchscreen" 740 728 depends on SH_HP6XX && SH_ADC
-1
drivers/input/touchscreen/Makefile
··· 68 68 obj-$(CONFIG_TOUCHSCREEN_MMS114) += mms114.o 69 69 obj-$(CONFIG_TOUCHSCREEN_MSG2638) += msg2638.o 70 70 obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o 71 - obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o 72 71 obj-$(CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS) += novatek-nvt-ts.o 73 72 obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o 74 73 obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o
-207
drivers/input/touchscreen/mk712.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * ICS MK712 touchscreen controller driver 4 - * 5 - * Copyright (c) 1999-2002 Transmeta Corporation 6 - * Copyright (c) 2005 Rick Koch <n1gp@hotmail.com> 7 - * Copyright (c) 2005 Vojtech Pavlik <vojtech@suse.cz> 8 - */ 9 - 10 - 11 - /* 12 - * This driver supports the ICS MicroClock MK712 TouchScreen controller, 13 - * found in Gateway AOL Connected Touchpad computers. 14 - * 15 - * Documentation for ICS MK712 can be found at: 16 - * https://www.idt.com/general-parts/mk712-touch-screen-controller 17 - */ 18 - 19 - /* 20 - * 1999-12-18: original version, Daniel Quinlan 21 - * 1999-12-19: added anti-jitter code, report pen-up events, fixed mk712_poll 22 - * to use queue_empty, Nathan Laredo 23 - * 1999-12-20: improved random point rejection, Nathan Laredo 24 - * 2000-01-05: checked in new anti-jitter code, changed mouse protocol, fixed 25 - * queue code, added module options, other fixes, Daniel Quinlan 26 - * 2002-03-15: Clean up for kernel merge <alan@redhat.com> 27 - * Fixed multi open race, fixed memory checks, fixed resource 28 - * allocation, fixed close/powerdown bug, switched to new init 29 - * 2005-01-18: Ported to 2.6 from 2.4.28, Rick Koch 30 - * 2005-02-05: Rewritten for the input layer, Vojtech Pavlik 31 - * 32 - */ 33 - 34 - #include <linux/module.h> 35 - #include <linux/kernel.h> 36 - #include <linux/init.h> 37 - #include <linux/errno.h> 38 - #include <linux/delay.h> 39 - #include <linux/ioport.h> 40 - #include <linux/interrupt.h> 41 - #include <linux/input.h> 42 - #include <asm/io.h> 43 - 44 - MODULE_AUTHOR("Daniel Quinlan <quinlan@pathname.com>, Vojtech Pavlik <vojtech@suse.cz>"); 45 - MODULE_DESCRIPTION("ICS MicroClock MK712 TouchScreen driver"); 46 - MODULE_LICENSE("GPL"); 47 - 48 - static unsigned int mk712_io = 0x260; /* Also 0x200, 0x208, 0x300 */ 49 - module_param_hw_named(io, mk712_io, uint, ioport, 0); 50 - MODULE_PARM_DESC(io, "I/O base address of MK712 touchscreen controller"); 51 - 52 - static unsigned int mk712_irq = 10; /* Also 12, 14, 15 */ 53 - module_param_hw_named(irq, mk712_irq, uint, irq, 0); 54 - MODULE_PARM_DESC(irq, "IRQ of MK712 touchscreen controller"); 55 - 56 - /* eight 8-bit registers */ 57 - #define MK712_STATUS 0 58 - #define MK712_X 2 59 - #define MK712_Y 4 60 - #define MK712_CONTROL 6 61 - #define MK712_RATE 7 62 - 63 - /* status */ 64 - #define MK712_STATUS_TOUCH 0x10 65 - #define MK712_CONVERSION_COMPLETE 0x80 66 - 67 - /* control */ 68 - #define MK712_ENABLE_INT 0x01 69 - #define MK712_INT_ON_CONVERSION_COMPLETE 0x02 70 - #define MK712_INT_ON_CHANGE_IN_TOUCH_STATUS 0x04 71 - #define MK712_ENABLE_PERIODIC_CONVERSIONS 0x10 72 - #define MK712_READ_ONE_POINT 0x20 73 - #define MK712_POWERUP 0x40 74 - 75 - static struct input_dev *mk712_dev; 76 - static DEFINE_SPINLOCK(mk712_lock); 77 - 78 - static irqreturn_t mk712_interrupt(int irq, void *dev_id) 79 - { 80 - unsigned char status; 81 - static int debounce = 1; 82 - static unsigned short last_x; 83 - static unsigned short last_y; 84 - 85 - guard(spinlock)(&mk712_lock); 86 - 87 - status = inb(mk712_io + MK712_STATUS); 88 - 89 - if (~status & MK712_CONVERSION_COMPLETE) { 90 - debounce = 1; 91 - goto end; 92 - } 93 - 94 - if (~status & MK712_STATUS_TOUCH) { 95 - debounce = 1; 96 - input_report_key(mk712_dev, BTN_TOUCH, 0); 97 - goto end; 98 - } 99 - 100 - if (debounce) { 101 - debounce = 0; 102 - goto end; 103 - } 104 - 105 - input_report_key(mk712_dev, BTN_TOUCH, 1); 106 - input_report_abs(mk712_dev, ABS_X, last_x); 107 - input_report_abs(mk712_dev, ABS_Y, last_y); 108 - 109 - end: 110 - last_x = inw(mk712_io + MK712_X) & 0x0fff; 111 - last_y = inw(mk712_io + MK712_Y) & 0x0fff; 112 - input_sync(mk712_dev); 113 - 114 - return IRQ_HANDLED; 115 - } 116 - 117 - static int mk712_open(struct input_dev *dev) 118 - { 119 - guard(spinlock_irqsave)(&mk712_lock); 120 - 121 - outb(0, mk712_io + MK712_CONTROL); /* Reset */ 122 - 123 - outb(MK712_ENABLE_INT | MK712_INT_ON_CONVERSION_COMPLETE | 124 - MK712_INT_ON_CHANGE_IN_TOUCH_STATUS | 125 - MK712_ENABLE_PERIODIC_CONVERSIONS | 126 - MK712_POWERUP, mk712_io + MK712_CONTROL); 127 - 128 - outb(10, mk712_io + MK712_RATE); /* 187 points per second */ 129 - 130 - return 0; 131 - } 132 - 133 - static void mk712_close(struct input_dev *dev) 134 - { 135 - guard(spinlock_irqsave)(&mk712_lock); 136 - 137 - outb(0, mk712_io + MK712_CONTROL); 138 - } 139 - 140 - static int __init mk712_init(void) 141 - { 142 - int err; 143 - 144 - if (!request_region(mk712_io, 8, "mk712")) { 145 - printk(KERN_WARNING "mk712: unable to get IO region\n"); 146 - return -ENODEV; 147 - } 148 - 149 - outb(0, mk712_io + MK712_CONTROL); 150 - 151 - if ((inw(mk712_io + MK712_X) & 0xf000) || /* Sanity check */ 152 - (inw(mk712_io + MK712_Y) & 0xf000) || 153 - (inw(mk712_io + MK712_STATUS) & 0xf333)) { 154 - printk(KERN_WARNING "mk712: device not present\n"); 155 - err = -ENODEV; 156 - goto fail1; 157 - } 158 - 159 - mk712_dev = input_allocate_device(); 160 - if (!mk712_dev) { 161 - printk(KERN_ERR "mk712: not enough memory\n"); 162 - err = -ENOMEM; 163 - goto fail1; 164 - } 165 - 166 - mk712_dev->name = "ICS MicroClock MK712 TouchScreen"; 167 - mk712_dev->phys = "isa0260/input0"; 168 - mk712_dev->id.bustype = BUS_ISA; 169 - mk712_dev->id.vendor = 0x0005; 170 - mk712_dev->id.product = 0x0001; 171 - mk712_dev->id.version = 0x0100; 172 - 173 - mk712_dev->open = mk712_open; 174 - mk712_dev->close = mk712_close; 175 - 176 - mk712_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 177 - mk712_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); 178 - input_set_abs_params(mk712_dev, ABS_X, 0, 0xfff, 88, 0); 179 - input_set_abs_params(mk712_dev, ABS_Y, 0, 0xfff, 88, 0); 180 - 181 - if (request_irq(mk712_irq, mk712_interrupt, 0, "mk712", mk712_dev)) { 182 - printk(KERN_WARNING "mk712: unable to get IRQ\n"); 183 - err = -EBUSY; 184 - goto fail1; 185 - } 186 - 187 - err = input_register_device(mk712_dev); 188 - if (err) 189 - goto fail2; 190 - 191 - return 0; 192 - 193 - fail2: free_irq(mk712_irq, mk712_dev); 194 - fail1: input_free_device(mk712_dev); 195 - release_region(mk712_io, 8); 196 - return err; 197 - } 198 - 199 - static void __exit mk712_exit(void) 200 - { 201 - input_unregister_device(mk712_dev); 202 - free_irq(mk712_irq, mk712_dev); 203 - release_region(mk712_io, 8); 204 - } 205 - 206 - module_init(mk712_init); 207 - module_exit(mk712_exit);