summaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen/atmel_mxt_ts.c
diff options
context:
space:
mode:
authorNick Dyer <nick.dyer@itdev.co.uk>2011-08-23 16:40:30 +0100
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 12:37:33 -0700
commita9666bb4527dd99a6bbf6d4f594c9ab91627a17a (patch)
tree7bbc2bd87753ede26f23a54f6dc51a930c58e414 /drivers/input/touchscreen/atmel_mxt_ts.c
parente97f175096a5cf74ee33056232667be9b43f45be (diff)
Input: atmel_mxt_ts - Implement debug output for messages
Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk> Rebase-Id: R8df9407cd37e5a4a10694b626a6ec50cb469f452
Diffstat (limited to 'drivers/input/touchscreen/atmel_mxt_ts.c')
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c64
1 files changed, 49 insertions, 15 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index bb416f062d0f..c55f9519df0c 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -79,6 +79,9 @@
#define MXT_SPT_MESSAGECOUNT_T44 44
#define MXT_SPT_CTECONFIG_T46 46
+/* MXT_GEN_MESSAGE_T5 object */
+#define MXT_RPTID_NOMSG 0xff
+
/* MXT_GEN_COMMAND_T6 field */
#define MXT_COMMAND_RESET 0
#define MXT_COMMAND_BACKUPNV 1
@@ -264,6 +267,7 @@ struct mxt_data {
unsigned int max_x;
unsigned int max_y;
struct bin_attribute mem_access_attr;
+ bool debug_enabled;
};
static bool mxt_object_readable(unsigned int type)
@@ -331,15 +335,6 @@ static bool mxt_object_writable(unsigned int type)
}
}
-static void mxt_dump_message(struct device *dev,
- struct mxt_message *message)
-{
- dev_dbg(dev, "reportid: %u\tmessage: %02x %02x %02x %02x %02x %02x %02x\n",
- message->reportid, message->message[0], message->message[1],
- message->message[2], message->message[3], message->message[4],
- message->message[5], message->message[6]);
-}
-
static int mxt_check_bootloader(struct i2c_client *client,
unsigned int state)
{
@@ -499,14 +494,22 @@ static int mxt_read_message(struct mxt_data *data,
{
struct mxt_object *object;
u16 reg;
+ int ret;
object = mxt_get_object(data, MXT_GEN_MESSAGE_T5);
if (!object)
return -EINVAL;
reg = object->start_address;
- return __mxt_read_reg(data->client, reg,
- sizeof(struct mxt_message), message);
+ ret = __mxt_read_reg(data->client, reg,
+ sizeof(struct mxt_message), message);
+
+ if (ret == 0 && message->reportid != MXT_RPTID_NOMSG
+ && data->debug_enabled)
+ print_hex_dump(KERN_DEBUG, "MXT MSG:", DUMP_PREFIX_NONE, 16, 1,
+ message, sizeof(struct mxt_message), false);
+
+ return ret;
}
static int mxt_read_object(struct mxt_data *data,
@@ -661,9 +664,7 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id)
if (reportid >= min_reportid && reportid <= max_reportid)
mxt_input_touchevent(data, &message, id);
- else
- mxt_dump_message(dev, &message);
- } while (reportid != 0xff);
+ } while (reportid != MXT_RPTID_NOMSG);
end:
return IRQ_HANDLED;
@@ -717,7 +718,7 @@ static int mxt_make_highchg(struct mxt_data *data)
error = mxt_read_message(data, &message);
if (error)
return error;
- } while (message.reportid != 0xff && --count);
+ } while (message.reportid != MXT_RPTID_NOMSG && --count);
if (!count) {
dev_err(dev, "CHG pin isn't cleared\n");
@@ -1107,6 +1108,36 @@ static ssize_t mxt_update_fw_store(struct device *dev,
return count;
}
+static ssize_t mxt_debug_enable_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct mxt_data *data = dev_get_drvdata(dev);
+ int count;
+ char c;
+
+ c = data->debug_enabled ? '1' : '0';
+ count = sprintf(buf, "%c\n", c);
+
+ return count;
+}
+
+static ssize_t mxt_debug_enable_store(struct device *dev,
+ struct device_attribute *attr, const char *buf, size_t count)
+{
+ struct mxt_data *data = dev_get_drvdata(dev);
+ int i;
+
+ if (sscanf(buf, "%u", &i) == 1 && i < 2) {
+ data->debug_enabled = (i == 1);
+
+ dev_dbg(dev, "%s\n", i ? "debug enabled" : "debug disabled");
+ return count;
+ } else {
+ dev_dbg(dev, "debug_enabled write error\n");
+ return -EINVAL;
+ }
+}
+
static int mxt_check_mem_access_params(struct mxt_data *data, loff_t off,
size_t *count)
{
@@ -1159,10 +1190,13 @@ static ssize_t mxt_mem_access_write(struct file *filp, struct kobject *kobj,
static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store);
+static DEVICE_ATTR(debug_enable, S_IWUSR | S_IRUSR, mxt_debug_enable_show,
+ mxt_debug_enable_store);
static struct attribute *mxt_attrs[] = {
&dev_attr_object.attr,
&dev_attr_update_fw.attr,
+ &dev_attr_debug_enable.attr,
NULL
};