1
From b1c32ca9f8ac9581184e331f338629e7f869f786 Mon Sep 17 00:00:00 2001
2
From: Peter Maydell <peter.maydell@linaro.org>
3
Date: Mon, 18 Feb 2013 16:58:27 +0000
4
Subject: [PATCH 26/70] hw/tsc2005: Add tracing
7
hw/input/tsc2005.c | 68 +++++++++++++++++++++++++++++++++++++++++++-----------
8
1 file changed, 55 insertions(+), 13 deletions(-)
10
diff --git a/hw/input/tsc2005.c b/hw/input/tsc2005.c
11
index 81f2a95..50f8163 100644
12
--- a/hw/input/tsc2005.c
13
+++ b/hw/input/tsc2005.c
15
#include "ui/console.h"
16
#include "hw/devices.h"
18
+//#define TSC2005_DEBUG
21
+#define TRACE(fmt, ...) fprintf(stderr, "%s@%d: " fmt "\n", \
22
+ __FUNCTION__, __LINE__, ##__VA_ARGS__)
27
#define TSC_CUT_RESOLUTION(value, p) ((value) >> (16 - (p ? 12 : 10)))
30
@@ -120,33 +129,46 @@ static uint16_t tsc2005_read(TSC2005State *s, int reg)
33
s->dav &= ~mode_regs[TSC_MODE_X];
34
+ TRACE("X = %d", TSC_CUT_RESOLUTION(X_TRANSFORM(s), s->precision) +
36
return TSC_CUT_RESOLUTION(X_TRANSFORM(s), s->precision) +
39
s->dav &= ~mode_regs[TSC_MODE_Y];
41
+ TRACE("Y = %d", TSC_CUT_RESOLUTION(Y_TRANSFORM(s), s->precision) ^
43
return TSC_CUT_RESOLUTION(Y_TRANSFORM(s), s->precision) ^
47
+ TRACE("Z1 = %d", TSC_CUT_RESOLUTION(Z1_TRANSFORM(s), s->precision) -
49
return TSC_CUT_RESOLUTION(Z1_TRANSFORM(s), s->precision) -
53
+ TRACE("Z2 = %d", TSC_CUT_RESOLUTION(Z2_TRANSFORM(s), s->precision) |
55
return TSC_CUT_RESOLUTION(Z2_TRANSFORM(s), s->precision) |
59
s->dav &= ~mode_regs[TSC_MODE_AUX];
60
+ TRACE("AUX = %d", TSC_CUT_RESOLUTION(AUX_VAL, s->precision));
61
return TSC_CUT_RESOLUTION(AUX_VAL, s->precision);
64
s->dav &= ~mode_regs[TSC_MODE_TEMP1];
65
+ TRACE("TEMP1 = %d", TSC_CUT_RESOLUTION(TEMP1_VAL, s->precision) -
67
return TSC_CUT_RESOLUTION(TEMP1_VAL, s->precision) -
71
s->dav &= ~mode_regs[TSC_MODE_TEMP2];
72
+ TRACE("TEMP2 = %d", TSC_CUT_RESOLUTION(TEMP2_VAL, s->precision) ^
74
return TSC_CUT_RESOLUTION(TEMP2_VAL, s->precision) ^
77
@@ -155,31 +177,43 @@ static uint16_t tsc2005_read(TSC2005State *s, int reg)
78
s->dav &= ~(mode_regs[TSC_MODE_X_TEST] | mode_regs[TSC_MODE_Y_TEST] |
79
mode_regs[TSC_MODE_TS_TEST]);
81
+ TRACE("STATUS = 0x%04x", ret);
84
case 0x8: /* AUX high treshold */
85
+ TRACE("AUX high threshold = 0x%04x", s->aux_thr[1]);
87
case 0x9: /* AUX low treshold */
88
+ TRACE("AUX low threshold = 0x%04x", s->aux_thr[0]);
91
case 0xa: /* TEMP high treshold */
92
+ TRACE("TEMP high threshold = 0x%04x", s->temp_thr[1]);
93
return s->temp_thr[1];
94
case 0xb: /* TEMP low treshold */
95
+ TRACE("TEMP low threshold = 0x%04x", s->temp_thr[0]);
96
return s->temp_thr[0];
99
+ TRACE("CFR0 = 0x%04x", (s->pressure << 15) | ((!s->busy) << 14) |
100
+ (s->nextprecision << 13) | s->timing[0]);
101
return (s->pressure << 15) | ((!s->busy) << 14) |
102
(s->nextprecision << 13) | s->timing[0];
104
+ TRACE("CFR1 = 0x%04x", s->timing[1]);
107
+ TRACE("CFR2 = 0x%04x", (s->pin_func << 14) | s->filter);
108
return (s->pin_func << 14) | s->filter;
110
case 0xf: /* Function select status */
111
+ TRACE("function select status = 0x%04x",
112
+ s->function >= 0 ? 1 << s->function : 0);
113
return s->function >= 0 ? 1 << s->function : 0;
116
/* Never gets here */
117
+ TRACE("unknown register = 0xffff");
121
@@ -187,46 +221,52 @@ static void tsc2005_write(TSC2005State *s, int reg, uint16_t data)
124
case 0x8: /* AUX high treshold */
125
+ TRACE("AUX high threshold = 0x%04x", data);
126
s->aux_thr[1] = data;
128
case 0x9: /* AUX low treshold */
129
+ TRACE("AUX low threshold = 0x%04x", data);
130
s->aux_thr[0] = data;
133
case 0xa: /* TEMP high treshold */
134
+ TRACE("TEMP high threshold = 0x%04x", data);
135
s->temp_thr[1] = data;
137
case 0xb: /* TEMP low treshold */
138
+ TRACE("TEMP low threshold = 0x%04x", data);
139
s->temp_thr[0] = data;
143
+ TRACE("CFR0 = 0x%04x", data);
144
s->host_mode = data >> 15;
145
if (s->enabled != !(data & 0x4000)) {
146
s->enabled = !(data & 0x4000);
147
- fprintf(stderr, "%s: touchscreen sense %sabled\n",
148
- __FUNCTION__, s->enabled ? "en" : "dis");
149
- if (s->busy && !s->enabled)
150
+ TRACE("touchscreen sense %sabled", s->enabled ? "en" : "dis");
151
+ if (s->busy && !s->enabled) {
154
s->busy &= s->enabled;
156
s->nextprecision = (data >> 13) & 1;
157
s->timing[0] = data & 0x1fff;
158
- if ((s->timing[0] >> 11) == 3)
159
- fprintf(stderr, "%s: illegal conversion clock setting\n",
161
+ if ((s->timing[0] >> 11) == 3) {
162
+ TRACE("illegal conversion clock setting");
166
+ TRACE("CFR1 = 0x%04x", data);
167
s->timing[1] = data & 0xf07;
170
+ TRACE("CFR2 = 0x%04x", data);
171
s->pin_func = (data >> 14) & 3;
172
s->filter = data & 0x3fff;
176
- fprintf(stderr, "%s: write into read-only register %x\n",
177
- __FUNCTION__, reg);
178
+ TRACE("write into read-only register 0x%x, value 0x%04x", reg, data);
182
@@ -328,7 +368,7 @@ static uint8_t tsc2005_txrx_word(void *opaque, uint8_t value)
184
TSC2005State *s = opaque;
187
+ TRACE("value = 0x%08x, state=%d", value, s->state + 1);
188
switch (s->state ++) {
191
@@ -340,8 +380,8 @@ static uint8_t tsc2005_txrx_word(void *opaque, uint8_t value)
192
s->nextprecision = (value >> 2) & 1;
193
if (s->enabled != !(value & 1)) {
194
s->enabled = !(value & 1);
195
- fprintf(stderr, "%s: touchscreen sense %sabled\n",
196
- __FUNCTION__, s->enabled ? "en" : "dis");
197
+ TRACE("touchscreen sense %sabled",
198
+ s->enabled ? "en" : "dis");
199
if (s->busy && !s->enabled)
201
s->busy &= s->enabled;
202
@@ -392,7 +432,7 @@ static uint8_t tsc2005_txrx_word(void *opaque, uint8_t value)
203
uint32_t tsc2005_txrx(void *opaque, uint32_t value, int len)
207
+ TRACE("value=0x%08x, len=%d", value, len);
211
@@ -408,8 +448,10 @@ static void tsc2005_timer_tick(void *opaque)
213
/* Timer ticked -- a set of conversions has been finished. */
217
+ TRACE("not busy -> exit");
222
s->dav |= mode_regs[s->function];