Hi Mustafa, [Adding Jiri, the HID maintainer, as a FYI] On Mon, Sep 3, 2018 at 9:32 PM Mustafa Kuscu <mustafakuscu@xxxxxxxxx> wrote: > > On Mon, Sep 3, 2018 at 11:37 AM Benjamin Tissoires > <benjamin.tissoires@xxxxxxxxxx> wrote: > > If you want to go ahead, you can compare what is sent to the touchpad > > by adding i2c_hid.debug=1 to the kernel boot command line. The output > > should differ in v4.18, and this must be the culprit :) > > Hi Benjamin, > > As per your request, the outputs are below. Thanks for debugging. :) > > v4.17: > kernel: i2c_hid i2c-ELAN1200:00: i2c-ELAN1200:00 supply vdd not found, > using dummy regulator [stripped] > kernel: input: ELAN1200:00 04F3:3045 Touchpad as > /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-5/i2c-ELAN1200:00/0018:04F3:3045.0002/input/inpu > t13 > kernel: hid-multitouch 0018:04F3:3045.0002: input,hidraw1: I2C HID > v1.00 Mouse [ELAN1200:00 04F3:3045] on i2c-ELAN1200:00 > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_or_send_report > kernel: i2c_hid i2c-ELAN1200:00: __i2c_hid_command: cmd=05 00 33 03 06 00 05 00 03 03 00 This is where there is a problem in the v4.18 kernel ^^^ > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_power > kernel: i2c_hid i2c-ELAN1200:00: __i2c_hid_command: cmd=05 00 01 08 > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_power > kernel: i2c_hid i2c-ELAN1200:00: __i2c_hid_command: cmd=05 00 00 08 > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_power > kernel: i2c_hid i2c-ELAN1200:00: __i2c_hid_command: cmd=05 00 01 08 > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_power > > v4.18: > kernel: i2c_hid i2c-ELAN1200:00: i2c-ELAN1200:00 supply vdd not found, > using dummy regulator [stripped] > kernel: input: ELAN1200:00 04F3:3045 Touchpad as > /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-5/i2c-ELAN1200:00/0018:04F3:3045.0002/input/input20 > kernel: hid-multitouch 0018:04F3:3045.0002: input,hidraw1: I2C HID > v1.00 Mouse [ELAN1200:00 04F3:3045] on i2c-ELAN1200:00 > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_or_send_report > kernel: i2c_hid i2c-ELAN1200:00: __i2c_hid_command: cmd=05 00 37 03 06 > 00 05 00 07 00 00 > kernel: i2c_hid i2c-ELAN1200:00: i2c_hid_set_or_send_report > kernel: i2c_hid i2c-ELAN1200:00: __i2c_hid_command: cmd=05 00 33 03 06 00 05 00 03 03 03 Here the kernel sends "03 03 03" while in the previous kernel it sends "03 03 00" And looking more carefully at 7f81c8db54898a7, I realized I removed a test specifically for Elan panels: @@ -415,32 +411,9 @@ static void mt_feature_mapping(struct hid_device *hdev, struct mt_device *td = hid_get_drvdata(hdev); switch (usage->hid) { - case HID_DG_INPUTMODE: - /* Ignore if value index is out of bounds. */ - if (usage->usage_index >= field->report_count) { - dev_err(&hdev->dev, "HID_DG_INPUTMODE out of range\n"); - break; - } - - if (td->inputmode < 0) { - td->inputmode = field->report->id; - td->inputmode_index = usage->usage_index; - } else { - /* - * Some elan panels wrongly declare 2 input mode - * features, and silently ignore when we set the - * value in the second field. Skip the second feature - * and hope for the best. - */ - dev_info(&hdev->dev, - "Ignoring the extra HID_DG_INPUTMODE\n"); - } - - break; This hunk was making sure we never set twice the inputmode value in a feature report, and now I did. Please test the patch attached to https://bugzilla.kernel.org/show_bug.cgi?id=200899 for a fix and I'll send it upstream and to stable ASAP. Cheers, Benjamin