]> rtime.felk.cvut.cz Git - mx1ts.git/commitdiff
upravena autokalibrace - pri spatnych datech se pred novym pokusem vyflushuje fifo
authorRadek Pupák <pupakr1@fel.cvut.cz>
Mon, 16 Jun 2008 00:24:45 +0000 (02:24 +0200)
committerRadek Pupák <pupakr1@fel.cvut.cz>
Mon, 16 Jun 2008 00:24:45 +0000 (02:24 +0200)
mx1_ts-driver.c

index e6b444c547dbfbe522c9f3221a1f8c3ff09e4181..50da8974f470d3f7098988dc9674de9974ab15cf 100644 (file)
@@ -280,8 +280,9 @@ static void mx1ts_enable_pen_touch_interrupt(struct mx1ts *mts)
 
        /* Enable pen touch interrupt. */
        value = mx1ts_reg_read(mts, ASP_ICNTLR);
-       value |= ASP_EDGE | ASP_PIRQE;
+       value |= /*ASP_POL detekuje zvednuti |*/ ASP_EDGE | ASP_PIRQE;
        mx1ts_reg_write(mts, ASP_ICNTLR, value);
+       printk("mx1_touchscreen: aktivuji pen down interrupt \n");
 }
 
 static void mx1ts_disable_pen_touch_interrupt(struct mx1ts *mts)
@@ -292,6 +293,7 @@ static void mx1ts_disable_pen_touch_interrupt(struct mx1ts *mts)
        value = mx1ts_reg_read(mts, ASP_ICNTLR);
        value &= ~ASP_PIRQE;
        mx1ts_reg_write(mts, ASP_ICNTLR, value);
+       printk("mx1_touchscreen: deaktivuji pen down interrupt \n");
 }
 
 static void mx1ts_enable_pen_up_interrupt(struct mx1ts *mts)
@@ -300,8 +302,9 @@ static void mx1ts_enable_pen_up_interrupt(struct mx1ts *mts)
 
        /* Enable pen up interrupt. XXX: This feature is undocumented. */
        value = mx1ts_reg_read(mts, ASP_ICNTLR);
-       value |= ASP_PUIE;
+       value |= ASP_PUIE; 
        mx1ts_reg_write(mts, ASP_ICNTLR, value);
+       printk("mx1_touchscreen: aktivuji penup interrupt \n");
 }
 
 static void mx1ts_disable_pen_up_interrupt(struct mx1ts *mts)
@@ -312,6 +315,7 @@ static void mx1ts_disable_pen_up_interrupt(struct mx1ts *mts)
        value = mx1ts_reg_read(mts, ASP_ICNTLR);
        value &= ~ASP_PUIE;
        mx1ts_reg_write(mts, ASP_ICNTLR, value);
+       printk("mx1_touchscreen: deaktivuji penup interrupt \n");
 }
 
 
@@ -433,10 +437,15 @@ static irqreturn_t mx1ts_pendata_irq(int irq, void *dev_id)
                mts->cal_range_x = mx1ts_reg_read(mts, ASP_PADFIFO) & 0xFFFF;
                mts->cal_range_y = mx1ts_reg_read(mts, ASP_PADFIFO) & 0xFFFF;
 
+               printk(KERN_ERR "Kalibrace cal_auto_zero %i.\n",mts->cal_auto_zero);
+               printk(KERN_ERR "Kalibrace cal_range_x %i.\n",mts->cal_range_x);
+               printk(KERN_ERR "Kalibrace cal_range_y %i.\n",mts->cal_range_y);
+
                if ((mts->cal_auto_zero >= mts->cal_range_x) ||
                    (mts->cal_auto_zero >= mts->cal_range_y)) {
                        // Invalid data. 
                        printk(KERN_ERR "Invalid data.\n");
+                       mx1ts_flush_fifo(mts);
                        mx1ts_start_auto_calibration(mts);
                        return IRQ_NONE; /* return IRQ_HANDLED; */
                }
@@ -445,9 +454,7 @@ static irqreturn_t mx1ts_pendata_irq(int irq, void *dev_id)
                mts->cal_range_x -= mts->cal_auto_zero;
                mts->cal_range_y -= mts->cal_auto_zero;
                
-               printk(KERN_ERR "Kalibrace cal_auto_zero %i.\n",mts->cal_auto_zero);
-               printk(KERN_ERR "Kalibrace cal_range_x %i.\n",mts->cal_range_x);
-               printk(KERN_ERR "Kalibrace cal_range_y %i.\n",mts->cal_range_y);
+               
                
                value = mx1ts_reg_read(mts, ASP_ACNTLCR);
                value &= ~0x04000000; // Undocumented. 
@@ -496,7 +503,7 @@ static irqreturn_t mx1ts_pendata_irq(int irq, void *dev_id)
 static void mx1ts_enable_pen_up_irq(struct mx1ts *mts)
 {
        unsigned int value;
-       printk(KERN_ERR "Pen up irq.\n");       
+       printk(KERN_ERR "enabling pen up irq.\n");      
 
        value = mx1ts_reg_read(mts, ASP_ICNTLR);
        value |= ASP_PUIE;
@@ -512,7 +519,7 @@ static irqreturn_t mx1ts_touch_irq(int irq, void *dev_id)
 {
        struct mx1ts *mts = (struct mx1ts *) dev_id;
        
-       printk(KERN_ERR "Prijat touch irq \n"); 
+       printk(KERN_ERR "Prijat touch down irq \n");    
 
        /* Clear the interrupt. */
        mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PEN);
@@ -578,8 +585,6 @@ static int mx1ts_on(struct mx1ts *mts)
        mx1ts_reset_asp(mts);
        printk("<1>mx1ts: reset\tOK\n");
        
-       mx1ts_enable_pen_touch_interrupt(mts);
-       printk("<1>mx1ts: zapnuti touch interrupt\n");  
        return 0;
 }
 
@@ -587,12 +592,20 @@ static void mx1ts_close(struct input_dev *idev)
 {
        struct mx1ts *mts = dev_get_drvdata(idev->dev.parent);
        mts->is_open = 0;
+       mx1ts_reset_asp(mts);
+       printk("<1>mx1ts: reset\tOK\n");
+       mx1ts_disable_pen_touch_interrupt(mts);
+       mx1ts_disable_pen_up_interrupt(mts);
+
 }
 
 static int mx1ts_open(struct input_dev *idev)
 {
        struct mx1ts *mts = dev_get_drvdata(idev->dev.parent);
        mts->is_open = 1;
+
+       mx1ts_enable_pen_touch_interrupt(mts);
+       printk("<1>mx1ts: zapnuti touch interrupt\n");  
        return 0;
 }
 
@@ -686,20 +699,20 @@ static int mx1ts_probe(struct platform_device *dev)
 
 
 
-
 static int mx1ts_remove(struct platform_device *dev)
 {
        struct mx1ts *mts = platform_get_drvdata(dev);
 
        BUG_ON(mts == NULL);
-
+       
        free_irq(ASP_PENDATA_IRQ, mts);
        free_irq(ASP_TOUCH_IRQ, mts);
 
-       iounmap(mts->mx1ts_mem);
-       release_mem_region(ASP_BASE_ADDR, 0x40);
-
        input_free_device(mts->ts_idev);
+       
+       iounmap(mts->mx1ts_mem);
+       release_mem_region(ASP_BASE_ADDR, 0x38);
+               
        kfree(mts);
 
        printk("<1> Removing driver \tOK\n");