#define M09_REGISTER_NUM_X             0x94
 #define M09_REGISTER_NUM_Y             0x95
 
+#define M12_REGISTER_REPORT_RATE       0x88
+
 #define EV_REGISTER_THRESHOLD          0x40
 #define EV_REGISTER_GAIN               0x41
 #define EV_REGISTER_OFFSET_Y           0x45
 /* m06: range 20 to 80, m09: range 0 to 30, m12: range 1 to 255... */
 static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
                M09_REGISTER_THRESHOLD, EV_REGISTER_THRESHOLD, 0, 255);
-/* m06: range 3 to 14, m12: (0x64: 100Hz) */
+/* m06: range 3 to 14, m12: range 1 to 255 */
 static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
-               NO_REGISTER, NO_REGISTER, 0, 255);
+               M12_REGISTER_REPORT_RATE, NO_REGISTER, 0, 255);
 
 static struct attribute *edt_ft5x06_attrs[] = {
        &edt_ft5x06_attr_gain.dattr.attr,
        case EDT_M09:
        case EDT_M12:
                reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
-               reg_addr->reg_report_rate = NO_REGISTER;
+               reg_addr->reg_report_rate = tsdata->version == EDT_M12 ?
+                       M12_REGISTER_REPORT_RATE : NO_REGISTER;
                reg_addr->reg_gain = M09_REGISTER_GAIN;
                reg_addr->reg_offset = M09_REGISTER_OFFSET;
                reg_addr->reg_offset_x = NO_REGISTER;