evdevtouch: Make it work with am335x

The driver for the resistive touchscreen of these boards tends to report
ABS limits 0..4095 even tough it never sends coordinates outside a certain
range (e.g. approximately 165..4016 for X). This breaks the mapping of
hardware coordinates to screen space. Apply a workaround to make it
work properly.

Change-Id: I3eb5d76002acba1972061f3add44d797349c8ec8
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This commit is contained in:
Laszlo Agocs 2013-10-17 14:45:13 +02:00 committed by The Qt Project
parent 1d3fce8b50
commit cc3ece1da4

View File

@ -300,6 +300,21 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
qDebug("evdevtouch: device name: %s", name); qDebug("evdevtouch: device name: %s", name);
} }
// Fix up the coordinate ranges for am335x in case the kernel driver does not have them fixed.
if (d->hw_name == QLatin1String("ti-tsc")) {
if (d->hw_range_x_min == 0 && d->hw_range_x_max == 4095) {
d->hw_range_x_min = 165;
d->hw_range_x_max = 4016;
}
if (d->hw_range_y_min == 0 && d->hw_range_y_max == 4095) {
d->hw_range_y_min = 220;
d->hw_range_y_max = 3907;
}
if (printDeviceInfo)
qDebug("evdevtouch: found ti-tsc, overriding: min X: %d max X: %d min Y: %d max Y: %d",
d->hw_range_x_min, d->hw_range_x_max, d->hw_range_y_min, d->hw_range_y_max);
}
bool grabSuccess = !ioctl(m_fd, EVIOCGRAB, (void *) 1); bool grabSuccess = !ioctl(m_fd, EVIOCGRAB, (void *) 1);
if (grabSuccess) if (grabSuccess)
ioctl(m_fd, EVIOCGRAB, (void *) 0); ioctl(m_fd, EVIOCGRAB, (void *) 0);