From 5abfc4629e378033d68a8681bc4246c33033f7b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Radek=20Pup=C3=A1k?= Date: Mon, 16 Jun 2008 02:24:45 +0200 Subject: [PATCH] upravena autokalibrace - pri spatnych datech se pred novym pokusem vyflushuje fifo --- mx1_ts-driver.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/mx1_ts-driver.c b/mx1_ts-driver.c index e6b444c..50da897 100644 --- a/mx1_ts-driver.c +++ b/mx1_ts-driver.c @@ -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"); -- 2.39.2