diff --git a/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_i2c.c b/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_i2c.c index 5be61d7e8c51..01e7b6ce2f82 100644 --- a/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_i2c.c +++ b/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_i2c.c @@ -185,6 +185,9 @@ static int parse_dt(struct device *dev, struct syna_tcm_board_data *bdata) bdata->tpio_reset_gpio = -1; } + /* If multiple_factor not set in device_tree. Set as default value. + * report major and minor value = raw value * size_to_pixel_multiple_factor / 128 + */ prop = of_find_property(np, "synaptics,size_to_pixel_multiple_factor", NULL); if (prop && prop->length) { retval = of_property_read_u32(np, "synaptics,size_to_pixel_multiple_factor", diff --git a/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_touch.c b/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_touch.c index 5dc7c660777a..dce6a146e51f 100644 --- a/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_touch.c +++ b/drivers/input/touchscreen/synaptics_tcm_mmi_v2/synaptics_touch.c @@ -771,11 +771,11 @@ static void touch_report(void) x = object_data[idx].x_pos; y = object_data[idx].y_pos; if (object_data[idx].x_width > object_data[idx].y_width) { - minor = object_data[idx].y_width * bdata->size_to_pixel_multiple_factor; - major = object_data[idx].x_width * bdata->size_to_pixel_multiple_factor; + minor = (object_data[idx].y_width * bdata->size_to_pixel_multiple_factor) >> 7; + major = (object_data[idx].x_width * bdata->size_to_pixel_multiple_factor) >> 7; } else { - minor = object_data[idx].x_width * bdata->size_to_pixel_multiple_factor; - major = object_data[idx].y_width * bdata->size_to_pixel_multiple_factor; + minor = (object_data[idx].x_width * bdata->size_to_pixel_multiple_factor) >> 7; + major = (object_data[idx].y_width * bdata->size_to_pixel_multiple_factor) >> 7; } if (bdata->swap_axes) { temp = x;