Hi added the printk. this is my code
static void ads7846_report_state(struct ads7846 *ts)
{
struct ads7846_packet *packet = ts->packet;
unsigned int Rt;
u16 x, y, z1, z2;
/* added for debug */
printk(KERN_INFO "ads7846_report_state\n");
/*
* ads7846_get_value() does in-place conversion (including byte swap)
* from on-the-wire format as part of debouncing to get stable
* readings.
*/
if (ts->model == 7845) {
x = *(u16 *)packet->tc.x_buf;
y = *(u16 *)packet->tc.y_buf;
z1 = 0;
z2 = 0;
} else {
x = packet->tc.x;
y = packet->tc.y;
z1 = packet->tc.z1;
z2 = packet->tc.z2;
}
/* range filtering */
if (x == MAX_12BIT)
x = 0;
if (ts->model == 7843) {
Rt = ts->pressure_max / 2;
} else if (ts->model == 7845) {
if (get_pendown_state(ts)) {
Rt = ts->pressure_max / 2;
} else {
/* added for debug */
printk(KERN_INFO "cannot get pendown state \n");
Rt = 0;
}
dev_vdbg(&ts->spi->dev, "x/y: %d/%d, PD %d\n", x, y, Rt);
} else if (likely(x && z1)) {
/* compute touch pressure resistance using equation #2 */
/* added for debug */
printk(KERN_INFO "compute touch pressure resistance using equation #2 \n");
Rt = z2;
Rt -= z1;
Rt *= x;
Rt *= ts->x_plate_ohms;
Rt /= z1;
Rt = (Rt + 2047) >> 12;
} else {
/* added for debug */
printk(KERN_INFO "ts model ? %d \n", ts->model);
Rt = 0;
}
/* added for debug */
printk(KERN_INFO "Rt %d \n", Rt);
/*
* Sample found inconsistent by debouncing or pressure is beyond
* the maximum. Don't report it to user space, repeat at least
* once more the measurement
*/
if (packet->tc.ignore || Rt > ts->pressure_max) {
/* added for debug */
printk(KERN_INFO "Ignored %d pressure %d \n", packet->tc.ignore, Rt);
dev_vdbg(&ts->spi->dev, "ignored %d pressure %d \n",
packet->tc.ignore, Rt);
return;
}
/*
* Maybe check the pendown state before reporting. This discards
* false readings when the pen is lifted.
*/
if (ts->penirq_recheck_delay_usecs) {
udelay(ts->penirq_recheck_delay_usecs);
if (!get_pendown_state(ts)) {
/* added for debug */
printk(KERN_INFO "cannot get pendown state \n");
Rt = 0;
}
}
/*
* NOTE: We can't rely on the pressure to determine the pen down
* state, even this controller has a pressure sensor. The pressure
* value can fluctuate for quite a while after lifting the pen and
* in some cases may not even settle at the expected value.
*
* The only safe way to check for the pen up condition is in the
* timer by reading the pen signal state (it's a GPIO _and_ IRQ).
*/
if (Rt) {
struct input_dev *input = ts->input;
if (ts->swap_xy)
swap(x, y);
if (!ts->pendown) {
input_report_key(input, BTN_TOUCH, 1);
ts->pendown = true;
dev_vdbg(&ts->spi->dev, "DOWN\n");
}
/* added for debug */
printk(KERN_INFO "input_report_abs x: %d, y: %d \n", x, y);input_sync(input);
input_report_abs(input, ABS_X, x);
input_report_abs(input, ABS_Y, y);
input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", x, y, Rt);
} else {
/* added for debug */
printk(KERN_INFO "not reporting. Rt=%d \n", Rt);
}
}
and the output after touching the screen
<6>[ 59.531036] ads7846_report_state
<6>[ 59.534423] compute touch pressure resistance using equation #2
<6>[ 59.540771] Rt 0
<6>[ 59.542785] not reporting. Rt=0
<6>[ 59.553497] ads7846_report_state
<6>[ 59.556884] compute touch pressure resistance using equation #2
<6>[ 59.563201] Rt 0
<6>[ 59.565216] not reporting. Rt=0
<6>[ 59.577087] ads7846_report_state
<6>[ 59.580474] compute touch pressure resistance using equation #2
<6>[ 59.586791] Rt 0
<6>[ 59.588836] not reporting. Rt=0
<6>[ 59.850494] ads7846_report_state
<6>[ 59.853881] compute touch pressure resistance using equation #2
<6>[ 59.860198] Rt 0
<6>[ 59.862213] not reporting. Rt=0
Thanks
Francesco2012/2/15 Francesco Sarasini <sarasini@gmail.com>
Thank you. My code base is Linaro Android.I will add the printk to the codeFrancesco2012/2/15 Bharathi Subramanian <bharathi.list@gmail.com>
On Tue, Feb 14, 2012 at 7:48 PM, Francesco Sarasini <sarasini@gmail.com> wrote:Oops. I hope, it is in EVM Code. For BB-xM, it might be different.
>>> Please add printk to show the value of x, y, before and after the
>>> OMAP3EVM macro. That will give better idea about the touchevent.
>> I'm sorry, where is the OMAP3EVM macro?
The following set of commands are responsible for sending the
co-ordinates to user space. You have to add printk before this and
check.
input_report_abs(input, ABS_X, x);
input_report_abs(input, ABS_Y, y);
input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
Can you share info about code base (Rowboat/Linaro) ?
Bye :)
--
Bharathi Subramanian