diff --git a/drivers/input/touchscreen/synaptics_i2c_rmi4.c b/drivers/input/touchscreen/synaptics_i2c_rmi4.c
index 6bdeb559e5cf15d2918ecbccea2031e377cb36bb..0ae5eb6f19eabb5df23c84ced6111f4cd16d5049 100644
--- a/drivers/input/touchscreen/synaptics_i2c_rmi4.c
+++ b/drivers/input/touchscreen/synaptics_i2c_rmi4.c
@@ -97,6 +97,11 @@ enum object_type {
 	OBJECT_TYPE_HAND_EDGE = 0x08
 };
 
+enum DOZE_MODE {
+	DOZE_SLEEP = 0,
+	DOZE_ACTIVE = 1
+};
+
 #define DEVICE_CONFIGURED 0x1
 
 #define RMI4_VTG_MIN_UV		2700000
@@ -1672,6 +1677,14 @@ static int synaptics_rmi4_parse_dt(struct device *dev,
 		return rc;
 	}
 
+	rc = of_property_read_u32(np, "synaptics,doze-interval-active", &temp_val);
+	if (!rc)
+		rmi4_pdata->doze_interval_active = temp_val;
+
+	rc = of_property_read_u32(np, "synaptics,doze-interval-sleep", &temp_val);
+	if (!rc)
+		rmi4_pdata->doze_interval_sleep = temp_val;
+
 	rc = of_property_read_u32(np, "synaptics,palm-detect-threshold", &temp_val);
 	if (!rc)
 		rmi4_pdata->palm_detect_threshold = temp_val;
@@ -3044,6 +3057,24 @@ static void synaptics_rmi4_init_work(struct work_struct *work)
 	rmi4_data->suspended = false;
 }
 
+static int synaptics_rmi4_set_doze_interval(struct synaptics_rmi4_data
+						*rmi4_data, int active)
+{
+	int retval = 0;
+	unsigned char interval;
+
+	interval = active ? rmi4_data->board->doze_interval_active :
+				rmi4_data->board->doze_interval_sleep;
+
+	if (interval)
+		retval = synaptics_rmi4_i2c_write(rmi4_data,
+					rmi4_data->f01_ctrl_base_addr + 1 +
+					rmi4_data->num_of_intr_regs,
+					&interval, 1);
+
+	return retval;
+}
+
  /**
  * synaptics_rmi4_probe()
  *
@@ -3196,6 +3227,8 @@ static int synaptics_rmi4_probe(struct i2c_client *client,
 		goto err_free_gpios;
 	}
 
+	synaptics_rmi4_set_doze_interval(rmi4_data, DOZE_ACTIVE);
+
 	if (rmi4_data->board->disp_maxx)
 		rmi4_data->disp_maxx = rmi4_data->board->disp_maxx;
 	else
@@ -3849,6 +3882,8 @@ static int synaptics_rmi4_suspend(struct device *dev)
 		return 0;
 	}
 
+	synaptics_rmi4_set_doze_interval(rmi4_data, DOZE_SLEEP);
+
 	if (device_may_wakeup(&rmi4_data->i2c_client->dev)) {
 		need_wakeup = 1;
 		rmi4_data->suspended = true;
@@ -3927,6 +3962,8 @@ static int synaptics_rmi4_resume(struct device *dev)
 		return 0;
 	}
 
+	synaptics_rmi4_set_doze_interval(rmi4_data, DOZE_ACTIVE);
+
 	if (device_may_wakeup(&rmi4_data->i2c_client->dev)) {
 		need_wakeup = 0;
 		rmi4_data->suspended = 0;
diff --git a/include/linux/input/synaptics_dsx.h b/include/linux/input/synaptics_dsx.h
index 9c908a770d154d5a2f9d9283d76d57d88213c9f1..25947a1c7882f00c3f722a0a2c645993d4f89c60 100644
--- a/include/linux/input/synaptics_dsx.h
+++ b/include/linux/input/synaptics_dsx.h
@@ -81,6 +81,8 @@ struct synaptics_rmi4_platform_data {
 	unsigned pon_delay;
 	unsigned palm_detect_threshold;
 	unsigned palm_detect_keycode;
+	unsigned doze_interval_active;
+	unsigned doze_interval_sleep;
 	const char *fw_image_name;
 	int (*gpio_config)(unsigned gpio, bool configure);
 	struct synaptics_rmi4_capacitance_button_map *capacitance_button_map;