diff --git a/drivers/input/touchscreen/pt_mt_common.c b/drivers/input/touchscreen/pt_mt_common.c index aee85ce41c89..2a5326a7c233 100755 --- a/drivers/input/touchscreen/pt_mt_common.c +++ b/drivers/input/touchscreen/pt_mt_common.c @@ -35,6 +35,31 @@ #define MT_PARAM_FUZZ(md, sig_ost) PARAM_FUZZ(md->pdata->frmwrk, sig_ost) #define MT_PARAM_FLAT(md, sig_ost) PARAM_FLAT(md->pdata->frmwrk, sig_ost) +void pt_pr_buf_debug(struct device *dev, u8 *dptr, int size, + const char *data_name) +{ + struct pt_core_data *cd = dev_get_drvdata(dev); + u8 *pr_buf = cd->pr_buf; + int i, k; + const char fmt[] = "%02X "; + int max; + + if (!size) + return; + + max = (PT_MAX_PRBUF_SIZE - 1) - sizeof(PT_PR_TRUNCATED); + + pr_buf[0] = 0; + for (i = k = 0; i < size && k < max; i++, k += 3) + scnprintf(pr_buf + k, PT_MAX_PRBUF_SIZE, fmt, dptr[i]); + + if (size) + dev_err(dev, "%s: %s[0..%d]=%s%s\n", __func__, data_name, + size - 1, pr_buf, size <= max ? "" : PT_PR_TRUNCATED); + else + dev_err(dev, "%s: %s[]\n", __func__, data_name); +} + /******************************************************************************* * FUNCTION: pt_mt_lift_all * @@ -307,6 +332,10 @@ static void pt_get_mt_touches(struct pt_mt_data *md, if (md->mt_function.input_sync) md->mt_function.input_sync(md->input); mt_sync_count++; + pt_pr_buf_debug(dev, si->xy_mode, si->desc.tch_header_size, + "Err xy_mode"); + pt_pr_buf_debug(dev, si->xy_data, + num_cur_tch* si->desc.tch_record_size, "Err xy_data"); continue; } diff --git a/drivers/input/touchscreen/pt_regs.h b/drivers/input/touchscreen/pt_regs.h index 73893a3d2d92..1cce0feb2216 100755 --- a/drivers/input/touchscreen/pt_regs.h +++ b/drivers/input/touchscreen/pt_regs.h @@ -1532,6 +1532,7 @@ struct pt_core_data { bool show_tt_data; bool bridge_mode; bool hw_detect_enabled; + u8 pr_buf[PT_MAX_PRBUF_SIZE]; struct regulator *vdd; #endif };