Re: [PATCH v2 0/2] Add UCSI I2C transport driver for ITE885x USB-C controllers
From: Armin Wolf
Date: Sat Aug 29 2026 - 06:37:36 EST
Am 28.08.26 um 03:04 schrieb Edward Blair:
Let's try that again.. without gmail's html...
Thanks, that makes sense. I can rework patch 1 to add MSFT8000 to
ignore_serial_bus_ids[] in acpi_device_enumeration_by_parent(). This
keeps the ACPI device present while preventing its SerialBus resources
from being instantiated as bus clients.
If that sounds reasonable, it seems like a good middle ground between
v1 and v2: it preserves v1's enumeration behaviour while handling the
device generically in the ACPI core, without the ITE-specific x86
status override added in v2.
Thanks,
Edward
Sound reasonable to me, just add a small comment explaining why MSFT8000
had to be added to that list.
Thanks,
Armin Wolf
On Fri, 28 Aug 2026 at 01:58, Edward Blair <edward.blair@xxxxxxxxx> wrote:
Thanks, that makes sense. I can rework patch 1 to add MSFT8000 to ignore_serial_bus_ids[] in acpi_device_enumeration_by_parent(). This keeps the ACPI device present while preventing its SerialBus resources from being instantiated as bus clients.
If that sounds reasonable, it seems like a good middle ground between v1 and v2: it preserves v1's enumeration behaviour while handling the device generically in the ACPI core, without the ITE-specific x86 status override added in v2.
Thanks,
Edward
On Thu, 27 Aug 2026 at 23:30, Armin Wolf <W_Armin@xxxxxx> wrote:
Am 25.08.26 um 22:14 schrieb Edward Blair:
Some ASUS desktop boards describe the same ITE USB-C controller twiceAFAIK the MSFT8000 device is used to grant userspace applications under Windows
in ACPI: as an MSFT8000 Resource Hub Proxy and as an ITE885x device at
the same I2C address. If the RhProxy node claims the address first, the
ITE device cannot be registered. Only the ITE node provides the
interrupt required by this transport.
Patch 1 marks the RhProxy node absent only when its I2C resource exactly
matches a supported ITE node which also has an interrupt.
access to I2C, SPI, UART and GPIO resources. Since we already provide those functions
natively i suggest that we generally ignore MSFT8000 devices when checking for resource
conflicts.
Thanks,
Armin Wolf
Patch 2 adds the ITE885x UCSI transport. These controllers use
ITE-specific offsets for CCI, MESSAGE_IN, CONTROL and interrupt
handling. They do not expose a VERSION register or accept PPM_RESET
over I2C.
The register layout and reset behaviour were checked against the ITE
Windows driver supplied for this board.
Tested on an ASUS ROG Strix Z790-E Gaming WiFi with ITE8853:
- Built and booted on x86_64.
- ucsi_ite bound to ITE8853:00 without the previous -EBUSY failure.
- /sys/class/typec/port0 was registered.
- USB-C attachment detection worked.
- No UCSI, ITE or Type-C initialization errors were logged.
Suspend/resume and the ITE8800 through ITE8805 IDs have not been tested.
Changes since v1:
- Move the duplicate-device quirk from the I2C core to the ACPI x86
status-override code, as suggested by Mika and Heikki.
- Correctly identify MSFT8000 as a Resource Hub Proxy.
- Restrict the quirk to exact matching I2C resources.
- Use devm_request_threaded_irq(), as suggested by Heikki.
- Rebase onto Linux 7.2 and update for the current UCSI API.
- Read and cache complete UCSI events before acknowledging them.
- Match the vendor transport's MESSAGE_IN and PPM_RESET behaviour.
Link: https://lore.kernel.org/all/20260314013157.7181-1-edward.blair@xxxxxxxxx/
Edward Blair (2):
ACPI: x86: hide duplicate RhProxy node for ITE UCSI controllers
usb: typec: ucsi: add ITE885x I2C transport driver
drivers/acpi/x86/utils.c | 151 ++++++++++++
drivers/usb/typec/ucsi/Kconfig | 11 +
drivers/usb/typec/ucsi/Makefile | 1 +
drivers/usb/typec/ucsi/ucsi_ite.c | 395 ++++++++++++++++++++++++++++++
4 files changed, 558 insertions(+)
create mode 100644 drivers/usb/typec/ucsi/ucsi_ite.c
base-commit: 66498c75b4f8017f62d720d9b59675bdf3abce91