]> rtime.felk.cvut.cz Git - mx1ts.git/commitdiff
po oprave odporu mezi PX1 a napajenim, funguji preruseni, netreba ignorovat urcite...
authorRadek Pupák <pupakr1@fel.cvut.cz>
Mon, 14 Jul 2008 19:54:05 +0000 (21:54 +0200)
committerRadek Pupák <pupakr1@fel.cvut.cz>
Mon, 14 Jul 2008 19:54:05 +0000 (21:54 +0200)
mx1_ts-driver.c

index 59d809a4209ea33f9f5c815aacce84b2aa212670..e4fbe3cb49efa2b0c87061c83ae8d27f4475a58c 100644 (file)
@@ -183,7 +183,6 @@ struct mx1ts {
 
 }; 
 
-static int MX1TS_presed = 0;
 static int MX1TS_lastx = 0;
 static int MX1TS_lasty = 0;
 
@@ -301,7 +300,6 @@ static void mx1ts_disable_pen_touch_interrupt(struct mx1ts *mts)
        /* Enable pen touch interrupt. */
        value = mx1ts_reg_read(mts, ASP_ICNTLR);
        value &= ~ASP_PIRQE;
-       value = 0; /* TODO tohle se musi smazat*/
        mx1ts_reg_write(mts, ASP_ICNTLR, value);
        printk(KERN_DEBUG "mx1_touchscreen: pen_touch: deaktivating pen_down interrupt \n");
 }
@@ -404,35 +402,20 @@ static void mx1ts_evt_add_touch(struct input_dev *idev, u8 p , u16 x, u16 y)
        input_report_abs(idev, ABS_Y, y);
        /*input_report_abs(idev, ABS_PRESSURE, p);*/
        input_report_abs(idev, ABS_PRESSURE, 1);
+       MX1TS_lastx = x;
+       MX1TS_lasty = y;
        input_sync(idev);
 }
 
-static void mx1ts_evt_add_up(struct input_dev *idev, u16 x, u16 y)
+static void mx1ts_evt_add_up(struct input_dev *idev)
 {
-       input_report_abs(idev, ABS_X, x);
-       input_report_abs(idev, ABS_Y, y);
+       input_report_abs(idev, ABS_X, MX1TS_lastx);
+       input_report_abs(idev, ABS_Y, MX1TS_lasty);
        input_report_abs(idev, ABS_PRESSURE, 0);
        /*input_report_key(idev, BTN_TOUCH, 0);*/
        input_sync(idev);
 }
 
-static void mx1ts_evt_add(struct input_dev *idev, u8 p , u16 x, u16 y)
-{
-       if((x < 7900 || x > 8900) && (y < 7751 || y > 10900)) {
-               MX1TS_presed = 1;
-               MX1TS_lastx = x;
-               MX1TS_lasty = y;
-               mx1ts_evt_add_touch(idev,p, x, y); /* TODO opravit pen_up pen_down zrejme chyba HW  ??? TODO */
-               
-               
-       } else {
-               if(MX1TS_presed == 1) {
-                       MX1TS_presed = 0;       
-                       mx1ts_evt_add_up(idev, MX1TS_lastx, MX1TS_lasty);
-               }
-       }
-}
-
 /*
  * Handle the pen data ready interrupt, generated when pen data is
  * in the FIFO.
@@ -452,15 +435,15 @@ static irqreturn_t mx1ts_pendata_irq(int irq, void *dev_id)
        /*printk(KERN_DEBUG "mx1_touchscreen mx1ts_pendata_irq \n");*/
 /*     printk(KERN_DEBUG "mx1_touchscreen: mx1_pendata_irq interrupt recived from struct %p\n", mts);*/
                
-       if (mx1ts_reg_read(mts, ASP_ISTATR) & ASP_PUIS) {               /*pen up interupt pending*/
-               mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PUIS);          /*clearing pen up interupt*/
+       if (mx1ts_reg_read(mts, ASP_ISTATR) & ASP_PUIS) {       /*pen up interupt pending*/
+               mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PUIS);  /*clearing pen up interupt*/
 
                mx1ts_disable_auto_sample(mts);                         
                mx1ts_disable_pen_up_interrupt(mts);
                mx1ts_enable_pen_touch_interrupt(mts);
 
                if(mts->is_open)                                        /*report last known touch*/
-                       mx1ts_evt_add_up(mts->ts_idev, 100, 100);
+                       mx1ts_evt_add_up(mts->ts_idev);
                printk(KERN_DEBUG "Pen up interrupt.\n");                       
                mx1ts_flush_fifo(mts);
 
@@ -505,7 +488,7 @@ static irqreturn_t mx1ts_pendata_irq(int irq, void *dev_id)
                // generated as long as there is data in the FIFO. 
 
                if ((mx1ts_reg_read(mts, ASP_ISTATR) & ASP_PDR) != ASP_PDR) {
-                       return IRQ_NONE; /* TODO je to tak? */
+                       return IRQ_NONE; 
                }
 
                auto_zero = mx1ts_reg_read(mts, ASP_PADFIFO);
@@ -523,7 +506,7 @@ static irqreturn_t mx1ts_pendata_irq(int irq, void *dev_id)
                              mts->cal_range_y);
                
                if(mts->is_open)
-                       mx1ts_evt_add(mts->ts_idev, 200 , pen_x, pen_y);
+                       mx1ts_evt_add_touch(mts->ts_idev, 200 , pen_x, pen_y);
        }
        return IRQ_HANDLED;
 }
@@ -537,7 +520,7 @@ static irqreturn_t mx1ts_touch_irq(int irq, void *dev_id)
 {
        struct mx1ts *mts = (struct mx1ts *) dev_id;
        
-       printk(KERN_DEBUG "mx1 touchscreen: Touch down interrupt \n");  
+       printk(KERN_ERR "mx1 touchscreen: Touch down interrupt \n");    
 
        /* Clear the interrupt. */
        mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PEN);
@@ -579,7 +562,7 @@ static inline int mx1ts_enable_irqs(struct mx1ts *mts)      //zaregistruje preruseni
 
 
 
-static int mx1ts_on(struct mx1ts *mts)
+static int mx1ts_on(struct mx1ts *mts)    /*TODO doplnit pri chybach*/
 {
        int ret = 0;
        
@@ -592,6 +575,11 @@ static int mx1ts_on(struct mx1ts *mts)
 
        mts->mx1ts_mem = ioremap ( ASP_BASE_ADDR, 0x38);
        
+       if(!mts->mx1ts_mem) {
+               printk(KERN_ERR "mx1 touchscreen: ioremap  \tFAILED\n");
+               return -1;      
+       }
+
        printk(KERN_DEBUG "mx1 touchscreen: memory remaped on %p \n", mts->mx1ts_mem);
        
 
@@ -669,7 +657,7 @@ static int mx1ts_probe(struct platform_device *dev)
 
        printk(KERN_DEBUG "mx1ts: setting idev struct \tOK\n");
        
-       x_res = 60000;
+       x_res = 60000;          /*TODO neni mozne zmerit ? */
        y_res = 60000;
        printk(KERN_DEBUG "mx1ts: x/y = %d/%d\n", x_res, y_res);