12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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(-)
- --- 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
-
- --- 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 *
- 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 platfor
- 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 platfo
-
- 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);
|