History log of /freebsd-current/sys/dev/iicbus/iichid.c
Revision Date Author Comments
# 358453ce 26-Dec-2023 Alexander Motin <mav@FreeBSD.org>

iichid(4): Switch taskqueue to "fast"

While "fast" taskqueue may be more expensive due to spinlock use,
when used mainly for timeout tasks it allows to avoid extra context
switches to and from callout thread, that is even more expensive.

MFC after: 1 month


# a8f80c0c 26-Dec-2023 Alexander Motin <mav@FreeBSD.org>

iichid(4): Unify two taskqueue tasks

taskqueue_enqueue_timeout(0) is equivalent to taskqueue_enqueue(),
so no need to create a separate periodic_task and event_task to run
exactly the same handler.

MFC after: 1 month


# 68e457df 23-Dec-2023 Alexander Motin <mav@FreeBSD.org>

iichid(4): Restore/increase sampling rate

My previous commit by reducing precision reduced the sampling rate
from 60Hz to 40Hz on idle system. Return it back to 60-80Hz range,
that should be good for mouse smoothness on 60Hz displays.

MFC after: 1 months


# 8c86b981 22-Dec-2023 Alexander Motin <mav@FreeBSD.org>

iichid(4): Improve idle sampling hysteresis

In sampling mode some devices return same data indefinitely even if
there is nothing to report. Previous idle hysteresis implementation
activated only when device returned no data, so some devices ended up
polled at fast rate all the time. This new implementation compares
each new report with the previous, and, if they are identical, after
reaching threshold also drop sampling rate to slow.

On my Dell XPS 13 9310 with iichid(4) touchscreen and touchpad this
reduces idle power consumption by ~0.5W by reducing number of context
switches in the driver from ~4000 to ~700 per second when not touched.

MFC after: 1 month


# 685dc743 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

sys: Remove $FreeBSD$: one-line .c pattern

Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/


# 4b171281 03-Aug-2023 Vladimir Kondratyev <wulf@FreeBSD.org>

hid: Add child device parameter to HID methods

Some devices like Apple HID-over-SPI may contain more than one report
descriptors necessitating creation of multiple hidbus children.
Add indentificator of child devices to distinct them.
No functional changes intended.

Differential Revision: https://reviews.freebsd.org/D41246


# 3a866152 20-Apr-2022 John Baldwin <jhb@FreeBSD.org>

iicbus: Remove unused devclass arguments to DRIVER_MODULE.


# 7fad3ed8 19-Apr-2022 Gordon Bergling <gbe@FreeBSD.org>

iicbus(4): Fix two typos in kernel error messages

- s/occured/occurred/

MFC after:3 days


# 34e051c4 02-Mar-2022 Vladimir Kondratyev <wulf@FreeBSD.org>

iichid(4): Add support for ASUS C300 chromebook.

Some chromebooks e.g. ASUS C300 have no valid _CID and _DSM ACPI
objects required for device identification and HID descriptor address
detection. Add quirk to allow required data to be hardcoded in to
driver.

MFC after: 2 month


# 6b1da3d2 02-Mar-2022 Vladimir Kondratyev <wulf@FreeBSD.org>

iichid(4): Implement I2CRDWR command in hid_ioctl method

This command is intended to be compatible with I2CRDWR ioctl.
It is required to perform arbitrary I2C transfers by device
drivers which can switch between HID and native non-HID modes.

MFC after: 2 month


# c508b081 30-Nov-2021 Vladimir Kondratyev <wulf@FreeBSD.org>

iichid(4): Perform acknowledgement of I2C device interrupt after RESET command

in sampling mode to workaround firmware bug.

This fixes reboot or poweroff on frame.work laptops after first touch.

Reported by: many
PR: 259230
MFC after: 1 week
Tested by: kevans, markj


# 82626fef 09-Jul-2021 Vladimir Kondratyev <wulf@FreeBSD.org>

iichid(4): Perform bus_teardown_intr/bus_setup_intr to disable interrupts

during suspend/resume cycle. Previously used bus_generic_suspend_intr and
bus_generic_resume_intr may cause interrupt storm because of missed
interrupt acknowledges caused by blocking of intr handler.

Reported by: J.R. Oldroyd <jr_AT_opal_DOT_com>
MFC after: 1 week


# 5236888d 31-May-2021 J.R. Oldroyd <jr@opal.com>

iichid(4): disable interrupt on suspend

Commit message of the identical change in Linux driver says:
"When an I2C HID device is powered off during system sleep, as a result
of removing its power resources (by the ACPI core) the interrupt line
might go low as well. This results inadvertent interrupts."

This change fixes suspend/resume on Asus S510UQ laptops.

While here add a couple of typo fixes as well as a slight change to the
iichid_attach() code to have the power_on flag set properly.

Submitted by: J.R. Oldroyd <jr_AT_opal_DOT_com>
Reviewed by: wulf
MFC after: 1 week


# 9aa0e5af 28-May-2021 Vladimir Kondratyev <wulf@FreeBSD.org>

usbhid(4): Add second set of USB transfers to work in polled mode.

The second set of USB transfer is requested by hkbd(4) and
should improve HID keyboard handling in kdb and panic contexts.

MFC after: 1 week
Reviewed by: hselasky
Differential revision: https://reviews.freebsd.org/D30486


# 8ffcde25 09-Jan-2021 Vladimir Kondratyev <wulf@FreeBSD.org>

hid: fix extraneous SYSCTL_ADD_INT() options revealed by LINT build

Reviewed by: hselasky (as part of D28060)


# b1f1b07f 06-Oct-2020 Vladimir Kondratyev <wulf@FreeBSD.org>

hid: Import iichid - I2C transport backend for HID subsystem

This implements hid_if.m methods for HID-over-I2C protocol [1].

Following kernel options are added:

IICHID_SAMPLING - Enable support for a sampling mode as interrupt
resource acquisition is not always possible in a case
of GPIO interrupts.
IICHID_DEBUG - Enable debug output.

The module is based on prior Marc Priggemeyer work (D16698).

[1] http://download.microsoft.com/download/7/d/d/7dd44bb7-2a7a-4505-ac1c-7227d3d96d5b/hid-over-i2c-protocol-spec-v1-0.docx

Differential revision: https://reviews.freebsd.org/D27892