diff --git a/sys/arm/ti/ti_adc.c b/sys/arm/ti/ti_adc.c --- a/sys/arm/ti/ti_adc.c +++ b/sys/arm/ti/ti_adc.c @@ -463,6 +463,8 @@ for (i = sc->sc_coord_readouts + 2 + start; i < sc->sc_coord_readouts + 2 + end; i++) x += data[i]; x /= (end - start); + if (sc->sc_x_inverted) + x = 4096 - x; #ifdef DEBUG_TSC device_printf(sc->sc_dev, "touchscreen x: %d, y: %d\n", x, y); @@ -758,6 +760,7 @@ node = ofw_bus_get_node(dev); + sc->sc_x_inverted = false; sc->sc_tsc_wires = 0; sc->sc_coord_readouts = 1; sc->sc_x_plate_resistance = 0; @@ -765,6 +768,8 @@ /* Read "tsc" node properties */ child = ofw_bus_find_child(node, "tsc"); if (child != 0 && OF_hasprop(child, "ti,wires")) { + if (OF_hasprop(child, "freebsd,x-inverted")) + sc->sc_x_inverted = true; if ((OF_getencprop(child, "ti,wires", &cell, sizeof(cell))) > 0) sc->sc_tsc_wires = cell; if ((OF_getencprop(child, "ti,coordinate-readouts", &cell, diff --git a/sys/arm/ti/ti_adcvar.h b/sys/arm/ti/ti_adcvar.h --- a/sys/arm/ti/ti_adcvar.h +++ b/sys/arm/ti/ti_adcvar.h @@ -53,6 +53,7 @@ int sc_yn_bit, sc_yn_inp; uint32_t sc_tsc_enabled; int sc_pen_down; + bool sc_x_inverted; #ifdef EVDEV_SUPPORT int sc_x; int sc_y;