Input: edt-ft5x06 - set report rate by dts property
authorDario Binacchi <dario.binacchi@amarulasolutions.com>
Tue, 28 Jun 2022 17:56:49 +0000 (10:56 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 29 Jun 2022 05:00:00 +0000 (22:00 -0700)
It allows to change the M06/M12 default scan rate on driver probing.

Co-developed-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Link: https://lore.kernel.org/r/20220621123937.1330389-4-dario.binacchi@amarulasolutions.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/edt-ft5x06.c

index 77f061af5c61a24e45f579c392dde36447d00003..8c99819a50a4e7972c13b0b846eab32bda215a79 100644 (file)
@@ -24,6 +24,7 @@
 #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>
@@ -1084,6 +1085,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
        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");
@@ -1213,6 +1215,27 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
        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);