CINXE.COM

LKML: Dmitry Torokhov: [patch 13/28] drivers/input/mouse: convert to dynamic input_dev allocation

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>LKML: Dmitry Torokhov: [patch 13/28] drivers/input/mouse: convert to dynamic input_dev allocation</title><link href="/css/message.css" rel="stylesheet" type="text/css" /><link href="/css/wrap.css" rel="alternate stylesheet" type="text/css" title="wrap" /><link href="/css/nowrap.css" rel="stylesheet" type="text/css" title="nowrap" /><link href="/favicon.ico" rel="shortcut icon" /><script src="/js/simple-calendar.js" type="text/javascript"></script><script src="/js/styleswitcher.js" type="text/javascript"></script><link rel="alternate" type="application/rss+xml" title="lkml.org : last 100 messages" href="/rss.php" /><link rel="alternate" type="application/rss+xml" title="lkml.org : last messages by Dmitry Torokhov" href="/groupie.php?aid=10658" /><!--Matomo--><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(["setDoNotTrack", true]); _paq.push(["disableCookies"]); _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//m.lkml.org/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!--End Matomo Code--></head><body onload="es.jasper.simpleCalendar.init();" itemscope="itemscope" itemtype="http://schema.org/BlogPosting"><table border="0" cellpadding="0" cellspacing="0"><tr><td width="180" align="center"><a href="/"><img style="border:0;width:135px;height:32px" src="/images/toprowlk.gif" alt="lkml.org" /></a></td><td width="32">聽</td><td class="nb"><div><a class="nb" href="/lkml"> [lkml]</a> 聽 <a class="nb" href="/lkml/2005"> [2005]</a> 聽 <a class="nb" href="/lkml/2005/9"> [Sep]</a> 聽 <a class="nb" href="/lkml/2005/9/15"> [15]</a> 聽 <a class="nb" href="/lkml/last100"> [last100]</a> 聽 <a href="/rss.php"><img src="/images/rss-or.gif" border="0" alt="RSS Feed" /></a></div><div>Views: <a href="#" class="nowrap" onclick="setActiveStyleSheet('wrap');return false;">[wrap]</a><a href="#" class="wrap" onclick="setActiveStyleSheet('nowrap');return false;">[no wrap]</a> 聽 <a class="nb" href="/lkml/mheaders/2005/9/15/107" onclick="this.href='/lkml/headers'+'/2005/9/15/107';">[headers]</a>聽 <a href="/lkml/bounce/2005/9/15/107">[forward]</a>聽 </div></td><td width="32">聽</td></tr><tr><td valign="top"><div class="es-jasper-simpleCalendar" baseurl="/lkml/"></div><div class="threadlist">Messages in this thread</div><ul class="threadlist"><li class="root"><a href="/lkml/2005/9/15/58">First message in thread</a></li><li><a href="/lkml/2005/9/15/58">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/15/54">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/55">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/56">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/57">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/59">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/60">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/61">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/27/26">Greg KH</a><ul><li><a href="/lkml/2005/9/27/45">Markus Lidel</a></li></ul></li></ul></li><li><a href="/lkml/2005/9/15/63">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/15/101">Marcel Holtmann</a><ul><li><a href="/lkml/2005/9/15/200">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/15/206">Marcel Holtmann</a></li></ul></li></ul></li></ul></li><li><a href="/lkml/2005/9/15/64">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/65">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/27/29">Greg KH</a></li></ul></li><li><a href="/lkml/2005/9/15/66">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/67">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/68">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/70">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/71">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/72">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/89">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/90">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/91">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/92">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/93">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/10/5/315">Greg KH</a><ul><li><a href="/lkml/2005/10/5/317">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/10/5/330">Greg KH</a></li></ul></li></ul></li></ul></li><li><a href="/lkml/2005/9/15/94">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/95">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/96">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/104">Marcel Holtmann</a><ul><li><a href="/lkml/2005/9/15/201">Dmitry Torokhov</a></li></ul></li><li><a href="/lkml/2005/9/15/106">Dmitry Torokhov</a></li><li class="origin"><a href="">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/388">Andrew Morton</a><ul><li><a href="/lkml/2005/9/15/389">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/16/2">Andrew Morton</a><ul><li><a href="/lkml/2005/9/16/3">Dmitry Torokhov</a></li></ul></li></ul></li></ul></li></ul></li></ul><div class="threadlist">Patch in this message</div><ul class="threadlist"><li><a href="/lkml/diff/2005/9/15/107/1">Get diff 1</a></li></ul></td><td width="32" rowspan="2" class="c" valign="top"><img src="/images/icornerl.gif" width="32" height="32" alt="/" /></td><td class="c" rowspan="2" valign="top" style="padding-top: 1em"><table><tr><td><table><tr><td class="lp">Date</td><td class="rp" itemprop="datePublished">Thu, 15 Sep 2005 02:01:44 -0500</td></tr><tr><td class="lp">From</td><td class="rp" itemprop="author">Dmitry Torokhov &lt;&gt;</td></tr><tr><td class="lp">Subject</td><td class="rp" itemprop="name">[patch 13/28] drivers/input/mouse: convert to dynamic input_dev allocation</td></tr></table></td><td></td></tr></table><pre itemprop="articleBody">Input: convert drivers/input/mouse to dynamic input_dev allocation<br /><br />This is required for input_dev sysfs integration<br /><br />Signed-off-by: Dmitry Torokhov &lt;dtor&#64;mail.ru&gt;<br />---<br /><br /> drivers/input/mouse/alps.c | 67 +++++++++++++------------<br /> drivers/input/mouse/alps.h | 2 <br /> drivers/input/mouse/amimouse.c | 51 +++++++++----------<br /> drivers/input/mouse/inport.c | 96 ++++++++++++++++++-----------------<br /> drivers/input/mouse/lifebook.c | 16 +++--<br /> drivers/input/mouse/logibm.c | 88 ++++++++++++++++----------------<br /> drivers/input/mouse/logips2pp.c | 20 ++++---<br /> drivers/input/mouse/maplemouse.c | 10 +--<br /> drivers/input/mouse/pc110pad.c | 70 ++++++++++++--------------<br /> drivers/input/mouse/psmouse-base.c | 99 +++++++++++++++++++------------------<br /> drivers/input/mouse/psmouse.h | 2 <br /> drivers/input/mouse/rpcmouse.c | 43 +++++++---------<br /> drivers/input/mouse/sermouse.c | 84 ++++++++++++++-----------------<br /> drivers/input/mouse/synaptics.c | 6 +-<br /> drivers/input/mouse/vsxxxaa.c | 84 ++++++++++++++-----------------<br /> 15 files changed, 370 insertions(+), 368 deletions(-)<br /><br />Index: work/drivers/input/mouse/amimouse.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/amimouse.c<br />+++ work/drivers/input/mouse/amimouse.c<br />&#64;&#64; -34,10 +34,7 &#64;&#64; MODULE_DESCRIPTION("Amiga mouse driver")<br /> MODULE_LICENSE("GPL");<br /> <br /> static int amimouse_lastx, amimouse_lasty;<br />-static struct input_dev amimouse_dev;<br />-<br />-static char *amimouse_name = "Amiga mouse";<br />-static char *amimouse_phys = "amimouse/input0";<br />+static struct input_dev *amimouse_dev;<br /> <br /> static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp)<br /> {<br />&#64;&#64; -62,16 +59,16 &#64;&#64; static irqreturn_t amimouse_interrupt(in<br /> <br /> potgor = custom.potgor;<br /> <br />- input_regs(&amp;amimouse_dev, fp);<br />+ input_regs(amimouse_dev, fp);<br /> <br />- input_report_rel(&amp;amimouse_dev, REL_X, dx);<br />- input_report_rel(&amp;amimouse_dev, REL_Y, dy);<br />+ input_report_rel(amimouse_dev, REL_X, dx);<br />+ input_report_rel(amimouse_dev, REL_Y, dy);<br /> <br />- input_report_key(&amp;amimouse_dev, BTN_LEFT, ciaa.pra &amp; 0x40);<br />- input_report_key(&amp;amimouse_dev, BTN_MIDDLE, potgor &amp; 0x0100);<br />- input_report_key(&amp;amimouse_dev, BTN_RIGHT, potgor &amp; 0x0400);<br />+ input_report_key(amimouse_dev, BTN_LEFT, ciaa.pra &amp; 0x40);<br />+ input_report_key(amimouse_dev, BTN_MIDDLE, potgor &amp; 0x0100);<br />+ input_report_key(amimouse_dev, BTN_RIGHT, potgor &amp; 0x0400);<br /> <br />- input_sync(&amp;amimouse_dev);<br />+ input_sync(amimouse_dev);<br /> <br /> return IRQ_HANDLED;<br /> }<br />&#64;&#64; -103,28 +100,30 &#64;&#64; static int __init amimouse_init(void)<br /> if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(AMI_MOUSE))<br /> return -ENODEV;<br /> <br />- amimouse_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />- amimouse_dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />- amimouse_dev.keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />- amimouse_dev.open = amimouse_open;<br />- amimouse_dev.close = amimouse_close;<br />-<br />- amimouse_dev.name = amimouse_name;<br />- amimouse_dev.phys = amimouse_phys;<br />- amimouse_dev.id.bustype = BUS_AMIGA;<br />- amimouse_dev.id.vendor = 0x0001;<br />- amimouse_dev.id.product = 0x0002;<br />- amimouse_dev.id.version = 0x0100;<br />+ if (!(amimouse_dev = input_allocate_device()))<br />+ return -ENOMEM;<br />+<br />+ amimouse_dev-&gt;name = "Amiga mouse";<br />+ amimouse_dev-&gt;phys = "amimouse/input0";<br />+ amimouse_dev-&gt;id.bustype = BUS_AMIGA;<br />+ amimouse_dev-&gt;id.vendor = 0x0001;<br />+ amimouse_dev-&gt;id.product = 0x0002;<br />+ amimouse_dev-&gt;id.version = 0x0100;<br />+<br />+ amimouse_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ amimouse_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />+ amimouse_dev-&gt;keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+ amimouse_dev-&gt;open = amimouse_open;<br />+ amimouse_dev-&gt;close = amimouse_close;<br /> <br />- input_register_device(&amp;amimouse_dev);<br />+ input_register_device(amimouse_dev);<br /> <br />- printk(KERN_INFO "input: %s at joy0dat\n", amimouse_name);<br /> return 0;<br /> }<br /> <br /> static void __exit amimouse_exit(void)<br /> {<br />- input_unregister_device(&amp;amimouse_dev);<br />+ input_unregister_device(amimouse_dev);<br /> }<br /> <br /> module_init(amimouse_init);<br />Index: work/drivers/input/mouse/inport.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/inport.c<br />+++ work/drivers/input/mouse/inport.c<br />&#64;&#64; -87,40 +87,7 &#64;&#64; MODULE_PARM_DESC(irq, "IRQ number (5=def<br /> <br /> __obsolete_setup("inport_irq=");<br /> <br />-static irqreturn_t inport_interrupt(int irq, void *dev_id, struct pt_regs *regs);<br />-<br />-static int inport_open(struct input_dev *dev)<br />-{<br />- if (request_irq(inport_irq, inport_interrupt, 0, "inport", NULL))<br />- return -EBUSY;<br />- outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br />- outb(INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT);<br />-<br />- return 0;<br />-}<br />-<br />-static void inport_close(struct input_dev *dev)<br />-{<br />- outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br />- outb(INPORT_MODE_BASE, INPORT_DATA_PORT);<br />- free_irq(inport_irq, NULL);<br />-}<br />-<br />-static struct input_dev inport_dev = {<br />- .evbit = { BIT(EV_KEY) | BIT(EV_REL) },<br />- .keybit = { [LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT) },<br />- .relbit = { BIT(REL_X) | BIT(REL_Y) },<br />- .open = inport_open,<br />- .close = inport_close,<br />- .name = INPORT_NAME,<br />- .phys = "isa023c/input0",<br />- .id = {<br />- .bustype = BUS_ISA,<br />- .vendor = INPORT_VENDOR,<br />- .product = 0x0001,<br />- .version = 0x0100,<br />- },<br />-};<br />+static struct input_dev *inport_dev;<br /> <br /> static irqreturn_t inport_interrupt(int irq, void *dev_id, struct pt_regs *regs)<br /> {<br />&#64;&#64; -129,31 +96,48 &#64;&#64; static irqreturn_t inport_interrupt(int <br /> outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br /> outb(INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT);<br /> <br />- input_regs(&amp;inport_dev, regs);<br />+ input_regs(inport_dev, regs);<br /> <br /> outb(INPORT_REG_X, INPORT_CONTROL_PORT);<br />- input_report_rel(&amp;inport_dev, REL_X, inb(INPORT_DATA_PORT));<br />+ input_report_rel(inport_dev, REL_X, inb(INPORT_DATA_PORT));<br /> <br /> outb(INPORT_REG_Y, INPORT_CONTROL_PORT);<br />- input_report_rel(&amp;inport_dev, REL_Y, inb(INPORT_DATA_PORT));<br />+ input_report_rel(inport_dev, REL_Y, inb(INPORT_DATA_PORT));<br /> <br /> outb(INPORT_REG_BTNS, INPORT_CONTROL_PORT);<br /> buttons = inb(INPORT_DATA_PORT);<br /> <br />- input_report_key(&amp;inport_dev, BTN_MIDDLE, buttons &amp; 1);<br />- input_report_key(&amp;inport_dev, BTN_LEFT, buttons &amp; 2);<br />- input_report_key(&amp;inport_dev, BTN_RIGHT, buttons &amp; 4);<br />+ input_report_key(inport_dev, BTN_MIDDLE, buttons &amp; 1);<br />+ input_report_key(inport_dev, BTN_LEFT, buttons &amp; 2);<br />+ input_report_key(inport_dev, BTN_RIGHT, buttons &amp; 4);<br /> <br /> outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br /> outb(INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT);<br /> <br />- input_sync(&amp;inport_dev);<br />+ input_sync(inport_dev);<br /> return IRQ_HANDLED;<br /> }<br /> <br />+static int inport_open(struct input_dev *dev)<br />+{<br />+ if (request_irq(inport_irq, inport_interrupt, 0, "inport", NULL))<br />+ return -EBUSY;<br />+ outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br />+ outb(INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT);<br />+<br />+ return 0;<br />+}<br />+<br />+static void inport_close(struct input_dev *dev)<br />+{<br />+ outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br />+ outb(INPORT_MODE_BASE, INPORT_DATA_PORT);<br />+ free_irq(inport_irq, NULL);<br />+}<br />+<br /> static int __init inport_init(void)<br /> {<br />- unsigned char a,b,c;<br />+ unsigned char a, b, c;<br /> <br /> if (!request_region(INPORT_BASE, INPORT_EXTENT, "inport")) {<br /> printk(KERN_ERR "inport.c: Can't allocate ports at %#x\n", INPORT_BASE);<br />&#64;&#64; -163,26 +147,44 &#64;&#64; static int __init inport_init(void)<br /> a = inb(INPORT_SIGNATURE_PORT);<br /> b = inb(INPORT_SIGNATURE_PORT);<br /> c = inb(INPORT_SIGNATURE_PORT);<br />- if (( a == b ) || ( a != c )) {<br />+ if (a == b || a != c) {<br /> release_region(INPORT_BASE, INPORT_EXTENT);<br /> printk(KERN_ERR "inport.c: Didn't find InPort mouse at %#x\n", INPORT_BASE);<br /> return -ENODEV;<br /> }<br /> <br />+ if (!(inport_dev = input_allocate_device())) {<br />+ printk(KERN_ERR "inport.c: Not enough memory for input device\n");<br />+ release_region(INPORT_BASE, INPORT_EXTENT);<br />+ return -ENOMEM;<br />+ }<br />+<br />+ inport_dev-&gt;name = INPORT_NAME;<br />+ inport_dev-&gt;phys = "isa023c/input0";<br />+ inport_dev-&gt;id.bustype = BUS_ISA;<br />+ inport_dev-&gt;id.vendor = INPORT_VENDOR;<br />+ inport_dev-&gt;id.product = 0x0001;<br />+ inport_dev-&gt;id.version = 0x0100;<br />+<br />+ inport_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ inport_dev-&gt;keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+ inport_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />+<br />+ inport_dev-&gt;open = inport_open;<br />+ inport_dev-&gt;close = inport_close;<br />+<br /> outb(INPORT_RESET, INPORT_CONTROL_PORT);<br /> outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);<br /> outb(INPORT_MODE_BASE, INPORT_DATA_PORT);<br /> <br />- input_register_device(&amp;inport_dev);<br />-<br />- printk(KERN_INFO "input: " INPORT_NAME " at %#x irq %d\n", INPORT_BASE, inport_irq);<br />+ input_register_device(inport_dev);<br /> <br /> return 0;<br /> }<br /> <br /> static void __exit inport_exit(void)<br /> {<br />- input_unregister_device(&amp;inport_dev);<br />+ input_unregister_device(inport_dev);<br /> release_region(INPORT_BASE, INPORT_EXTENT);<br /> }<br /> <br />Index: work/drivers/input/mouse/logibm.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/logibm.c<br />+++ work/drivers/input/mouse/logibm.c<br />&#64;&#64; -77,39 +77,7 &#64;&#64; MODULE_PARM_DESC(irq, "IRQ number (5=def<br /> <br /> __obsolete_setup("logibm_irq=");<br /> <br />-static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs);<br />-<br />-static int logibm_open(struct input_dev *dev)<br />-{<br />- if (request_irq(logibm_irq, logibm_interrupt, 0, "logibm", NULL)) {<br />- printk(KERN_ERR "logibm.c: Can't allocate irq %d\n", logibm_irq);<br />- return -EBUSY;<br />- }<br />- outb(LOGIBM_ENABLE_IRQ, LOGIBM_CONTROL_PORT);<br />- return 0;<br />-}<br />-<br />-static void logibm_close(struct input_dev *dev)<br />-{<br />- outb(LOGIBM_DISABLE_IRQ, LOGIBM_CONTROL_PORT);<br />- free_irq(logibm_irq, NULL);<br />-}<br />-<br />-static struct input_dev logibm_dev = {<br />- .evbit = { BIT(EV_KEY) | BIT(EV_REL) },<br />- .keybit = { [LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT) },<br />- .relbit = { BIT(REL_X) | BIT(REL_Y) },<br />- .open = logibm_open,<br />- .close = logibm_close,<br />- .name = "Logitech bus mouse",<br />- .phys = "isa023c/input0",<br />- .id = {<br />- .bustype = BUS_ISA,<br />- .vendor = 0x0003,<br />- .product = 0x0001,<br />- .version = 0x0100,<br />- },<br />-};<br />+static struct input_dev *logibm_dev;<br /> <br /> static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs)<br /> {<br />&#64;&#64; -127,18 +95,34 &#64;&#64; static irqreturn_t logibm_interrupt(int <br /> dy |= (buttons &amp; 0xf) &lt;&lt; 4;<br /> buttons = ~buttons &gt;&gt; 5;<br /> <br />- input_regs(&amp;logibm_dev, regs);<br />- input_report_rel(&amp;logibm_dev, REL_X, dx);<br />- input_report_rel(&amp;logibm_dev, REL_Y, dy);<br />- input_report_key(&amp;logibm_dev, BTN_RIGHT, buttons &amp; 1);<br />- input_report_key(&amp;logibm_dev, BTN_MIDDLE, buttons &amp; 2);<br />- input_report_key(&amp;logibm_dev, BTN_LEFT, buttons &amp; 4);<br />- input_sync(&amp;logibm_dev);<br />+ input_regs(logibm_dev, regs);<br />+ input_report_rel(logibm_dev, REL_X, dx);<br />+ input_report_rel(logibm_dev, REL_Y, dy);<br />+ input_report_key(logibm_dev, BTN_RIGHT, buttons &amp; 1);<br />+ input_report_key(logibm_dev, BTN_MIDDLE, buttons &amp; 2);<br />+ input_report_key(logibm_dev, BTN_LEFT, buttons &amp; 4);<br />+ input_sync(logibm_dev);<br /> <br /> outb(LOGIBM_ENABLE_IRQ, LOGIBM_CONTROL_PORT);<br /> return IRQ_HANDLED;<br /> }<br /> <br />+static int logibm_open(struct input_dev *dev)<br />+{<br />+ if (request_irq(logibm_irq, logibm_interrupt, 0, "logibm", NULL)) {<br />+ printk(KERN_ERR "logibm.c: Can't allocate irq %d\n", logibm_irq);<br />+ return -EBUSY;<br />+ }<br />+ outb(LOGIBM_ENABLE_IRQ, LOGIBM_CONTROL_PORT);<br />+ return 0;<br />+}<br />+<br />+static void logibm_close(struct input_dev *dev)<br />+{<br />+ outb(LOGIBM_DISABLE_IRQ, LOGIBM_CONTROL_PORT);<br />+ free_irq(logibm_irq, NULL);<br />+}<br />+<br /> static int __init logibm_init(void)<br /> {<br /> if (!request_region(LOGIBM_BASE, LOGIBM_EXTENT, "logibm")) {<br />&#64;&#64; -159,16 +143,34 &#64;&#64; static int __init logibm_init(void)<br /> outb(LOGIBM_DEFAULT_MODE, LOGIBM_CONFIG_PORT);<br /> outb(LOGIBM_DISABLE_IRQ, LOGIBM_CONTROL_PORT);<br /> <br />- input_register_device(&amp;logibm_dev);<br />+ if (!(logibm_dev = input_allocate_device())) {<br />+ printk(KERN_ERR "logibm.c: Not enough memory for input device\n");<br />+ release_region(LOGIBM_BASE, LOGIBM_EXTENT);<br />+ return -ENOMEM;<br />+ }<br />+<br />+ logibm_dev-&gt;name = "Logitech bus mouse";<br />+ logibm_dev-&gt;phys = "isa023c/input0";<br />+ logibm_dev-&gt;id.bustype = BUS_ISA;<br />+ logibm_dev-&gt;id.vendor = 0x0003;<br />+ logibm_dev-&gt;id.product = 0x0001;<br />+ logibm_dev-&gt;id.version = 0x0100;<br />+<br />+ logibm_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ logibm_dev-&gt;keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+ logibm_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />+<br />+ logibm_dev-&gt;open = logibm_open;<br />+ logibm_dev-&gt;close = logibm_close;<br /> <br />- printk(KERN_INFO "input: Logitech bus mouse at %#x irq %d\n", LOGIBM_BASE, logibm_irq);<br />+ input_register_device(logibm_dev);<br /> <br /> return 0;<br /> }<br /> <br /> static void __exit logibm_exit(void)<br /> {<br />- input_unregister_device(&amp;logibm_dev);<br />+ input_unregister_device(logibm_dev);<br /> release_region(LOGIBM_BASE, LOGIBM_EXTENT);<br /> }<br /> <br />Index: work/drivers/input/mouse/maplemouse.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/maplemouse.c<br />+++ work/drivers/input/mouse/maplemouse.c<br />&#64;&#64; -41,13 +41,12 &#64;&#64; static int dc_mouse_connect(struct maple<br /> unsigned long data = be32_to_cpu(dev-&gt;devinfo.function_data[0]);<br /> struct input_dev *input_dev;<br /> <br />- if (!(input_dev = kmalloc(sizeof(struct input_dev), GFP_KERNEL)))<br />- return -1;<br />+ dev-&gt;private_data = input_dev = input_allocate_device();<br />+ if (!input_dev)<br />+ return -ENOMEM;<br /> <br /> dev-&gt;private_data = input_dev;<br /> <br />- memset(input_dev, 0, sizeof(struct dc_mouse));<br />- init_input_dev(input_dev);<br /> input_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br /> input_dev-&gt;keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);<br /> input_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y) | BIT(REL_WHEEL);<br />&#64;&#64; -59,8 +58,6 &#64;&#64; static int dc_mouse_connect(struct maple<br /> <br /> maple_getcond_callback(dev, dc_mouse_callback, 1, MAPLE_FUNC_MOUSE);<br /> <br />- printk(KERN_INFO "input: mouse(0x%lx): %s\n", data, input_dev-&gt;name);<br />-<br /> return 0;<br /> }<br /> <br />&#64;&#64; -70,7 +67,6 &#64;&#64; static void dc_mouse_disconnect(struct m<br /> struct input_dev *input_dev = dev-&gt;private_data;<br /> <br /> input_unregister_device(input_dev);<br />- kfree(input_dev);<br /> }<br /> <br /> <br />Index: work/drivers/input/mouse/pc110pad.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/pc110pad.c<br />+++ work/drivers/input/mouse/pc110pad.c<br />&#64;&#64; -53,13 +53,10 &#64;&#64; MODULE_LICENSE("GPL");<br /> static int pc110pad_irq = 10;<br /> static int pc110pad_io = 0x15e0;<br /> <br />-static struct input_dev pc110pad_dev;<br />+static struct input_dev *pc110pad_dev;<br /> static int pc110pad_data[3];<br /> static int pc110pad_count;<br /> <br />-static char *pc110pad_name = "IBM PC110 TouchPad";<br />-static char *pc110pad_phys = "isa15e0/input0";<br />-<br /> static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs)<br /> {<br /> int value = inb_p(pc110pad_io);<br />&#64;&#64; -74,14 +71,14 &#64;&#64; static irqreturn_t pc110pad_interrupt(in<br /> if (pc110pad_count &lt; 3)<br /> return IRQ_HANDLED;<br /> <br />- input_regs(&amp;pc110pad_dev, regs);<br />- input_report_key(&amp;pc110pad_dev, BTN_TOUCH,<br />+ input_regs(pc110pad_dev, regs);<br />+ input_report_key(pc110pad_dev, BTN_TOUCH,<br /> pc110pad_data[0] &amp; 0x01);<br />- input_report_abs(&amp;pc110pad_dev, ABS_X,<br />+ input_report_abs(pc110pad_dev, ABS_X,<br /> pc110pad_data[1] | ((pc110pad_data[0] &lt;&lt; 3) &amp; 0x80) | ((pc110pad_data[0] &lt;&lt; 1) &amp; 0x100));<br />- input_report_abs(&amp;pc110pad_dev, ABS_Y,<br />+ input_report_abs(pc110pad_dev, ABS_Y,<br /> pc110pad_data[2] | ((pc110pad_data[0] &lt;&lt; 4) &amp; 0x80));<br />- input_sync(&amp;pc110pad_dev);<br />+ input_sync(pc110pad_dev);<br /> <br /> pc110pad_count = 0;<br /> return IRQ_HANDLED;<br />&#64;&#64; -94,9 +91,9 &#64;&#64; static void pc110pad_close(struct input_<br /> <br /> static int pc110pad_open(struct input_dev *dev)<br /> {<br />- pc110pad_interrupt(0,NULL,NULL);<br />- pc110pad_interrupt(0,NULL,NULL);<br />- pc110pad_interrupt(0,NULL,NULL);<br />+ pc110pad_interrupt(0, NULL, NULL);<br />+ pc110pad_interrupt(0, NULL, NULL);<br />+ pc110pad_interrupt(0, NULL, NULL);<br /> outb(PC110PAD_ON, pc110pad_io + 2);<br /> pc110pad_count = 0;<br /> <br />&#64;&#64; -127,45 +124,46 &#64;&#64; static int __init pc110pad_init(void)<br /> <br /> outb(PC110PAD_OFF, pc110pad_io + 2);<br /> <br />- if (request_irq(pc110pad_irq, pc110pad_interrupt, 0, "pc110pad", NULL))<br />- {<br />+ if (request_irq(pc110pad_irq, pc110pad_interrupt, 0, "pc110pad", NULL)) {<br /> release_region(pc110pad_io, 4);<br /> printk(KERN_ERR "pc110pad: Unable to get irq %d.\n", pc110pad_irq);<br /> return -EBUSY;<br /> }<br /> <br />- pc110pad_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);<br />- pc110pad_dev.absbit[0] = BIT(ABS_X) | BIT(ABS_Y);<br />- pc110pad_dev.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);<br />-<br />- pc110pad_dev.absmax[ABS_X] = 0x1ff;<br />- pc110pad_dev.absmax[ABS_Y] = 0x0ff;<br />-<br />- pc110pad_dev.open = pc110pad_open;<br />- pc110pad_dev.close = pc110pad_close;<br />-<br />- pc110pad_dev.name = pc110pad_name;<br />- pc110pad_dev.phys = pc110pad_phys;<br />- pc110pad_dev.id.bustype = BUS_ISA;<br />- pc110pad_dev.id.vendor = 0x0003;<br />- pc110pad_dev.id.product = 0x0001;<br />- pc110pad_dev.id.version = 0x0100;<br />+ if (!(pc110pad_dev = input_allocate_device())) {<br />+ free_irq(pc110pad_irq, NULL);<br />+ release_region(pc110pad_io, 4);<br />+ printk(KERN_ERR "pc110pad: Not enough memory.\n");<br />+ return -ENOMEM;<br />+ }<br />+<br />+ pc110pad_dev-&gt;name = "IBM PC110 TouchPad";<br />+ pc110pad_dev-&gt;phys = "isa15e0/input0";<br />+ pc110pad_dev-&gt;id.bustype = BUS_ISA;<br />+ pc110pad_dev-&gt;id.vendor = 0x0003;<br />+ pc110pad_dev-&gt;id.product = 0x0001;<br />+ pc110pad_dev-&gt;id.version = 0x0100;<br />+<br />+ pc110pad_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);<br />+ pc110pad_dev-&gt;absbit[0] = BIT(ABS_X) | BIT(ABS_Y);<br />+ pc110pad_dev-&gt;keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);<br /> <br />- input_register_device(&amp;pc110pad_dev);<br />+ pc110pad_dev-&gt;absmax[ABS_X] = 0x1ff;<br />+ pc110pad_dev-&gt;absmax[ABS_Y] = 0x0ff;<br /> <br />- printk(KERN_INFO "input: %s at %#x irq %d\n",<br />- pc110pad_name, pc110pad_io, pc110pad_irq);<br />+ pc110pad_dev-&gt;open = pc110pad_open;<br />+ pc110pad_dev-&gt;close = pc110pad_close;<br />+<br />+ input_register_device(pc110pad_dev);<br /> <br /> return 0;<br /> }<br /> <br /> static void __exit pc110pad_exit(void)<br /> {<br />- input_unregister_device(&amp;pc110pad_dev);<br />-<br /> outb(PC110PAD_OFF, pc110pad_io + 2);<br />-<br /> free_irq(pc110pad_irq, NULL);<br />+ input_unregister_device(pc110pad_dev);<br /> release_region(pc110pad_io, 4);<br /> }<br /> <br />Index: work/drivers/input/mouse/rpcmouse.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/rpcmouse.c<br />+++ work/drivers/input/mouse/rpcmouse.c<br />&#64;&#64; -34,20 +34,7 &#64;&#64; MODULE_DESCRIPTION("Acorn RiscPC mouse d<br /> MODULE_LICENSE("GPL");<br /> <br /> static short rpcmouse_lastx, rpcmouse_lasty;<br />-<br />-static struct input_dev rpcmouse_dev = {<br />- .evbit = { BIT(EV_KEY) | BIT(EV_REL) },<br />- .keybit = { [LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT) },<br />- .relbit = { BIT(REL_X) | BIT(REL_Y) },<br />- .name = "Acorn RiscPC Mouse",<br />- .phys = "rpcmouse/input0",<br />- .id = {<br />- .bustype = BUS_HOST,<br />- .vendor = 0x0005,<br />- .product = 0x0001,<br />- .version = 0x0100,<br />- },<br />-};<br />+static struct input_dev *rpcmouse_dev;<br /> <br /> static irqreturn_t rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs)<br /> {<br />&#64;&#64; -78,29 +65,41 &#64;&#64; static irqreturn_t rpcmouse_irq(int irq,<br /> return IRQ_HANDLED;<br /> }<br /> <br />+<br /> static int __init rpcmouse_init(void)<br /> {<br />- init_input_dev(&amp;rpcmouse_dev);<br />+ if (!(rpcmouse_dev = input_allocate_device()))<br />+ return -ENOMEM;<br />+<br />+ rpcmouse_dev-&gt;name = "Acorn RiscPC Mouse";<br />+ rpcmouse_dev-&gt;phys = "rpcmouse/input0";<br />+ rpcmouse_dev-&gt;id.bustype = BUS_HOST;<br />+ rpcmouse_dev-&gt;id.vendor = 0x0005;<br />+ rpcmouse_dev-&gt;id.product = 0x0001;<br />+ rpcmouse_dev-&gt;id.version = 0x0100;<br />+<br />+ rpcmouse_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ rpcmouse_dev-&gt;keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+ rpcmouse_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br /> <br /> rpcmouse_lastx = (short) iomd_readl(IOMD_MOUSEX);<br /> rpcmouse_lasty = (short) iomd_readl(IOMD_MOUSEY);<br /> <br />- if (request_irq(IRQ_VSYNCPULSE, rpcmouse_irq, SA_SHIRQ, "rpcmouse", &amp;rpcmouse_dev)) {<br />+ if (request_irq(IRQ_VSYNCPULSE, rpcmouse_irq, SA_SHIRQ, "rpcmouse", rpcmouse_dev)) {<br /> printk(KERN_ERR "rpcmouse: unable to allocate VSYNC interrupt\n");<br />- return -1;<br />+ input_free_device(rpcmouse_dev);<br />+ return -EBUSY;<br /> }<br /> <br />- input_register_device(&amp;rpcmouse_dev);<br />-<br />- printk(KERN_INFO "input: Acorn RiscPC mouse\n");<br />+ input_register_device(rpcmouse_dev);<br /> <br /> return 0;<br /> }<br /> <br /> static void __exit rpcmouse_exit(void)<br /> {<br />- input_unregister_device(&amp;rpcmouse_dev);<br />- free_irq(IRQ_VSYNCPULSE, &amp;rpcmouse_dev);<br />+ free_irq(IRQ_VSYNCPULSE, rpcmouse_dev);<br />+ input_unregister_device(rpcmouse_dev);<br /> }<br /> <br /> module_init(rpcmouse_init);<br />Index: work/drivers/input/mouse/sermouse.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/sermouse.c<br />+++ work/drivers/input/mouse/sermouse.c<br />&#64;&#64; -48,7 +48,7 &#64;&#64; static char *sermouse_protocols[] = { "N<br /> "Logitech MZ++ Mouse"};<br /> <br /> struct sermouse {<br />- struct input_dev dev;<br />+ struct input_dev *dev;<br /> signed char buf[8];<br /> unsigned char count;<br /> unsigned char type;<br />&#64;&#64; -64,7 +64,7 &#64;&#64; struct sermouse {<br /> <br /> static void sermouse_process_msc(struct sermouse *sermouse, signed char data, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;sermouse-&gt;dev;<br />+ struct input_dev *dev = sermouse-&gt;dev;<br /> signed char *buf = sermouse-&gt;buf;<br /> <br /> input_regs(dev, regs);<br />&#64;&#64; -107,7 +107,7 &#64;&#64; static void sermouse_process_msc(struct <br /> <br /> static void sermouse_process_ms(struct sermouse *sermouse, signed char data, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;sermouse-&gt;dev;<br />+ struct input_dev *dev = sermouse-&gt;dev;<br /> signed char *buf = sermouse-&gt;buf;<br /> <br /> if (data &amp; 0x40) sermouse-&gt;count = 0;<br />&#64;&#64; -230,9 +230,9 &#64;&#64; static void sermouse_disconnect(struct s<br /> {<br /> struct sermouse *sermouse = serio_get_drvdata(serio);<br /> <br />- input_unregister_device(&amp;sermouse-&gt;dev);<br /> serio_close(serio);<br /> serio_set_drvdata(serio, NULL);<br />+ input_unregister_device(sermouse-&gt;dev);<br /> kfree(sermouse);<br /> }<br /> <br />&#64;&#64; -244,56 +244,52 &#64;&#64; static void sermouse_disconnect(struct s<br /> static int sermouse_connect(struct serio *serio, struct serio_driver *drv)<br /> {<br /> struct sermouse *sermouse;<br />- unsigned char c;<br />- int err;<br />-<br />- if (!serio-&gt;id.proto || serio-&gt;id.proto &gt; SERIO_MZPP)<br />- return -ENODEV;<br />-<br />- if (!(sermouse = kmalloc(sizeof(struct sermouse), GFP_KERNEL)))<br />- return -ENOMEM;<br />-<br />- memset(sermouse, 0, sizeof(struct sermouse));<br />-<br />- init_input_dev(&amp;sermouse-&gt;dev);<br />- sermouse-&gt;dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />- sermouse-&gt;dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT);<br />- sermouse-&gt;dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />- sermouse-&gt;dev.private = sermouse;<br />-<br />- sermouse-&gt;type = serio-&gt;id.proto;<br />- c = serio-&gt;id.extra;<br />-<br />- if (c &amp; 0x01) set_bit(BTN_MIDDLE, sermouse-&gt;dev.keybit);<br />- if (c &amp; 0x02) set_bit(BTN_SIDE, sermouse-&gt;dev.keybit);<br />- if (c &amp; 0x04) set_bit(BTN_EXTRA, sermouse-&gt;dev.keybit);<br />- if (c &amp; 0x10) set_bit(REL_WHEEL, sermouse-&gt;dev.relbit);<br />- if (c &amp; 0x20) set_bit(REL_HWHEEL, sermouse-&gt;dev.relbit);<br />+ struct input_dev *input_dev;<br />+ unsigned char c = serio-&gt;id.extra;<br />+ int err = -ENOMEM;<br />+<br />+ sermouse = kzalloc(sizeof(struct sermouse), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!sermouse || !input_dev)<br />+ goto fail;<br /> <br />+ sermouse-&gt;dev = input_dev;<br /> sprintf(sermouse-&gt;phys, "%s/input0", serio-&gt;phys);<br />+ sermouse-&gt;type = serio-&gt;id.proto;<br /> <br />- sermouse-&gt;dev.name = sermouse_protocols[sermouse-&gt;type];<br />- sermouse-&gt;dev.phys = sermouse-&gt;phys;<br />- sermouse-&gt;dev.id.bustype = BUS_RS232;<br />- sermouse-&gt;dev.id.vendor = sermouse-&gt;type;<br />- sermouse-&gt;dev.id.product = c;<br />- sermouse-&gt;dev.id.version = 0x0100;<br />- sermouse-&gt;dev.dev = &amp;serio-&gt;dev;<br />+ input_dev-&gt;name = sermouse_protocols[sermouse-&gt;type];<br />+ input_dev-&gt;phys = sermouse-&gt;phys;<br />+ input_dev-&gt;id.bustype = BUS_RS232;<br />+ input_dev-&gt;id.vendor = sermouse-&gt;type;<br />+ input_dev-&gt;id.product = c;<br />+ input_dev-&gt;id.version = 0x0100;<br />+ input_dev-&gt;cdev.dev = &amp;serio-&gt;dev;<br />+<br />+ input_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ input_dev-&gt;keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT);<br />+ input_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />+ input_dev-&gt;private = sermouse;<br />+<br />+ if (c &amp; 0x01) set_bit(BTN_MIDDLE, input_dev-&gt;keybit);<br />+ if (c &amp; 0x02) set_bit(BTN_SIDE, input_dev-&gt;keybit);<br />+ if (c &amp; 0x04) set_bit(BTN_EXTRA, input_dev-&gt;keybit);<br />+ if (c &amp; 0x10) set_bit(REL_WHEEL, input_dev-&gt;relbit);<br />+ if (c &amp; 0x20) set_bit(REL_HWHEEL, input_dev-&gt;relbit);<br /> <br /> serio_set_drvdata(serio, sermouse);<br /> <br /> err = serio_open(serio, drv);<br />- if (err) {<br />- serio_set_drvdata(serio, NULL);<br />- kfree(sermouse);<br />- return err;<br />- }<br />-<br />- input_register_device(&amp;sermouse-&gt;dev);<br />+ if (err)<br />+ goto fail;<br /> <br />- printk(KERN_INFO "input: %s on %s\n", sermouse_protocols[sermouse-&gt;type], serio-&gt;phys);<br />+ input_register_device(sermouse-&gt;dev);<br /> <br /> return 0;<br />+<br />+ fail: serio_set_drvdata(serio, NULL);<br />+ input_free_device(input_dev);<br />+ kfree(sermouse);<br />+ return err;<br /> }<br /> <br /> static struct serio_device_id sermouse_serio_ids[] = {<br />Index: work/drivers/input/mouse/vsxxxaa.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/vsxxxaa.c<br />+++ work/drivers/input/mouse/vsxxxaa.c<br />&#64;&#64; -112,7 +112,7 &#64;&#64; MODULE_LICENSE ("GPL");<br /> <br /> <br /> struct vsxxxaa {<br />- struct input_dev dev;<br />+ struct input_dev *dev;<br /> struct serio *serio;<br /> #define BUFLEN 15 /* At least 5 is needed for a full tablet packet */<br /> unsigned char buf[BUFLEN];<br />&#64;&#64; -211,7 +211,7 &#64;&#64; vsxxxaa_smells_like_packet (struct vsxxx<br /> static void<br /> vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;mouse-&gt;dev;<br />+ struct input_dev *dev = mouse-&gt;dev;<br /> unsigned char *buf = mouse-&gt;buf;<br /> int left, middle, right;<br /> int dx, dy;<br />&#64;&#64; -269,7 +269,7 &#64;&#64; vsxxxaa_handle_REL_packet (struct vsxxxa<br /> static void<br /> vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;mouse-&gt;dev;<br />+ struct input_dev *dev = mouse-&gt;dev;<br /> unsigned char *buf = mouse-&gt;buf;<br /> int left, middle, right, touch;<br /> int x, y;<br />&#64;&#64; -323,7 +323,7 &#64;&#64; vsxxxaa_handle_ABS_packet (struct vsxxxa<br /> static void<br /> vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;mouse-&gt;dev;<br />+ struct input_dev *dev = mouse-&gt;dev;<br /> unsigned char *buf = mouse-&gt;buf;<br /> int left, middle, right;<br /> unsigned char error;<br />&#64;&#64; -483,9 +483,9 &#64;&#64; vsxxxaa_disconnect (struct serio *serio)<br /> {<br /> struct vsxxxaa *mouse = serio_get_drvdata (serio);<br /> <br />- input_unregister_device (&amp;mouse-&gt;dev);<br /> serio_close (serio);<br /> serio_set_drvdata (serio, NULL);<br />+ input_unregister_device (mouse-&gt;dev);<br /> kfree (mouse);<br /> }<br /> <br />&#64;&#64; -493,61 +493,57 &#64;&#64; static int<br /> vsxxxaa_connect (struct serio *serio, struct serio_driver *drv)<br /> {<br /> struct vsxxxaa *mouse;<br />- int err;<br />+ struct input_dev *input_dev;<br />+ int err = -ENOMEM;<br /> <br />- if (!(mouse = kmalloc (sizeof (struct vsxxxaa), GFP_KERNEL)))<br />- return -ENOMEM;<br />-<br />- memset (mouse, 0, sizeof (struct vsxxxaa));<br />-<br />- init_input_dev (&amp;mouse-&gt;dev);<br />- set_bit (EV_KEY, mouse-&gt;dev.evbit); /* We have buttons */<br />- set_bit (EV_REL, mouse-&gt;dev.evbit);<br />- set_bit (EV_ABS, mouse-&gt;dev.evbit);<br />- set_bit (BTN_LEFT, mouse-&gt;dev.keybit); /* We have 3 buttons */<br />- set_bit (BTN_MIDDLE, mouse-&gt;dev.keybit);<br />- set_bit (BTN_RIGHT, mouse-&gt;dev.keybit);<br />- set_bit (BTN_TOUCH, mouse-&gt;dev.keybit); /* ...and Tablet */<br />- set_bit (REL_X, mouse-&gt;dev.relbit);<br />- set_bit (REL_Y, mouse-&gt;dev.relbit);<br />- set_bit (ABS_X, mouse-&gt;dev.absbit);<br />- set_bit (ABS_Y, mouse-&gt;dev.absbit);<br />-<br />- mouse-&gt;dev.absmin[ABS_X] = 0;<br />- mouse-&gt;dev.absmax[ABS_X] = 1023;<br />- mouse-&gt;dev.absmin[ABS_Y] = 0;<br />- mouse-&gt;dev.absmax[ABS_Y] = 1023;<br />-<br />- mouse-&gt;dev.private = mouse;<br />+ mouse = kzalloc (sizeof (struct vsxxxaa), GFP_KERNEL);<br />+ input_dev = input_allocate_device ();<br />+ if (!mouse || !input_dev)<br />+ goto fail;<br /> <br />+ mouse-&gt;dev = input_dev;<br />+ mouse-&gt;serio = serio;<br /> sprintf (mouse-&gt;name, "DEC VSXXX-AA/-GA mouse or VSXXX-AB digitizer");<br /> sprintf (mouse-&gt;phys, "%s/input0", serio-&gt;phys);<br />- mouse-&gt;dev.name = mouse-&gt;name;<br />- mouse-&gt;dev.phys = mouse-&gt;phys;<br />- mouse-&gt;dev.id.bustype = BUS_RS232;<br />- mouse-&gt;dev.dev = &amp;serio-&gt;dev;<br />- mouse-&gt;serio = serio;<br />+<br />+ input_dev-&gt;name = mouse-&gt;name;<br />+ input_dev-&gt;phys = mouse-&gt;phys;<br />+ input_dev-&gt;id.bustype = BUS_RS232;<br />+ input_dev-&gt;cdev.dev = &amp;serio-&gt;dev;<br />+ input_dev-&gt;private = mouse;<br />+<br />+ set_bit (EV_KEY, input_dev-&gt;evbit); /* We have buttons */<br />+ set_bit (EV_REL, input_dev-&gt;evbit);<br />+ set_bit (EV_ABS, input_dev-&gt;evbit);<br />+ set_bit (BTN_LEFT, input_dev-&gt;keybit); /* We have 3 buttons */<br />+ set_bit (BTN_MIDDLE, input_dev-&gt;keybit);<br />+ set_bit (BTN_RIGHT, input_dev-&gt;keybit);<br />+ set_bit (BTN_TOUCH, input_dev-&gt;keybit); /* ...and Tablet */<br />+ set_bit (REL_X, input_dev-&gt;relbit);<br />+ set_bit (REL_Y, input_dev-&gt;relbit);<br />+ input_set_abs_params (input_dev, ABS_X, 0, 1023, 0, 0);<br />+ input_set_abs_params (input_dev, ABS_Y, 0, 1023, 0, 0);<br /> <br /> serio_set_drvdata (serio, mouse);<br /> <br /> err = serio_open (serio, drv);<br />- if (err) {<br />- serio_set_drvdata (serio, NULL);<br />- kfree (mouse);<br />- return err;<br />- }<br />+ if (err)<br />+ goto fail;<br /> <br /> /*<br /> * Request selftest. Standard packet format and differential<br /> * mode will be requested after the device ID'ed successfully.<br /> */<br />- mouse-&gt;serio-&gt;write (mouse-&gt;serio, 'T'); /* Test */<br />-<br />- input_register_device (&amp;mouse-&gt;dev);<br />+ serio-&gt;write (serio, 'T'); /* Test */<br /> <br />- printk (KERN_INFO "input: %s on %s\n", mouse-&gt;name, mouse-&gt;phys);<br />+ input_register_device (input_dev);<br /> <br /> return 0;<br />+<br />+ fail: serio_set_drvdata (serio, NULL);<br />+ input_free_device (input_dev);<br />+ kfree (mouse);<br />+ return err;<br /> }<br /> <br /> static struct serio_device_id vsxxaa_serio_ids[] = {<br />Index: work/drivers/input/mouse/psmouse-base.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/psmouse-base.c<br />+++ work/drivers/input/mouse/psmouse-base.c<br />&#64;&#64; -114,7 +114,7 &#64;&#64; struct psmouse_protocol {<br /> <br /> static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;psmouse-&gt;dev;<br />+ struct input_dev *dev = psmouse-&gt;dev;<br /> unsigned char *packet = psmouse-&gt;packet;<br /> <br /> if (psmouse-&gt;pktcnt &lt; psmouse-&gt;pktsize)<br />&#64;&#64; -333,12 +333,11 &#64;&#64; static int genius_detect(struct psmouse <br /> return -1;<br /> <br /> if (set_properties) {<br />- set_bit(BTN_EXTRA, psmouse-&gt;dev.keybit);<br />- set_bit(BTN_SIDE, psmouse-&gt;dev.keybit);<br />- set_bit(REL_WHEEL, psmouse-&gt;dev.relbit);<br />+ set_bit(BTN_EXTRA, psmouse-&gt;dev-&gt;keybit);<br />+ set_bit(BTN_SIDE, psmouse-&gt;dev-&gt;keybit);<br />+ set_bit(REL_WHEEL, psmouse-&gt;dev-&gt;relbit);<br /> <br /> psmouse-&gt;vendor = "Genius";<br />- psmouse-&gt;name = "Wheel Mouse";<br /> psmouse-&gt;pktsize = 4;<br /> }<br /> <br />&#64;&#64; -365,8 +364,8 &#64;&#64; static int intellimouse_detect(struct ps<br /> return -1;<br /> <br /> if (set_properties) {<br />- set_bit(BTN_MIDDLE, psmouse-&gt;dev.keybit);<br />- set_bit(REL_WHEEL, psmouse-&gt;dev.relbit);<br />+ set_bit(BTN_MIDDLE, psmouse-&gt;dev-&gt;keybit);<br />+ set_bit(REL_WHEEL, psmouse-&gt;dev-&gt;relbit);<br /> <br /> if (!psmouse-&gt;vendor) psmouse-&gt;vendor = "Generic";<br /> if (!psmouse-&gt;name) psmouse-&gt;name = "Wheel Mouse";<br />&#64;&#64; -398,10 +397,10 &#64;&#64; static int im_explorer_detect(struct psm<br /> return -1;<br /> <br /> if (set_properties) {<br />- set_bit(BTN_MIDDLE, psmouse-&gt;dev.keybit);<br />- set_bit(REL_WHEEL, psmouse-&gt;dev.relbit);<br />- set_bit(BTN_SIDE, psmouse-&gt;dev.keybit);<br />- set_bit(BTN_EXTRA, psmouse-&gt;dev.keybit);<br />+ set_bit(BTN_MIDDLE, psmouse-&gt;dev-&gt;keybit);<br />+ set_bit(REL_WHEEL, psmouse-&gt;dev-&gt;relbit);<br />+ set_bit(BTN_SIDE, psmouse-&gt;dev-&gt;keybit);<br />+ set_bit(BTN_EXTRA, psmouse-&gt;dev-&gt;keybit);<br /> <br /> if (!psmouse-&gt;vendor) psmouse-&gt;vendor = "Generic";<br /> if (!psmouse-&gt;name) psmouse-&gt;name = "Explorer Mouse";<br />&#64;&#64; -433,7 +432,7 &#64;&#64; static int thinking_detect(struct psmous<br /> return -1;<br /> <br /> if (set_properties) {<br />- set_bit(BTN_EXTRA, psmouse-&gt;dev.keybit);<br />+ set_bit(BTN_EXTRA, psmouse-&gt;dev-&gt;keybit);<br /> <br /> psmouse-&gt;vendor = "Kensington";<br /> psmouse-&gt;name = "ThinkingMouse";<br />&#64;&#64; -839,9 +838,9 &#64;&#64; static void psmouse_disconnect(struct se<br /> <br /> psmouse_set_state(psmouse, PSMOUSE_IGNORE);<br /> <br />- input_unregister_device(&amp;psmouse-&gt;dev);<br /> serio_close(serio);<br /> serio_set_drvdata(serio, NULL);<br />+ input_unregister_device(psmouse-&gt;dev);<br /> kfree(psmouse);<br /> <br /> if (parent)<br />&#64;&#64; -852,16 +851,14 &#64;&#64; static void psmouse_disconnect(struct se<br /> <br /> static int psmouse_switch_protocol(struct psmouse *psmouse, struct psmouse_protocol *proto)<br /> {<br />- memset(&amp;psmouse-&gt;dev, 0, sizeof(struct input_dev));<br />+ struct input_dev *input_dev = psmouse-&gt;dev;<br /> <br />- init_input_dev(&amp;psmouse-&gt;dev);<br />+ input_dev-&gt;private = psmouse;<br />+ input_dev-&gt;cdev.dev = &amp;psmouse-&gt;ps2dev.serio-&gt;dev;<br /> <br />- psmouse-&gt;dev.private = psmouse;<br />- psmouse-&gt;dev.dev = &amp;psmouse-&gt;ps2dev.serio-&gt;dev;<br />-<br />- psmouse-&gt;dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />- psmouse-&gt;dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />- psmouse-&gt;dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />+ input_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ input_dev-&gt;keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+ input_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br /> <br /> psmouse-&gt;set_rate = psmouse_set_rate;<br /> psmouse-&gt;set_resolution = psmouse_set_resolution;<br />&#64;&#64; -883,12 +880,12 &#64;&#64; static int psmouse_switch_protocol(struc<br /> sprintf(psmouse-&gt;devname, "%s %s %s",<br /> psmouse_protocol_by_type(psmouse-&gt;type)-&gt;name, psmouse-&gt;vendor, psmouse-&gt;name);<br /> <br />- psmouse-&gt;dev.name = psmouse-&gt;devname;<br />- psmouse-&gt;dev.phys = psmouse-&gt;phys;<br />- psmouse-&gt;dev.id.bustype = BUS_I8042;<br />- psmouse-&gt;dev.id.vendor = 0x0002;<br />- psmouse-&gt;dev.id.product = psmouse-&gt;type;<br />- psmouse-&gt;dev.id.version = psmouse-&gt;model;<br />+ input_dev-&gt;name = psmouse-&gt;devname;<br />+ input_dev-&gt;phys = psmouse-&gt;phys;<br />+ input_dev-&gt;id.bustype = BUS_I8042;<br />+ input_dev-&gt;id.vendor = 0x0002;<br />+ input_dev-&gt;id.product = psmouse-&gt;type;<br />+ input_dev-&gt;id.version = psmouse-&gt;model;<br /> <br /> return 0;<br /> }<br />&#64;&#64; -900,7 +897,8 &#64;&#64; static int psmouse_switch_protocol(struc<br /> static int psmouse_connect(struct serio *serio, struct serio_driver *drv)<br /> {<br /> struct psmouse *psmouse, *parent = NULL;<br />- int retval;<br />+ struct input_dev *input_dev;<br />+ int retval = -ENOMEM;<br /> <br /> down(&amp;psmouse_sem);<br /> <br />&#64;&#64; -913,12 +911,13 &#64;&#64; static int psmouse_connect(struct serio <br /> psmouse_deactivate(parent);<br /> }<br /> <br />- if (!(psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL))) {<br />- retval = -ENOMEM;<br />+ psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!psmouse || !input_dev)<br /> goto out;<br />- }<br /> <br /> ps2_init(&amp;psmouse-&gt;ps2dev, serio);<br />+ psmouse-&gt;dev = input_dev;<br /> sprintf(psmouse-&gt;phys, "%s/input0", serio-&gt;phys);<br /> <br /> psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);<br />&#64;&#64; -926,16 +925,11 &#64;&#64; static int psmouse_connect(struct serio <br /> serio_set_drvdata(serio, psmouse);<br /> <br /> retval = serio_open(serio, drv);<br />- if (retval) {<br />- serio_set_drvdata(serio, NULL);<br />- kfree(psmouse);<br />+ if (retval)<br /> goto out;<br />- }<br /> <br /> if (psmouse_probe(psmouse) &lt; 0) {<br /> serio_close(serio);<br />- serio_set_drvdata(serio, NULL);<br />- kfree(psmouse);<br /> retval = -ENODEV;<br /> goto out;<br /> }<br />&#64;&#64; -947,13 +941,11 &#64;&#64; static int psmouse_connect(struct serio <br /> <br /> psmouse_switch_protocol(psmouse, NULL);<br /> <br />- input_register_device(&amp;psmouse-&gt;dev);<br />- printk(KERN_INFO "input: %s on %s\n", psmouse-&gt;devname, serio-&gt;phys);<br />-<br /> psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);<br />-<br /> psmouse_initialize(psmouse);<br /> <br />+ input_register_device(psmouse-&gt;dev);<br />+<br /> if (parent &amp;&amp; parent-&gt;pt_activate)<br /> parent-&gt;pt_activate(parent);<br /> <br />&#64;&#64; -964,6 +956,12 &#64;&#64; static int psmouse_connect(struct serio <br /> retval = 0;<br /> <br /> out:<br />+ if (retval) {<br />+ serio_set_drvdata(serio, NULL);<br />+ input_free_device(input_dev);<br />+ kfree(psmouse);<br />+ }<br />+<br /> /* If this is a pass-through port the parent needs to be re-activated */<br /> if (parent)<br /> psmouse_activate(parent);<br />&#64;&#64; -1161,6 +1159,7 &#64;&#64; static ssize_t psmouse_attr_set_protocol<br /> {<br /> struct serio *serio = psmouse-&gt;ps2dev.serio;<br /> struct psmouse *parent = NULL;<br />+ struct input_dev *new_dev;<br /> struct psmouse_protocol *proto;<br /> int retry = 0;<br /> <br />&#64;&#64; -1170,9 +1169,13 &#64;&#64; static ssize_t psmouse_attr_set_protocol<br /> if (psmouse-&gt;type == proto-&gt;type)<br /> return count;<br /> <br />+ if (!(new_dev = input_allocate_device()))<br />+ return -ENOMEM;<br />+<br /> while (serio-&gt;child) {<br /> if (++retry &gt; 3) {<br /> printk(KERN_WARNING "psmouse: failed to destroy child port, protocol change aborted.\n");<br />+ input_free_device(new_dev);<br /> return -EIO;<br /> }<br /> <br />&#64;&#64; -1182,11 +1185,15 &#64;&#64; static ssize_t psmouse_attr_set_protocol<br /> serio_pin_driver_uninterruptible(serio);<br /> down(&amp;psmouse_sem);<br /> <br />- if (serio-&gt;drv != &amp;psmouse_drv)<br />+ if (serio-&gt;drv != &amp;psmouse_drv) {<br />+ input_free_device(new_dev);<br /> return -ENODEV;<br />+ }<br /> <br />- if (psmouse-&gt;type == proto-&gt;type)<br />+ if (psmouse-&gt;type == proto-&gt;type) {<br />+ input_free_device(new_dev);<br /> return count; /* switched by other thread */<br />+ }<br /> }<br /> <br /> if (serio-&gt;parent &amp;&amp; serio-&gt;id.type == SERIO_PS_PSTHRU) {<br />&#64;&#64; -1199,8 +1206,9 &#64;&#64; static ssize_t psmouse_attr_set_protocol<br /> psmouse-&gt;disconnect(psmouse);<br /> <br /> psmouse_set_state(psmouse, PSMOUSE_IGNORE);<br />- input_unregister_device(&amp;psmouse-&gt;dev);<br />+ input_unregister_device(psmouse-&gt;dev);<br /> <br />+ psmouse-&gt;dev = new_dev;<br /> psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);<br /> <br /> if (psmouse_switch_protocol(psmouse, proto) &lt; 0) {<br />&#64;&#64; -1212,8 +1220,7 &#64;&#64; static ssize_t psmouse_attr_set_protocol<br /> psmouse_initialize(psmouse);<br /> psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);<br /> <br />- input_register_device(&amp;psmouse-&gt;dev);<br />- printk(KERN_INFO "input: %s on %s\n", psmouse-&gt;devname, serio-&gt;phys);<br />+ input_register_device(psmouse-&gt;dev);<br /> <br /> if (parent &amp;&amp; parent-&gt;pt_activate)<br /> parent-&gt;pt_activate(parent);<br />Index: work/drivers/input/mouse/psmouse.h<br />===================================================================<br />--- work.orig/drivers/input/mouse/psmouse.h<br />+++ work/drivers/input/mouse/psmouse.h<br />&#64;&#64; -36,7 +36,7 &#64;&#64; typedef enum {<br /> <br /> struct psmouse {<br /> void *private;<br />- struct input_dev dev;<br />+ struct input_dev *dev;<br /> struct ps2dev ps2dev;<br /> char *vendor;<br /> char *name;<br />Index: work/drivers/input/mouse/synaptics.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/synaptics.c<br />+++ work/drivers/input/mouse/synaptics.c<br />&#64;&#64; -342,7 +342,7 &#64;&#64; static void synaptics_parse_hw_state(uns<br /> */<br /> static void synaptics_process_packet(struct psmouse *psmouse)<br /> {<br />- struct input_dev *dev = &amp;psmouse-&gt;dev;<br />+ struct input_dev *dev = psmouse-&gt;dev;<br /> struct synaptics_data *priv = psmouse-&gt;private;<br /> struct synaptics_hw_state hw;<br /> int num_fingers;<br />&#64;&#64; -473,7 +473,7 &#64;&#64; static unsigned char synaptics_detect_pk<br /> <br /> static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;psmouse-&gt;dev;<br />+ struct input_dev *dev = psmouse-&gt;dev;<br /> struct synaptics_data *priv = psmouse-&gt;private;<br /> <br /> input_regs(dev, regs);<br />&#64;&#64; -645,7 +645,7 &#64;&#64; int synaptics_init(struct psmouse *psmou<br /> SYN_ID_MAJOR(priv-&gt;identity), SYN_ID_MINOR(priv-&gt;identity),<br /> priv-&gt;model_id, priv-&gt;capabilities, priv-&gt;ext_cap);<br /> <br />- set_input_params(&amp;psmouse-&gt;dev, priv);<br />+ set_input_params(psmouse-&gt;dev, priv);<br /> <br /> psmouse-&gt;protocol_handler = synaptics_process_byte;<br /> psmouse-&gt;set_rate = synaptics_set_rate;<br />Index: work/drivers/input/mouse/alps.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/alps.c<br />+++ work/drivers/input/mouse/alps.c<br />&#64;&#64; -79,8 +79,8 &#64;&#64; static void alps_process_packet(struct p<br /> {<br /> struct alps_data *priv = psmouse-&gt;private;<br /> unsigned char *packet = psmouse-&gt;packet;<br />- struct input_dev *dev = &amp;psmouse-&gt;dev;<br />- struct input_dev *dev2 = &amp;priv-&gt;dev2;<br />+ struct input_dev *dev = psmouse-&gt;dev;<br />+ struct input_dev *dev2 = priv-&gt;dev2;<br /> int x, y, z, ges, fin, left, right, middle;<br /> int back = 0, forward = 0;<br /> <br />&#64;&#64; -379,20 +379,24 &#64;&#64; static int alps_reconnect(struct psmouse<br /> static void alps_disconnect(struct psmouse *psmouse)<br /> {<br /> struct alps_data *priv = psmouse-&gt;private;<br />+<br /> psmouse_reset(psmouse);<br />- input_unregister_device(&amp;priv-&gt;dev2);<br />+ input_unregister_device(priv-&gt;dev2);<br /> kfree(priv);<br /> }<br /> <br /> int alps_init(struct psmouse *psmouse)<br /> {<br /> struct alps_data *priv;<br />+ struct input_dev *dev1 = psmouse-&gt;dev, *dev2;<br /> int version;<br /> <br />- psmouse-&gt;private = priv = kmalloc(sizeof(struct alps_data), GFP_KERNEL);<br />- if (!priv)<br />+ psmouse-&gt;private = priv = kzalloc(sizeof(struct alps_data), GFP_KERNEL);<br />+ dev2 = input_allocate_device();<br />+ if (!priv || !dev2)<br /> goto init_fail;<br />- memset(priv, 0, sizeof(struct alps_data));<br />+<br />+ priv-&gt;dev2 = dev2;<br /> <br /> if (!(priv-&gt;i = alps_get_model(psmouse, &amp;version)))<br /> goto init_fail;<br />&#64;&#64; -411,41 +415,39 &#64;&#64; int alps_init(struct psmouse *psmouse)<br /> if ((priv-&gt;i-&gt;flags &amp; ALPS_PASS) &amp;&amp; alps_passthrough_mode(psmouse, 0))<br /> goto init_fail;<br /> <br />- psmouse-&gt;dev.evbit[LONG(EV_KEY)] |= BIT(EV_KEY);<br />- psmouse-&gt;dev.keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH);<br />- psmouse-&gt;dev.keybit[LONG(BTN_TOOL_FINGER)] |= BIT(BTN_TOOL_FINGER);<br />- psmouse-&gt;dev.keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />-<br />- psmouse-&gt;dev.evbit[LONG(EV_ABS)] |= BIT(EV_ABS);<br />- input_set_abs_params(&amp;psmouse-&gt;dev, ABS_X, 0, 1023, 0, 0);<br />- input_set_abs_params(&amp;psmouse-&gt;dev, ABS_Y, 0, 767, 0, 0);<br />- input_set_abs_params(&amp;psmouse-&gt;dev, ABS_PRESSURE, 0, 127, 0, 0);<br />+ dev1-&gt;evbit[LONG(EV_KEY)] |= BIT(EV_KEY);<br />+ dev1-&gt;keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH);<br />+ dev1-&gt;keybit[LONG(BTN_TOOL_FINGER)] |= BIT(BTN_TOOL_FINGER);<br />+ dev1-&gt;keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+<br />+ dev1-&gt;evbit[LONG(EV_ABS)] |= BIT(EV_ABS);<br />+ input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0);<br />+ input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0);<br />+ input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0);<br /> <br /> if (priv-&gt;i-&gt;flags &amp; ALPS_WHEEL) {<br />- psmouse-&gt;dev.evbit[LONG(EV_REL)] |= BIT(EV_REL);<br />- psmouse-&gt;dev.relbit[LONG(REL_WHEEL)] |= BIT(REL_WHEEL);<br />+ dev1-&gt;evbit[LONG(EV_REL)] |= BIT(EV_REL);<br />+ dev1-&gt;relbit[LONG(REL_WHEEL)] |= BIT(REL_WHEEL);<br /> }<br /> <br /> if (priv-&gt;i-&gt;flags &amp; (ALPS_FW_BK_1 | ALPS_FW_BK_2)) {<br />- psmouse-&gt;dev.keybit[LONG(BTN_FORWARD)] |= BIT(BTN_FORWARD);<br />- psmouse-&gt;dev.keybit[LONG(BTN_BACK)] |= BIT(BTN_BACK);<br />+ dev1-&gt;keybit[LONG(BTN_FORWARD)] |= BIT(BTN_FORWARD);<br />+ dev1-&gt;keybit[LONG(BTN_BACK)] |= BIT(BTN_BACK);<br /> }<br /> <br /> sprintf(priv-&gt;phys, "%s/input1", psmouse-&gt;ps2dev.serio-&gt;phys);<br />- priv-&gt;dev2.phys = priv-&gt;phys;<br />- priv-&gt;dev2.name = (priv-&gt;i-&gt;flags &amp; ALPS_DUALPOINT) ? "DualPoint Stick" : "PS/2 Mouse";<br />- priv-&gt;dev2.id.bustype = BUS_I8042;<br />- priv-&gt;dev2.id.vendor = 0x0002;<br />- priv-&gt;dev2.id.product = PSMOUSE_ALPS;<br />- priv-&gt;dev2.id.version = 0x0000;<br />-<br />- priv-&gt;dev2.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />- priv-&gt;dev2.relbit[LONG(REL_X)] |= BIT(REL_X) | BIT(REL_Y);<br />- priv-&gt;dev2.keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />-<br />- input_register_device(&amp;priv-&gt;dev2);<br />+ dev2-&gt;phys = priv-&gt;phys;<br />+ dev2-&gt;name = (priv-&gt;i-&gt;flags &amp; ALPS_DUALPOINT) ? "DualPoint Stick" : "PS/2 Mouse";<br />+ dev2-&gt;id.bustype = BUS_I8042;<br />+ dev2-&gt;id.vendor = 0x0002;<br />+ dev2-&gt;id.product = PSMOUSE_ALPS;<br />+ dev2-&gt;id.version = 0x0000;<br />+<br />+ dev2-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REL);<br />+ dev2-&gt;relbit[LONG(REL_X)] |= BIT(REL_X) | BIT(REL_Y);<br />+ dev2-&gt;keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br /> <br />- printk(KERN_INFO "input: %s on %s\n", priv-&gt;dev2.name, psmouse-&gt;ps2dev.serio-&gt;phys);<br />+ input_register_device(priv-&gt;dev2);<br /> <br /> psmouse-&gt;protocol_handler = alps_process_byte;<br /> psmouse-&gt;disconnect = alps_disconnect;<br />&#64;&#64; -455,6 +457,7 &#64;&#64; int alps_init(struct psmouse *psmouse)<br /> return 0;<br /> <br /> init_fail:<br />+ input_free_device(dev2);<br /> kfree(priv);<br /> return -1;<br /> }<br />Index: work/drivers/input/mouse/logips2pp.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/logips2pp.c<br />+++ work/drivers/input/mouse/logips2pp.c<br />&#64;&#64; -40,7 +40,7 &#64;&#64; struct ps2pp_info {<br /> <br /> static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse, struct pt_regs *regs)<br /> {<br />- struct input_dev *dev = &amp;psmouse-&gt;dev;<br />+ struct input_dev *dev = psmouse-&gt;dev;<br /> unsigned char *packet = psmouse-&gt;packet;<br /> <br /> if (psmouse-&gt;pktcnt &lt; 3)<br />&#64;&#64; -257,25 +257,27 &#64;&#64; static struct ps2pp_info *get_model_info<br /> static void ps2pp_set_model_properties(struct psmouse *psmouse, struct ps2pp_info *model_info,<br /> int using_ps2pp)<br /> {<br />+ struct input_dev *input_dev = psmouse-&gt;dev;<br />+<br /> if (model_info-&gt;features &amp; PS2PP_SIDE_BTN)<br />- set_bit(BTN_SIDE, psmouse-&gt;dev.keybit);<br />+ set_bit(BTN_SIDE, input_dev-&gt;keybit);<br /> <br /> if (model_info-&gt;features &amp; PS2PP_EXTRA_BTN)<br />- set_bit(BTN_EXTRA, psmouse-&gt;dev.keybit);<br />+ set_bit(BTN_EXTRA, input_dev-&gt;keybit);<br /> <br /> if (model_info-&gt;features &amp; PS2PP_TASK_BTN)<br />- set_bit(BTN_TASK, psmouse-&gt;dev.keybit);<br />+ set_bit(BTN_TASK, input_dev-&gt;keybit);<br /> <br /> if (model_info-&gt;features &amp; PS2PP_NAV_BTN) {<br />- set_bit(BTN_FORWARD, psmouse-&gt;dev.keybit);<br />- set_bit(BTN_BACK, psmouse-&gt;dev.keybit);<br />+ set_bit(BTN_FORWARD, input_dev-&gt;keybit);<br />+ set_bit(BTN_BACK, input_dev-&gt;keybit);<br /> }<br /> <br /> if (model_info-&gt;features &amp; PS2PP_WHEEL)<br />- set_bit(REL_WHEEL, psmouse-&gt;dev.relbit);<br />+ set_bit(REL_WHEEL, input_dev-&gt;relbit);<br /> <br /> if (model_info-&gt;features &amp; PS2PP_HWHEEL)<br />- set_bit(REL_HWHEEL, psmouse-&gt;dev.relbit);<br />+ set_bit(REL_HWHEEL, input_dev-&gt;relbit);<br /> <br /> switch (model_info-&gt;kind) {<br /> case PS2PP_KIND_WHEEL:<br />&#64;&#64; -387,7 +389,7 &#64;&#64; int ps2pp_init(struct psmouse *psmouse, <br /> }<br /> <br /> if (buttons &lt; 3)<br />- clear_bit(BTN_MIDDLE, psmouse-&gt;dev.keybit);<br />+ clear_bit(BTN_MIDDLE, psmouse-&gt;dev-&gt;keybit);<br /> <br /> if (model_info)<br /> ps2pp_set_model_properties(psmouse, model_info, use_ps2pp);<br />Index: work/drivers/input/mouse/alps.h<br />===================================================================<br />--- work.orig/drivers/input/mouse/alps.h<br />+++ work/drivers/input/mouse/alps.h<br />&#64;&#64; -22,7 +22,7 &#64;&#64; struct alps_model_info {<br /> };<br /> <br /> struct alps_data {<br />- struct input_dev dev2; /* Relative device */<br />+ struct input_dev *dev2; /* Relative device */<br /> char name[32]; /* Name */<br /> char phys[32]; /* Phys */<br /> struct alps_model_info *i; /* Info */<br />Index: work/drivers/input/mouse/lifebook.c<br />===================================================================<br />--- work.orig/drivers/input/mouse/lifebook.c<br />+++ work/drivers/input/mouse/lifebook.c<br />&#64;&#64; -34,7 +34,7 &#64;&#64; static struct dmi_system_id lifebook_dmi<br /> static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_regs *regs)<br /> {<br /> unsigned char *packet = psmouse-&gt;packet;<br />- struct input_dev *dev = &amp;psmouse-&gt;dev;<br />+ struct input_dev *dev = psmouse-&gt;dev;<br /> <br /> if (psmouse-&gt;pktcnt != 3)<br /> return PSMOUSE_GOOD_DATA;<br />&#64;&#64; -113,15 +113,17 &#64;&#64; int lifebook_detect(struct psmouse *psmo<br /> <br /> int lifebook_init(struct psmouse *psmouse)<br /> {<br />+ struct input_dev *input_dev = psmouse-&gt;dev;<br />+<br /> if (lifebook_absolute_mode(psmouse))<br /> return -1;<br /> <br />- psmouse-&gt;dev.evbit[0] = BIT(EV_ABS) | BIT(EV_KEY) | BIT(EV_REL);<br />- psmouse-&gt;dev.keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />- psmouse-&gt;dev.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);<br />- psmouse-&gt;dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />- input_set_abs_params(&amp;psmouse-&gt;dev, ABS_X, 0, 1024, 0, 0);<br />- input_set_abs_params(&amp;psmouse-&gt;dev, ABS_Y, 0, 1024, 0, 0);<br />+ input_dev-&gt;evbit[0] = BIT(EV_ABS) | BIT(EV_KEY) | BIT(EV_REL);<br />+ input_dev-&gt;keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);<br />+ input_dev-&gt;keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);<br />+ input_dev-&gt;relbit[0] = BIT(REL_X) | BIT(REL_Y);<br />+ input_set_abs_params(input_dev, ABS_X, 0, 1024, 0, 0);<br />+ input_set_abs_params(input_dev, ABS_Y, 0, 1024, 0, 0);<br /> <br /> psmouse-&gt;protocol_handler = lifebook_process_byte;<br /> psmouse-&gt;set_resolution = lifebook_set_resolution;<br />-<br />To unsubscribe from this list: send the line "unsubscribe linux-kernel" in<br />the body of a message to majordomo&#64;vger.kernel.org<br />More majordomo info at <a href="http://vger.kernel.org/majordomo-info.html">http://vger.kernel.org/majordomo-info.html</a><br />Please read the FAQ at <a href="http://www.tux.org/lkml/">http://www.tux.org/lkml/</a><br /><br /></pre></td><td width="32" rowspan="2" class="c" valign="top"><img src="/images/icornerr.gif" width="32" height="32" alt="\" /></td></tr><tr><td align="right" valign="bottom"> 聽 </td></tr><tr><td align="right" valign="bottom">聽</td><td class="c" valign="bottom" style="padding-bottom: 0px"><img src="/images/bcornerl.gif" width="32" height="32" alt="\" /></td><td class="c">聽</td><td class="c" valign="bottom" style="padding-bottom: 0px"><img src="/images/bcornerr.gif" width="32" height="32" alt="/" /></td></tr><tr><td align="right" valign="top" colspan="2"> 聽 </td><td class="lm">Last update: 2005-09-15 10:09 聽聽 [from the cache]<br />漏2003-2020 <a href="http://blog.jasper.es/"><span itemprop="editor">Jasper Spaans</span></a>|hosted at <a href="https://www.digitalocean.com/?refcode=9a8e99d24cf9">Digital Ocean</a> and my Meterkast|<a href="http://blog.jasper.es/categories.html#lkml-ref">Read the blog</a></td><td>聽</td></tr></table><script language="javascript" src="/js/styleswitcher.js" type="text/javascript"></script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10