From nobody Mon Sep 29 21:52:40 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4cbFKh5dkNz68tp3; Mon, 29 Sep 2025 21:52:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cbFKh0z49z45x3; Mon, 29 Sep 2025 21:52:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759182760; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+XK/ZJ/xvF6Fqq3ep0QSbnWwhFqj4wqysJ8DlqYvD64=; b=MhL4Jujz6ssR+YpB2GwD6oXJOgv5lWu5NDh7wtAoIYBHepNhnaLxFtscAYTgOpVnh0IFJB ZbHoJD4mYFrXCLkDTMwwNGVKfjS6GjbRvnkjKmvh1uHvSh5LfvAL8iAOS++rf+JbcQkogV sxAJ5K5DmDjLm34dgj7Qp5SetZBnnIsBzhzy4hu2iqFTuXiweEY+uY72WWlGYzoaP5UC/A 55XjVU+bQF8qHK4XoAcYrL7tryOMIMrmzryRAuV2Pgfdk9WcwbBGilqFQQ59aqXuZT0ivF 9l0ftRnwcauC9wW4lZKh2SryKt7miIExb9RrGsCwaiZOkCAg4jg7rLzauS10DQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759182760; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+XK/ZJ/xvF6Fqq3ep0QSbnWwhFqj4wqysJ8DlqYvD64=; b=maf++/ritPNC4tF5AGx4su37OljuOfHAExXMLTxj4SRwGqUHaN0FEAJg4SlBXFUQzD1vl9 b1TW3jb61StXYQABX1fLLz61mJ/Ggb/xTayn3uqiPtziwXCYrfzZF5vysZXVV/VVe4PzeB xcaTrMEZk38WPAGHFySIbmJGjyQGDbAamRxvIOekNJv1Wo0M+msOprIizeu3ApXdvlNTTd BaSZcns67MLsjVQWhbm5C0rRxsPcZdzW8bcPBjZWDeUP8cUhWGXhg/j2AFtnUXOkeZ29Oq IRlxx4gyzc1xymRWhzujS7CFQe679cW41NPrU342a8cSrhYrU96WJ9lJWW86qQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759182760; a=rsa-sha256; cv=none; b=mTU/R3wLMyp8c8C67boYxFxziyq8g3/liXd+vBxpIbseGhbvoOBHb4pNLw+BItFND7lMUw FUYNBPtX/qqFYjx0gZ/YYZ/VJc9N8AE5UMToYa/KAMOPXcTdzj0MOOhfVjxrdNwf4ukRzN LJMGIvI/pweLfv1f6b6wa27rcPJkJ686vUsgNAv9rlNrJcSEonT7rXjYyIc8nc5PPHmWkB U4xmfbTLPIJTnd4/hLwHCYD1o20Roa1nChxly5CnAaZ8NHtI++pwB+EKFWXoKInTKWpy72 hdnSyRiVt032/dXKmCZ8s+DHhkVnmkyrz5EdptbBtG+XAp++FYpE68oIgV/EXQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4cbFKh0Ttgz1MXs; Mon, 29 Sep 2025 21:52:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 58TLqek9051827; Mon, 29 Sep 2025 21:52:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58TLqePk051824; Mon, 29 Sep 2025 21:52:40 GMT (envelope-from git) Date: Mon, 29 Sep 2025 21:52:40 GMT Message-Id: <202509292152.58TLqePk051824@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Vladimir Kondratyev Subject: git: ee46f649cb13 - stable/15 - ietp(4): Always overload HID report descriptor List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: wulf X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: ee46f649cb1344bdaf220b763efaad66d4c77491 Auto-Submitted: auto-generated The branch stable/15 has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=ee46f649cb1344bdaf220b763efaad66d4c77491 commit ee46f649cb1344bdaf220b763efaad66d4c77491 Author: Vladimir Kondratyev AuthorDate: 2025-09-22 08:37:19 +0000 Commit: Vladimir Kondratyev CommitDate: 2025-09-29 21:51:36 +0000 ietp(4): Always overload HID report descriptor It is required since "iichid(4): Always use wMaxInputLength bytes as input report length" commit. MFC after: 1 week (cherry picked from commit a9227954b0f01e950cc51d744af27585778ddf84) --- sys/dev/hid/ietp.c | 55 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/sys/dev/hid/ietp.c b/sys/dev/hid/ietp.c index 73a5cb7414d4..a9d0295fb121 100644 --- a/sys/dev/hid/ietp.c +++ b/sys/dev/hid/ietp.c @@ -199,17 +199,32 @@ static const struct hid_device_id ietp_iic_devs[] = { IETP_IIC_DEV("ELAN1000"), }; -static uint8_t const ietp_dummy_rdesc[] = { +static uint8_t const ietp_dummy_rdesc_lo[] = { 0x05, HUP_GENERIC_DESKTOP, /* Usage Page (Generic Desktop Ctrls) */ 0x09, HUG_MOUSE, /* Usage (Mouse) */ 0xA1, 0x01, /* Collection (Application) */ 0x09, 0x01, /* Usage (0x01) */ + 0x15, 0x00, /* Logical Minimum (0) */ + 0x26, 0xFF, 0x00, /* Logical Maximum (255) */ 0x95, IETP_REPORT_LEN_LO, /* Report Count (IETP_REPORT_LEN_LO) */ 0x75, 0x08, /* Report Size (8) */ 0x81, 0x02, /* Input (Data,Var,Abs) */ 0xC0, /* End Collection */ }; +static uint8_t const ietp_dummy_rdesc_hi[] = { + 0x05, HUP_GENERIC_DESKTOP, /* Usage Page (Generic Desktop Ctrls) */ + 0x09, HUG_MOUSE, /* Usage (Mouse) */ + 0xA1, 0x01, /* Collection (Application) */ + 0x09, 0x01, /* Usage (0x01) */ + 0x15, 0x00, /* Logical Minimum (0) */ + 0x26, 0xFF, 0x00, /* Logical Maximum (255) */ + 0x95, IETP_REPORT_LEN_HI, /* Report Count (IETP_REPORT_LEN_HI) */ + 0x75, 0x08, /* Report Size (8) */ + 0x81, 0x02, /* Input (Data,Var,Abs) */ + 0xC0, /* End Collection */ +}; + static const struct evdev_methods ietp_evdev_methods = { .ev_open = &ietp_ev_open, .ev_close = &ietp_ev_close, @@ -433,28 +448,38 @@ ietp_res2dpmm(uint8_t res, bool hi_precision) static void ietp_iic_identify(driver_t *driver, device_t parent) { - void *d_ptr; - hid_size_t d_len; - int isize; - uint8_t iid; + device_t iichid = device_get_parent(parent); + static const uint16_t reg = IETP_PATTERN; + uint16_t addr = iicbus_get_addr(iichid) << 1; + uint8_t resp[2]; + uint8_t cmd[2] = { reg & 0xff, (reg >> 8) & 0xff }; + struct iic_msg msgs[2] = { + { addr, IIC_M_WR | IIC_M_NOSTOP, sizeof(cmd), cmd }, + { addr, IIC_M_RD, sizeof(resp), resp }, + }; + struct iic_rdwr_data ird = { msgs, nitems(msgs) }; + uint8_t pattern; if (HIDBUS_LOOKUP_ID(parent, ietp_iic_devs) == NULL) return; - if (hid_get_report_descr(parent, &d_ptr, &d_len) != 0) + + if (device_get_devclass(iichid) != devclass_find("iichid")) return; - /* - * Some Elantech trackpads have a mangled HID report descriptor, which - * reads as having an incorrect input size (i.e. < IETP_REPORT_LEN_LO). - * If the input size is incorrect, load a dummy report descriptor. - */ + DPRINTF("Read reg 0x%04x with size %zu\n", reg, sizeof(resp)); - isize = hid_report_size_max(d_ptr, d_len, hid_input, &iid); - if (isize >= IETP_REPORT_LEN_LO) + if (hid_ioctl(parent, I2CRDWR, (uintptr_t)&ird) != 0) return; - hid_set_report_descr(parent, ietp_dummy_rdesc, - sizeof(ietp_dummy_rdesc)); + DPRINTF("Response: %*D\n", (int)size(resp), resp, " "); + + pattern = (resp[0] == 0xFF && resp[1] == 0xFF) ? 0 : resp[1]; + if (pattern >= 0x02) + hid_set_report_descr(parent, ietp_dummy_rdesc_hi, + sizeof(ietp_dummy_rdesc_hi)); + else + hid_set_report_descr(parent, ietp_dummy_rdesc_lo, + sizeof(ietp_dummy_rdesc_lo)); } static int