Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 115059
b: refs/heads/master
c: d8c1f31
h: refs/heads/master
i:
  115057: 08d7f25
  115055: f15bc9e
v: v3
  • Loading branch information
Dan Liang authored and Dmitry Torokhov committed Sep 10, 2008
1 parent b4d621d commit a19ac5e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 160f1fef7e52e974489b3c70fbd4e094c06965c2
refs/heads/master: d8c1f317d1b3bb5c21175550968c86acfab3ff36
37 changes: 24 additions & 13 deletions trunk/drivers/input/touchscreen/atmel_tsadcc.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ struct atmel_tsadcc {
char phys[32];
struct clk *clk;
int irq;
unsigned int prev_absx;
unsigned int prev_absy;
unsigned char bufferedmeasure;
};

static void __iomem *tsc_base;
Expand All @@ -100,10 +103,9 @@ static void __iomem *tsc_base;

static irqreturn_t atmel_tsadcc_interrupt(int irq, void *dev)
{
struct input_dev *input_dev = ((struct atmel_tsadcc *)dev)->input;
struct atmel_tsadcc *ts_dev = (struct atmel_tsadcc *)dev;
struct input_dev *input_dev = ts_dev->input;

unsigned int absx;
unsigned int absy;
unsigned int status;
unsigned int reg;

Expand All @@ -121,6 +123,7 @@ static irqreturn_t atmel_tsadcc_interrupt(int irq, void *dev)
atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);

input_report_key(input_dev, BTN_TOUCH, 0);
ts_dev->bufferedmeasure = 0;
input_sync(input_dev);

} else if (status & ATMEL_TSADCC_PENCNT) {
Expand All @@ -138,16 +141,23 @@ static irqreturn_t atmel_tsadcc_interrupt(int irq, void *dev)
} else if (status & ATMEL_TSADCC_EOC(3)) {
/* Conversion finished */

absx = atmel_tsadcc_read(ATMEL_TSADCC_CDR3) << 10;
absx /= atmel_tsadcc_read(ATMEL_TSADCC_CDR2);

absy = atmel_tsadcc_read(ATMEL_TSADCC_CDR1) << 10;
absy /= atmel_tsadcc_read(ATMEL_TSADCC_CDR0);

input_report_abs(input_dev, ABS_X, absx);
input_report_abs(input_dev, ABS_Y, absy);
input_report_key(input_dev, BTN_TOUCH, 1);
input_sync(input_dev);
if (ts_dev->bufferedmeasure) {
/* Last measurement is always discarded, since it can
* be erroneous.
* Always report previous measurement */
input_report_abs(input_dev, ABS_X, ts_dev->prev_absx);
input_report_abs(input_dev, ABS_Y, ts_dev->prev_absy);
input_report_key(input_dev, BTN_TOUCH, 1);
input_sync(input_dev);
} else
ts_dev->bufferedmeasure = 1;

/* Now make new measurement */
ts_dev->prev_absx = atmel_tsadcc_read(ATMEL_TSADCC_CDR3) << 10;
ts_dev->prev_absx /= atmel_tsadcc_read(ATMEL_TSADCC_CDR2);

ts_dev->prev_absy = atmel_tsadcc_read(ATMEL_TSADCC_CDR1) << 10;
ts_dev->prev_absy /= atmel_tsadcc_read(ATMEL_TSADCC_CDR0);
}

return IRQ_HANDLED;
Expand Down Expand Up @@ -223,6 +233,7 @@ static int __devinit atmel_tsadcc_probe(struct platform_device *pdev)
}

ts_dev->input = input_dev;
ts_dev->bufferedmeasure = 0;

snprintf(ts_dev->phys, sizeof(ts_dev->phys),
"%s/input0", pdev->dev.bus_id);
Expand Down

0 comments on commit a19ac5e

Please sign in to comment.