Re: patch staging-htc-dream-touchscreen-driver-for-staging.patch added to gregkh-2.6 tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jul 28, 2009 at 4:14 AM, Pavel Machek<pavel@xxxxxx> wrote:
> Hi!
>
>> >> Don't see canceling timer nor shutting off WQ here. Also, maybe
>> >> implement open() and close() so we don't reschedule WQ while polling?_
>> > )
>>
>> Unless you changed something there should be no failure path after
>> starting the timer or enabling the interrupt.
>>
>> synaptics_ts_remove is missing a flush_work call though.
>
> Can you submit patch to fix that?
>

When fix it, sure. This code is unreachable in the configurations we
use though so I never noticed it before.

>> > 2) it uses non-standard multitouch support. Either multitouch needs to
>> > be disabled for merge, or it needs to switch to standard config.
>>
>> I have a patch that adds support for the new protocol, but it does not
>> yet remove the old hack.
>
> Yes, such patch would be welcome. I guess we could wrap old, hacky
> protocol in ifdef, and then remove it when moving to drivers/input.

I included the patch below. It is not against your cleaned up version
of the driver, but it could use a review in its current form since I'm
unclear on how up events should be handled. Another touchscreen only
sends events for the finger that moved, so the absence of a finger
report is not a good indication that it was released.

-- 
Arve Hjønnevåg

---

>From edc71cab6a21fd0415b626bf2cbe737af29e3491 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= <arve@xxxxxxxxxxx>
Date: Mon, 20 Jul 2009 20:11:31 -0700
Subject: [PATCH] Input: synaptics_i2c_rmi: Send new multi touch events
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Send both fingers using the new multitouch protocol in addition to
the old single finger event and second finger ABS_HAT* hack.

The new protocol does not specify how to report up events. To make
sure the user-space frameworks can generate up events, we send at
least one event where ABS_MT_TOUCH_MAJOR is zero before we stop
sending events for a finger.

Signed-off-by: Arve Hjønnevåg <arve@xxxxxxxxxxx>
---
 drivers/input/touchscreen/synaptics_i2c_rmi.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/drivers/input/touchscreen/synaptics_i2c_rmi.c
b/drivers/input/touchscreen/synaptics_i2c_rmi.c
index 56cf371..e003e42 100644
--- a/drivers/input/touchscreen/synaptics_i2c_rmi.c
+++ b/drivers/input/touchscreen/synaptics_i2c_rmi.c
@@ -43,6 +43,7 @@ struct synaptics_ts_data {
        int snap_down[2];
        int snap_up[2];
        uint32_t flags;
+       int reported_finger_count;
        int8_t sensitivity_adjust;
        int (*power)(int on);
        struct early_suspend early_suspend;
@@ -204,6 +205,26 @@ static void synaptics_ts_work_func(struct
work_struct *work)

input_report_abs(ts->input_dev, ABS_HAT0X, pos[1][0]);

input_report_abs(ts->input_dev, ABS_HAT0Y, pos[1][1]);
                                }
+
+                               if (!finger)
+                                       z = 0;
+                               input_report_abs(ts->input_dev,
ABS_MT_TOUCH_MAJOR, z);
+                               input_report_abs(ts->input_dev,
ABS_MT_WIDTH_MAJOR, w);
+                               input_report_abs(ts->input_dev,
ABS_MT_POSITION_X, pos[0][0]);
+                               input_report_abs(ts->input_dev,
ABS_MT_POSITION_Y, pos[0][1]);
+                               input_mt_sync(ts->input_dev);
+                               if (finger2_pressed) {
+
input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, z);
+
input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w);
+
input_report_abs(ts->input_dev, ABS_MT_POSITION_X, pos[1][0]);
+
input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, pos[1][1]);
+                                       input_mt_sync(ts->input_dev);
+                               } else if (ts->reported_finger_count > 1) {
+
input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0);
+
input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0);
+                                       input_mt_sync(ts->input_dev);
+                               }
+                               ts->reported_finger_count = finger;
                                input_sync(ts->input_dev);
                        }
                }
@@ -480,6 +501,10 @@ static int synaptics_ts_probe(
        input_set_abs_params(ts->input_dev, ABS_TOOL_WIDTH, 0, 15, fuzz_w, 0);
        input_set_abs_params(ts->input_dev, ABS_HAT0X,
-inactive_area_left, max_x + inactive_area_right, fuzz_x, 0);
input_set_abs_params(ts->input_dev, ABS_HAT0Y, -inactive_area_top,
max_y + inactive_area_bottom, fuzz_y, 0);+
input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X,
-inactive_area_left, max_x + inactive_area_right, fuzz_x, 0);
+       input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y,
-inactive_area_top, max_y + inactive_area_bottom, fuzz_y, 0);
+       input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0,
255, fuzz_p, 0);
+       input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 15,
fuzz_w, 0);
        /* ts->input_dev->name = ts->keypad_info->name; */
        ret = input_register_device(ts->input_dev);
        if (ret) {
--
1.6.1
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux