#define OMAP_TS_NAME "omap_ts"
static struct ts_device *__initdata ts_devs[] = {
-#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3)
+#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3) || defined(CONFIG_MACH_OMAP_H6300)
&hx_ts,
#endif
#ifdef CONFIG_MACH_OMAP_OSK
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);
/* request irq */
if (ts_omap.irq != -1) {
- if (request_irq(ts_omap.irq, omap_ts_handler, 0,
+ if (request_irq(ts_omap.irq, omap_ts_handler,
+ SA_SAMPLE_RANDOM | ts_omap.irq_type,
OMAP_TS_NAME, &ts_omap)) {
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);
.remove = omap_ts_remove,
.suspend = omap_ts_suspend,
.resume = omap_ts_resume,
- .driver {
+ .driver = {
.name = OMAP_TS_NAME,
},
};