Convert touchscreen to input_allocate_device
PATCH 1/1 Convert touchscreen to input_allocate_device
ARM: OMAP: Convert touchscreen to input_allocate_device() to remove:
input: device omap_ts is statically allocated, will not register Please convert to input_allocate_device() or contact [email protected]
ARM: OMAP: Check in omap_ts_handler() if timer is still running. Delete it if necessary. Else we will get Oops "kernel BUG at include/linux/timer.h:83!"
Signed-off-by Dirk Behme <dirk.behme_at_de.bosch.com>
drivers/input/touchscreen/omap/omap_ts.c renamed from drivers/input/touchscreen/omap/omap_ts.c_orig +22 -19
@@ -65,10 +65,10 @@ static int omap_ts_read(void) ts_omap.dev->read (data); -input_report_abs (&(ts_omap.inputdevice),ABS_X , data[0 ]); -input_report_abs (&(ts_omap.inputdevice),ABS_Y , data[1 ]); -input_report_abs (&(ts_omap.inputdevice),ABS_PRESSURE , data[2 ]); -input_sync (&(ts_omap.inputdevice)); +input_report_abs (ts_omap.inputdevice,ABS_X , data[0 ]); +input_report_abs (ts_omap.inputdevice,ABS_Y , data[1 ]); +input_report_abs (ts_omap.inputdevice,ABS_PRESSURE , data[2 ]); +input_sync (ts_omap.inputdevice);DEBUG_TS ("omap_ts_read: read x=%d,y=%d,p=%d\n" , data[0 ], data[1 ], data[2 ]);
@@ -85,7 +85,7 @@ static void omap_ts_timer(unsigned longif (!ts_omap.dev->penup ()) {if (!ts_omap.touched) {DEBUG_TS ("omap_ts_timer: pen down\n" ); -input_report_key (&(ts_omap.inputdevice),BTN_TOUCH ,1 ); +input_report_key (ts_omap.inputdevice,BTN_TOUCH ,1 ); } ts_omap.touched =1 ;omap_ts_read ();
@@ -95,12 +95,12 @@ static void omap_ts_timer(unsigned longif (ts_omap.touched) {DEBUG_TS ("omap_ts_timer: pen up\n" ); ts_omap.touched =0 ; -input_report_abs (&(ts_omap.inputdevice),ABS_X ,0 ); -input_report_abs (&(ts_omap.inputdevice),ABS_Y ,0 ); -input_report_abs (&(ts_omap.inputdevice),ABS_PRESSURE , +input_report_abs (ts_omap.inputdevice,ABS_X ,0 ); +input_report_abs (ts_omap.inputdevice,ABS_Y ,0 ); +input_report_abs (ts_omap.inputdevice,ABS_PRESSURE ,0 ); -input_sync (&(ts_omap.inputdevice)); -input_report_key (&(ts_omap.inputdevice),BTN_TOUCH ,0 ); +input_sync (ts_omap.inputdevice); +input_report_key (ts_omap.inputdevice,BTN_TOUCH ,0 ); }if (!ts_omap.irq_enabled) { ts_omap.irq_enabled =1 ;
@@ -119,7 +119,10 @@ static irqreturn_t omap_ts_handler(int i ts_omap.irq_enabled =0 ;disable_irq (irq); } -// restart acquire +// check for still pending timer, delete it if neccessary +if (timer_pending (&(ts_omap.ts_timer))) +del_timer (&(ts_omap.ts_timer)); +// restart acquire ts_omap.ts_timer.expires = jiffies +HZ /100 ;add_timer (&(ts_omap.ts_timer));
@@ -168,14 +171,14 @@ static int __init omap_ts_probe(struct preturn -EINVAL ; } -init_input_dev (&(ts_omap.inputdevice)); - ts_omap.inputdevice.name =OMAP_TS_NAME ; - ts_omap.inputdevice.dev = &pdev->dev; - ts_omap.inputdevice.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); - ts_omap.inputdevice.keybit[LONG (BTN_TOUCH )] |=BIT (BTN_TOUCH ); - ts_omap.inputdevice.absbit[0 ] = + 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 ); + ts_omap.inputdevice->keybit[LONG (BTN_TOUCH )] |=BIT (BTN_TOUCH ); + ts_omap.inputdevice->absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y ) |BIT (ABS_PRESSURE ); -input_register_device (&(ts_omap.inputdevice)); +input_register_device (ts_omap.inputdevice); ts_omap.dev->enable ();
@@ -187,7 +190,7 @@ static int __init omap_ts_probe(struct pstatic int omap_ts_remove (struct platform_device *pdev) { ts_omap.dev->disable (); -input_unregister_device (&ts_omap.inputdevice); +input_unregister_device (ts_omap.inputdevice);if (ts_omap.irq !=-1 )free_irq (ts_omap.irq, &ts_omap);
drivers/input/touchscreen/omap/omap_ts.h renamed from drivers/input/touchscreen/omap/omap_ts.h_orig +1 -1
@@ -42,7 +42,7 @@ struct ts_device { };struct omap_ts_t { -struct input_dev inputdevice; +struct input_dev * inputdevice;struct timer_list ts_timer;// Timer for triggering acquisitions int touched;int irq;