git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
input
/
mouse
/
pc110pad.c
diff --git
a/drivers/input/mouse/pc110pad.c
b/drivers/input/mouse/pc110pad.c
index
d284ea7
..
f155c1f
100644
(file)
--- a/
drivers/input/mouse/pc110pad.c
+++ b/
drivers/input/mouse/pc110pad.c
@@
-57,7
+57,7
@@
static struct input_dev *pc110pad_dev;
static int pc110pad_data[3];
static int pc110pad_count;
static int pc110pad_data[3];
static int pc110pad_count;
-static irqreturn_t pc110pad_interrupt(int irq, void *ptr
, struct pt_regs *regs
)
+static irqreturn_t pc110pad_interrupt(int irq, void *ptr)
{
int value = inb_p(pc110pad_io);
int handshake = inb_p(pc110pad_io + 2);
{
int value = inb_p(pc110pad_io);
int handshake = inb_p(pc110pad_io + 2);
@@
-71,7
+71,6
@@
static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs)
if (pc110pad_count < 3)
return IRQ_HANDLED;
if (pc110pad_count < 3)
return IRQ_HANDLED;
- input_regs(pc110pad_dev, regs);
input_report_key(pc110pad_dev, BTN_TOUCH,
pc110pad_data[0] & 0x01);
input_report_abs(pc110pad_dev, ABS_X,
input_report_key(pc110pad_dev, BTN_TOUCH,
pc110pad_data[0] & 0x01);
input_report_abs(pc110pad_dev, ABS_X,
@@
-91,9
+90,9
@@
static void pc110pad_close(struct input_dev *dev)
static int pc110pad_open(struct input_dev *dev)
{
static int pc110pad_open(struct input_dev *dev)
{
- pc110pad_interrupt(0, NULL
, NULL
);
- pc110pad_interrupt(0, NULL
, NULL
);
- pc110pad_interrupt(0, NULL
, NULL
);
+ pc110pad_interrupt(0, NULL);
+ pc110pad_interrupt(0, NULL);
+ pc110pad_interrupt(0, NULL);
outb(PC110PAD_ON, pc110pad_io + 2);
pc110pad_count = 0;
outb(PC110PAD_ON, pc110pad_io + 2);
pc110pad_count = 0;
@@
-109,6
+108,7
@@
static int pc110pad_open(struct input_dev *dev)
static int __init pc110pad_init(void)
{
struct pci_dev *dev;
static int __init pc110pad_init(void)
{
struct pci_dev *dev;
+ int err;
dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL);
if (dev) {
dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL);
if (dev) {
@@
-125,16
+125,16
@@
static int __init pc110pad_init(void)
outb(PC110PAD_OFF, pc110pad_io + 2);
if (request_irq(pc110pad_irq, pc110pad_interrupt, 0, "pc110pad", NULL)) {
outb(PC110PAD_OFF, pc110pad_io + 2);
if (request_irq(pc110pad_irq, pc110pad_interrupt, 0, "pc110pad", NULL)) {
- release_region(pc110pad_io, 4);
printk(KERN_ERR "pc110pad: Unable to get irq %d.\n", pc110pad_irq);
printk(KERN_ERR "pc110pad: Unable to get irq %d.\n", pc110pad_irq);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_release_region;
}
}
- if (!(pc110pad_dev = input_allocate_device())) {
- free_irq(pc110pad_irq, NULL);
- release_region(pc110pad_io, 4);
+ pc110pad_dev = input_allocate_device();
+ if (!pc110pad_dev) {
printk(KERN_ERR "pc110pad: Not enough memory.\n");
printk(KERN_ERR "pc110pad: Not enough memory.\n");
- return -ENOMEM;
+ err = -ENOMEM;
+ goto err_free_irq;
}
pc110pad_dev->name = "IBM PC110 TouchPad";
}
pc110pad_dev->name = "IBM PC110 TouchPad";
@@
-154,9
+154,20
@@
static int __init pc110pad_init(void)
pc110pad_dev->open = pc110pad_open;
pc110pad_dev->close = pc110pad_close;
pc110pad_dev->open = pc110pad_open;
pc110pad_dev->close = pc110pad_close;
- input_register_device(pc110pad_dev);
+ err = input_register_device(pc110pad_dev);
+ if (err)
+ goto err_free_dev;
return 0;
return 0;
+
+ err_free_dev:
+ input_free_device(pc110pad_dev);
+ err_free_irq:
+ free_irq(pc110pad_irq, NULL);
+ err_release_region:
+ release_region(pc110pad_io, 4);
+
+ return err;
}
static void __exit pc110pad_exit(void)
}
static void __exit pc110pad_exit(void)