diff options
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.patch | 83 |
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); |