diff options
author | Nick Dyer <nick.dyer@itdev.co.uk> | 2011-08-23 16:40:30 +0100 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 12:37:33 -0700 |
commit | a9666bb4527dd99a6bbf6d4f594c9ab91627a17a (patch) | |
tree | 7bbc2bd87753ede26f23a54f6dc51a930c58e414 /drivers/input/touchscreen/atmel_mxt_ts.c | |
parent | e97f175096a5cf74ee33056232667be9b43f45be (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.c | 64 |
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 }; |