aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/sunxi/patches-3.18/115-input-sun4i-ts-update-temp-curve.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/sunxi/patches-3.18/115-input-sun4i-ts-update-temp-curve.patch')
-rw-r--r--target/linux/sunxi/patches-3.18/115-input-sun4i-ts-update-temp-curve.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-3.18/115-input-sun4i-ts-update-temp-curve.patch b/target/linux/sunxi/patches-3.18/115-input-sun4i-ts-update-temp-curve.patch
new file mode 100644
index 0000000000..bff74e468f
--- /dev/null
+++ b/target/linux/sunxi/patches-3.18/115-input-sun4i-ts-update-temp-curve.patch
@@ -0,0 +1,83 @@
+From 2e2493cd07405dfa88e53199b47bdbbb5336fdce Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 16 Jun 2014 20:01:12 +0200
+Subject: [PATCH] touchscreen: sun4i-ts: A10 (sun4i) has a different
+ temperature curve
+
+Testing has revealed that the temperature in the rtp controller of the A10
+(sun4i) SoC has a different curve then on the A13 (sun5i) and later models.
+
+Add a new sun5i-a13-ts compatible to differentiate the newer models and
+set the curve based on the compatible string.
+
+This fixes the temperature reported on the A10 being much higher then
+expected.
+
+Note the new curve is still not ideal on all A10-s, that seems to have to
+do with there being a large spread between different A10-s out there.
+
+Reported-by: Tong Zhang <lovewilliam@gmail.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ .../devicetree/bindings/input/touchscreen/sun4i.txt | 2 +-
+ drivers/input/touchscreen/sun4i-ts.c | 13 ++++++++++++-
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt b/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
+index aef5779..5106709 100644
+--- a/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
++++ b/Documentation/devicetree/bindings/input/touchscreen/sun4i.txt
+@@ -2,7 +2,7 @@ sun4i resistive touchscreen controller
+ --------------------------------------
+
+ Required properties:
+- - compatible: "allwinner,sun4i-a10-ts"
++ - compatible: "allwinner,sun4i-a10-ts" or "allwinner,sun5i-a13-ts"
+ - reg: mmio address range of the chip
+ - interrupts: interrupt to which the chip is connected
+
+diff --git a/drivers/input/touchscreen/sun4i-ts.c b/drivers/input/touchscreen/sun4i-ts.c
+index 2ba8260..52b7114 100644
+--- a/drivers/input/touchscreen/sun4i-ts.c
++++ b/drivers/input/touchscreen/sun4i-ts.c
+@@ -111,6 +111,8 @@ struct sun4i_ts_data {
+ unsigned int irq;
+ bool ignore_fifo_data;
+ int temp_data;
++ int temp_offset;
++ int temp_step;
+ };
+
+ static void sun4i_ts_irq_handle_input(struct sun4i_ts_data *ts, u32 reg_val)
+@@ -189,7 +191,8 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
+ if (ts->temp_data == -1)
+ return -EAGAIN;
+
+- return sprintf(buf, "%d\n", (ts->temp_data - 1447) * 100);
++ return sprintf(buf, "%d\n",
++ (ts->temp_data - ts->temp_offset) * ts->temp_step);
+ }
+
+ static ssize_t show_temp_label(struct device *dev,
+@@ -224,6 +227,13 @@ static int sun4i_ts_probe(struct platform_device *pdev)
+ ts->dev = dev;
+ ts->ignore_fifo_data = true;
+ ts->temp_data = -1;
++ if (of_device_is_compatible(np, "allwinner,sun4i-a10-ts")) {
++ ts->temp_offset = 1900;
++ ts->temp_step = 100;
++ } else {
++ ts->temp_offset = 1447;
++ ts->temp_step = 100;
++ }
+
+ ts_attached = of_property_read_bool(np, "allwinner,ts-attached");
+ if (ts_attached) {
+@@ -318,6 +328,7 @@ static int sun4i_ts_remove(struct platform_device *pdev)
+
+ static const struct of_device_id sun4i_ts_of_match[] = {
+ { .compatible = "allwinner,sun4i-a10-ts", },
++ { .compatible = "allwinner,sun5i-a13-ts", },
+ { /* sentinel */ }
+ };
+ MODULE_DEVICE_TABLE(of, sun4i_ts_of_match);