]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/input/touchscreen/edt-ft5x06.c
Input: edt-ft5x06 - use max support points to determine how much to read
[karo-tx-linux.git] / drivers / input / touchscreen / edt-ft5x06.c
index a8640c7b67130d6ce4db700caec4653b170acec0..a76bc486936cd284e8726febc76c189a7f391e6c 100644 (file)
@@ -168,9 +168,9 @@ static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
        struct edt_ft5x06_ts_data *tsdata = dev_id;
        struct device *dev = &tsdata->client->dev;
        u8 cmd;
-       u8 rdbuf[29];
+       u8 rdbuf[31];
        int i, type, x, y, id;
-       int offset, tplen, datalen;
+       int offset, tplen, datalen, crclen;
        int error;
 
        switch (tsdata->version) {
@@ -178,14 +178,14 @@ static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
                cmd = 0xf9; /* tell the controller to send touch data */
                offset = 5; /* where the actual touch data starts */
                tplen = 4;  /* data comes in so called frames */
-               datalen = 26; /* how much bytes to listen for */
+               crclen = 1; /* length of the crc data */
                break;
 
        case M09:
                cmd = 0x02;
                offset = 1;
                tplen = 6;
-               datalen = 29;
+               crclen = 0;
                break;
 
        default:
@@ -193,6 +193,7 @@ static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
        }
 
        memset(rdbuf, 0, sizeof(rdbuf));
+       datalen = tplen * MAX_SUPPORT_POINTS + offset + crclen;
 
        error = edt_ft5x06_ts_readwrite(tsdata->client,
                                        sizeof(cmd), &cmd,