Modified: trunk/drivers/input/touchscreen/ad7160.c (9014 => 9015)
--- trunk/drivers/input/touchscreen/ad7160.c 2010-07-26 11:08:27 UTC (rev 9014)
+++ trunk/drivers/input/touchscreen/ad7160.c 2010-07-27 08:36:49 UTC (rev 9015)
@@ -19,9 +19,8 @@
#include <linux/input/ad7160.h>
#include "ad7160.h"
-#define AD7160_FORCE_CALIBRATION 0x800
-#define AD7160_IIR_FILTER_ENABLE 0x2000
#define AD7160_SIL_ID 0x7160
+#define AD7160_DRIVER_INTERFACE_ID 0x800
/*
* Bit definition
@@ -52,6 +51,13 @@
#define AD7160_MTL_OFFS_ADJUST_BUSY (1 << 30)
#define AD7160_SLF_OFFS_ADJUST_BUSY (1 << 31)
+
+/* REV_ID */
+#define AD7160_INTERFACE_REV_ID_SHIFT 0
+#define AD7160_SILICON_REV_ID_SHIFT 16
+#define AD7160_INTERFACE_REV_ID_MASK 0xFFFF
+#define AD7160_SILICON_REV_ID_MASK 0xFFFF
+
#define AD7160_STAT_X_OFFS 0
#define AD7160_STAT_X_MASK 0xFFF
#define AD7160_STAT_Y_OFFS 12
@@ -381,7 +387,7 @@
struct input_dev *input_dev;
struct ad7160_platform_data *pdata = dev->platform_data;
int err;
- u32 revid;
+ u32 revid, fw_revid;
struct ad7160 *ts;
if (!bdata->irq) {
@@ -487,9 +493,12 @@
goto err_free_mem;
}
- input_dev->id.version = ad7160_read(ts, AD7160_REG_REV_ID) >> 16;
- revid = ad7160_read(ts, AD7160_REG_FW_REV);
+ fw_revid = ad7160_read(ts, AD7160_REG_FW_REV);
+ revid = ad7160_read(ts, AD7160_REG_REV_ID);
+ input_dev->id.version = (revid >> AD7160_INTERFACE_REV_ID_SHIFT) &
+ AD7160_INTERFACE_REV_ID_MASK;
+
ad7160_setup(ts);
err = request_irq(ts->bdata.irq, ad7160_irq, IRQF_TRIGGER_FALLING,
@@ -507,10 +516,18 @@
if (err)
goto err_remove_attr;
- dev_info(dev, "Rev.%d touchscreen, irq %d Firmware REV %d.%d.%d.%d\n",
- input_dev->id.version, ts->bdata.irq, revid >> 12,
- (revid >> 8) & 0xF, (revid >> 4) & 0xF, revid & 0xF);
+ if (input_dev->id.version > AD7160_DRIVER_INTERFACE_ID)
+ dev_warn(dev, "Driver implements Interface REV %x, "
+ "device probed implements %x!\n", AD7160_DRIVER_INTERFACE_ID,
+ input_dev->id.version);
+ dev_info(dev, "Rev.%d touchscreen, irq %d, Interface REV %x, "
+ "Firmware REV %d.%d.%d.%d\n",
+ (revid >> AD7160_SILICON_REV_ID_SHIFT) &
+ AD7160_SILICON_REV_ID_MASK,
+ ts->bdata.irq, input_dev->id.version, fw_revid >> 12,
+ (fw_revid >> 8) & 0xF, (fw_revid >> 4) & 0xF, fw_revid & 0xF);
+
return 0;
err_remove_attr: