int status = -ENODEV;
memset(&ts_omap, 0, sizeof(ts_omap));
+
+ ts_omap.inputdevice = input_allocate_device();
+ if (!ts_omap.inputdevice) {
+ return -ENOMEM;
+ }
+
spin_lock_init(&ts_omap.lock);
for (i = 0; i < ARRAY_SIZE(ts_devs); i++) {
}
}
- if (status != 0)
+ if (status != 0) {
+ input_free_device(ts_omap.inputdevice);
return status;
+ }
// Init acquisition timer function
init_timer(&ts_omap.ts_timer);
printk(KERN_ERR
"omap_ts.c: Could not allocate touchscreen IRQ!\n");
ts_omap.irq = -1;
+ ts_omap.dev->remove();
+ input_free_device(ts_omap.inputdevice);
return -EINVAL;
}
ts_omap.irq_enabled = 1;
} else {
printk(KERN_ERR "omap_ts.c: No touchscreen IRQ assigned!\n");
+ ts_omap.dev->remove();
+ input_free_device(ts_omap.inputdevice);
return -EINVAL;
}
- ts_omap.inputdevice = input_allocate_device();
ts_omap.inputdevice->name = OMAP_TS_NAME;
ts_omap.inputdevice->dev = &pdev->dev;
ts_omap.inputdevice->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);