#include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/property.h>
 #include <linux/ratelimit.h>
 #include <linux/regulator/consumer.h>
 #include <linux/slab.h>
        struct input_dev *input;
        unsigned long irq_flags;
        int error;
+       u32 report_rate;
        char fw_version[EDT_NAME_LEN];
 
        dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
        edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
        edt_ft5x06_ts_get_parameters(tsdata);
 
+       if (tsdata->reg_addr.reg_report_rate != NO_REGISTER &&
+           !device_property_read_u32(&client->dev,
+                                     "report-rate-hz", &report_rate)) {
+               if (tsdata->version == EDT_M06)
+                       tsdata->report_rate = clamp_val(report_rate, 30, 140);
+               else
+                       tsdata->report_rate = clamp_val(report_rate, 1, 255);
+
+               if (report_rate != tsdata->report_rate)
+                       dev_warn(&client->dev,
+                                "report-rate %dHz is unsupported, use %dHz\n",
+                                report_rate, tsdata->report_rate);
+
+               if (tsdata->version == EDT_M06)
+                       tsdata->report_rate /= 10;
+
+               edt_ft5x06_register_write(tsdata,
+                                         tsdata->reg_addr.reg_report_rate,
+                                         tsdata->report_rate);
+       }
+
        dev_dbg(&client->dev,
                "Model \"%s\", Rev. \"%s\", %dx%d sensors\n",
                tsdata->name, fw_version, tsdata->num_x, tsdata->num_y);