Linux USB
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Add ITE885x UCSI I2C transport driver
@ 2026-08-29 14:55 Edward Blair
  2026-08-29 14:55 ` [PATCH v3 1/2] ACPI: scan: do not enumerate MSFT8000 as a serial bus slave Edward Blair
  2026-08-29 14:55 ` [PATCH v3 2/2] usb: typec: ucsi: add ITE885x I2C transport driver Edward Blair
  0 siblings, 2 replies; 6+ messages in thread
From: Edward Blair @ 2026-08-29 14:55 UTC (permalink / raw)
  To: linux-acpi, linux-usb
  Cc: rafael, lenb, heikki.krogerus, mika.westerberg, gregkh, W_Armin,
	linux-kernel, Edward Blair

Some ASUS desktop boards describe the same ITE USB-C controller twice
in ACPI: as an MSFT8000 Resource Hub Proxy and as an ITE885x device at
the same I2C address. If the Resource Hub Proxy claims the address first,
the ITE device cannot be registered. Only the ITE node provides the
interrupt required by this transport.

Patch 1 handles MSFT8000 generically in the ACPI core. It keeps the ACPI
device present but prevents its SerialBus resources from being
instantiated as I2C, SPI or serdev clients.

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 in v3:

- Rework patch 1 as suggested by Armin: add MSFT8000 to
  ignore_serial_bus_ids[] in acpi_device_enumeration_by_parent().
- Keep the MSFT8000 ACPI device present while preventing its SerialBus
  resources from being instantiated as bus clients.
- Drop the ITE-specific ACPI x86 status override added in v2.
- Add a comment explaining why MSFT8000 is ignored during serial bus
  enumeration.
- Rebase onto current mainline and retest the series.
- Patch 2 is unchanged apart from the rebase.

Changes in v2:

- Move the v1 duplicate-device handling 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.

Changes in v1:

- Initial submission.

v2: https://lore.kernel.org/all/20260825201426.47030-1-edward.blair@gmail.com/
v1: https://lore.kernel.org/all/20260314013157.7181-1-edward.blair@gmail.com/

Edward Blair (2):
  ACPI: scan: do not enumerate MSFT8000 as a serial bus slave
  usb: typec: ucsi: add ITE885x I2C transport driver

 drivers/acpi/scan.c               |   5 +
 drivers/usb/typec/ucsi/Kconfig    |  11 +
 drivers/usb/typec/ucsi/Makefile   |   1 +
 drivers/usb/typec/ucsi/ucsi_ite.c | 395 ++++++++++++++++++++++++++++++
 4 files changed, 412 insertions(+)
 create mode 100644 drivers/usb/typec/ucsi/ucsi_ite.c


base-commit: 1b78070aaef63512688aebfbc82365ef9d6660f1
-- 
2.55.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-09-01 12:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-29 14:55 [PATCH v3 0/2] Add ITE885x UCSI I2C transport driver Edward Blair
2026-08-29 14:55 ` [PATCH v3 1/2] ACPI: scan: do not enumerate MSFT8000 as a serial bus slave Edward Blair
2026-08-29 21:00   ` Armin Wolf
2026-08-29 14:55 ` [PATCH v3 2/2] usb: typec: ucsi: add ITE885x I2C transport driver Edward Blair
2026-09-01 10:57   ` Heikki Krogerus
2026-09-01 12:03     ` Edward Blair

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox