Thread (11 messages) 11 messages, 4 authors, 2012-02-03

Re: [PATCH v2 2/3] HID: multitouch: add control of the feature "Maximum Contact Number"

flat view

From: Benjamin Tissoires <hidden>
Date: 2012-01-24 14:39:12
Also in: lkml

Hi Henrik,

On Fri, Jan 20, 2012 at 17:19, Henrik Rydberg [off-list ref] wrote:
Hi Benjamin,
quoted
If the programmer fills the field maxcontacts in the mt_class,
then the driver will set the feature to this value. It is safe
for current drivers as the feature is read/right in the HID norm
read/write, I presume.
you're right... ;-)
quoted
@@ -609,6 +612,36 @@ static void mt_set_input_mode(struct hid_device *hdev)
      }
 }

+static void mt_set_maxcontacts(struct hid_device *hdev)
+{
+     struct mt_device *td = hid_get_drvdata(hdev);
+     struct hid_report *r;
+     struct hid_report_enum *re;
+     int fieldmax, max;
+
+     if (td->maxcontact_report_id < 0)
+             return;
+
+     if (!td->mtclass.maxcontacts)
+             return;
+
+     re = &(hdev->report_enum[HID_FEATURE_REPORT]);
Why parenthesis here?
ok
quoted
+     r = re->report_id_hash[td->maxcontact_report_id];
+     if (r) {
+             max = td->mtclass.maxcontacts;
+             fieldmax = r->field[0]->logical_maximum;
+             hid_info(hdev, "%s: value = %d / %d / %d\n", __func__,
+                     r->field[0]->value[0],
+                     td->mtclass.maxcontacts,
+                     fieldmax);
Looks like debug information, please downplay or remove.
I can remove them if you need.
quoted
+             max = fieldmax < max ? fieldmax : max;
There are kernel variants of min/max functions to consider here.
I'll look for them.
quoted
+             if (r->field[0]->value[0] != max) {
+                     r->field[0]->value[0] = max;
+                     usbhid_submit_report(hdev, r, USB_DIR_OUT);
+             }
So the report is in fact only set when different... Do we know for
which current devices this is true?
Currently, I've got only the Perixx touchpad that needs this feature
to be set. The initial value is 0 whereas it should be 2.

Maybe some drivers that used the DUAL_MT_CLS_* can handle more, but I
have no idea has I don't have many of them.

Cheers,
Benjamin
Thanks,
Henrik
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help