Merge "Revert "Revert "Merge 29e114d2 from master."""
diff --git a/hw/goldfish_events_device.c b/hw/goldfish_events_device.c
index 340dc76..3072e3b 100644
--- a/hw/goldfish_events_device.c
+++ b/hw/goldfish_events_device.c
@@ -448,8 +448,44 @@
      * EV_ABS events are sent when the touchscreen is pressed
      */
     if (config->hw_touchScreen) {
+        int32_t*  values;
+
         events_set_bit (s, EV_SYN, EV_ABS );
         events_set_bits(s, EV_ABS, ABS_X, ABS_Z);
+        /* Allocate the absinfo to report the min/max bounds for each
+         * absolute dimension. The array must contain 3 tuples
+         * of (min,max,fuzz,flat) 32-bit values.
+         *
+         * min and max are the bounds
+         * fuzz corresponds to the device's fuziness, we set it to 0
+         * flat corresponds to the flat position for JOEYDEV devices,
+         * we also set it to 0.
+         *
+         * There is no need to save/restore this array in a snapshot
+         * since the values only depend on the hardware configuration.
+         */
+        s->abs_info_count = 3*4;
+        s->abs_info = values = malloc(sizeof(uint32_t)*s->abs_info_count);
+
+        /* ABS_X min/max/fuzz/flat */
+        values[0] = 0;
+        values[1] = config->hw_lcd_width-1;
+        values[2] = 0;
+        values[3] = 0;
+        values   += 4;
+
+        /* ABS_Y */
+        values[0] = 0;
+        values[1] = config->hw_lcd_height-1;
+        values[2] = 0;
+        values[3] = 0;
+        values   += 4;
+
+        /* ABS_Z */
+        values[0] = 0;
+        values[1] = 1;
+        values[2] = 0;
+        values[3] = 0;
     }
 
     /* configure EV_SW array