From nobody Mon Sep 22 08:38:16 2025 X-Original-To: dev-commits-src-main@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 4cVc2K0HMSz68pFP; Mon, 22 Sep 2025 08:38:17 +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 4cVc2J6lLdz3sbr; Mon, 22 Sep 2025 08:38:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758530296; 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=ff7rHXnzfk6BIWbo2kAF/GwKLLN3quFS9iBMaZPKlls=; b=fuWzgMCNPRvnw19TuK/qiYHt7DZRGaEYPRdZp7iUR4n6nQVLneqbyTqaTGkXxwld3798Z9 raWaC2z6rB8kf5TsPHuXdIbpcClL//LJv3Fv1fjgrvbUYB4Y2ExdM3bw8xQMr/cAvDNF0j Ho88lxq+wj711XDiu5ctRZodzwUNyds4Elsm+BqEgDoG9WiingrJFWqcvEd9WIm7gk2saA Th79sZr2zWCkwKuVvJ/AXp5wk2bea0y36RdHfdl1xuXeIbvhSJMFiScF7zthpNmMWwDfaA vDuccR8rS61dqMTr1TpvLogsuEiRsCZiSk8BYBPwlMdoiWGvZTAbbIocj4czcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758530296; 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=ff7rHXnzfk6BIWbo2kAF/GwKLLN3quFS9iBMaZPKlls=; b=YVJBYKI9kvZvnb8I97BqNtPqiUf/ttL7dFZPNDHd2lvupDfx8br4JAFRJzpGTki3zb9NfI UIHZoIu4oUIxBS00s7JoNxOeMt/9xWPb/bkHlirIv5iUDuiLMH/3IkLpyXPSTQmGUh1z6J S+0PF9f9hZbiLgL5H98Jmwo9z0BQfKUjxrD/r0QbthWxq76vZaeJj2z4oTkdycpm9fBrCj LJEoJcdtCTu12EQ2uEDVr98vQ0OK5Nih6YhlQQxkxCh8wFrQpuaJFFT0pHA1JKplM4NH4O YIJ2UmzQBOpAS7XZvyVpD9iysQ/CX9e37YSI3Gp8++/ylPrOzW2Zncdl1fXeUg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758530297; a=rsa-sha256; cv=none; b=OGSYxc4E00sPjL5X7QN7rBV4b4oHK2rKkv7ixBsO6vSDIFsfuKxjoFlgCAZ9sIwANatBb0 fwWWB8O19MYxTZq4vZO6BkdZPG7nT392T/Hg1Vzha4YfCGy2E4dEuQbYpQNpCTqGxqGVH2 F27s29cmWI5jeO+/wr3bJdKfAnLmGOZQMXmlzQxZb0cKvt70jx5NklgaHuemmcGwvwmBnP 9bCM23D+3u756Qr16kdgcu6txYHgslM1QUg7QGF2fhHGogRMKuurCJ5pLWnIySzRQ0pM1h Aj6vSB9AQKL10bpZCgWYX1zPy2GZ1OVzI7Ufg5FMrsoHapGM+/6Ctjrz4z6ISA== 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 4cVc2J6CByzsxs; Mon, 22 Sep 2025 08:38:16 +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 58M8cGRF006116; Mon, 22 Sep 2025 08:38:16 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58M8cG9E006113; Mon, 22 Sep 2025 08:38:16 GMT (envelope-from git) Date: Mon, 22 Sep 2025 08:38:16 GMT Message-Id: <202509220838.58M8cG9E006113@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Vladimir Kondratyev Subject: git: a9227954b0f0 - main - ietp(4): Always overload HID report descriptor List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: a9227954b0f01e950cc51d744af27585778ddf84 Auto-Submitted: auto-generated The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=a9227954b0f01e950cc51d744af27585778ddf84 commit a9227954b0f01e950cc51d744af27585778ddf84 Author: Vladimir Kondratyev AuthorDate: 2025-09-22 08:37:19 +0000 Commit: Vladimir Kondratyev CommitDate: 2025-09-22 08:37:19 +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 --- 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