[RFC net-next v2 0/6] ptp: ocp: Add R4006 and V9 I2C peripheral support

Ahmad Byagowi <[email protected]> Mon, 3 Aug 2026 13:50:05 -0700
Newsgroups org.kernel.vger.linux-leds,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-hardening,org.kernel.vger.linux-i2c,org.kernel.vger.linux-kernel,org.kernel.vger.netdev
Message-ID <[email protected]>
R4006 and Time Card V9 place an I2C mux behind the FPGA XIIC
controller. The current ptp_ocp driver exposes the root adapter but does
not describe the peripherals behind the mux.

This series adds the generic infrastructure and board profiles needed
for existing subsystem drivers to bind to those peripherals:

  1. A binding for the Lumissil IS32FL3207 18-channel LED controller.
  2. An IS32FL3207 LED class driver with individual and multicolor LED
     support and per-output current limits.
  3. Software-node propagation from an I2C mux to its channel adapters.
  4. Validation of the fixed-width EEPROM board identifier.
  5. An R4006 profile for its sensors and GNSS/SMA LEDs.
  6. A Time Card V9 profile for its BME280, BNO055, GNSS1, GNSS2, and
     four SMA LEDs.

Profile selection is deliberately fail-closed. PCI IDs are shared by
multiple PCB revisions, so only a validated EEPROM board identifier may
select a topology. Erased, malformed, and unknown identifiers leave the
downstream devices unconfigured. R4006 identifiers are matched by their
R4006 prefix, while Time Card V9 requires the exact "TIMECARD-V9"
identifier.

The R4006 BNO08x is intentionally not instantiated because no upstream
driver exists for it. LED status policy remains in userspace; this
series exposes standard multicolor LED class devices.

The EEPROM validation patch fixes a pre-existing out-of-bounds string
read and carries Fixes and stable trailers. It is included because safe
board identification is a prerequisite for the profiles. That patch can
travel separately through the net tree if preferred.

Validation performed:

  - dt_binding_check, including YAML lint and example compilation
  - x86-64 and arm64 W=1 builds of the modified driver objects
  - strict checkpatch and git diff --check
  - R4006 addresses and LED routing exercised with the downstream
    implementation
  - Time Card V9 BME280, BNO055, mux, and LED-controller addresses
    verified directly on hardware

The complete upstream series has not yet been boot-tested on an R4006.
The V9 test card has an erased EEPROM and was intentionally left
unchanged, so automatic V9 profile selection was not exercised. Its LED
controller responded, but the outputs reported open-load status on that
board, so physical LED illumination could not be validated. The test
distribution also lacked the BME280 and BNO055 modules.

Questions for this RFC:

  - Should IS32FL3207 remain a standalone multicolor driver, or be
    integrated into the existing is31fl32xx driver?
  - Is assigning software-node channel children in the generic I2C mux
    core the preferred representation for PCI-card mux topologies?
  - Should net-next carry the complete series after DT, LED, and I2C
    review, or should the prerequisite patches travel separately?

Changes since RFC v1:

  - Correct the documented PWM resolution and support standard LED
    startup and retained-shutdown state properties.
  - Use a named I2C ID initializer and fix MAINTAINERS ordering.
  - Move EEPROM validation into a separate prerequisite fix.
  - Select profiles only from validated EEPROM identifiers.
  - Rework the R4006 implementation into reusable board profiles.
  - Bound asynchronous retries and serialize topology population with
    controller and mux driver bind/unbind.
  - Avoid repeated managed allocations during retry.
  - Add the Time Card V9 profile, including the second GNSS LED.
  - Leave the I2C mux software-node propagation patch unchanged.

RFC v1:
  https://lore.kernel.org/r/[email protected]/

Ahmad Byagowi (6):
  dt-bindings: leds: Add IS32FL3207 controller
  leds: rgb: Add IS32FL3207 controller driver
  i2c: mux: Propagate software nodes to channel adapters
  ptp: ocp: Validate EEPROM board IDs
  ptp: ocp: Add R4006 I2C peripheral topology
  ptp: ocp: Add Time Card V9 I2C peripheral topology

 .../bindings/leds/issi,is32fl3207.yaml        | 208 +++++
 MAINTAINERS                                   |   7 +
 drivers/i2c/i2c-mux.c                         |  55 ++
 drivers/leds/rgb/Kconfig                      |  11 +
 drivers/leds/rgb/Makefile                     |   1 +
 drivers/leds/rgb/leds-is32fl3207.c            | 580 ++++++++++++
 drivers/ptp/ptp_ocp.c                         | 871 +++++++++++++++++-
 7 files changed, 1687 insertions(+), 46 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/leds/issi,is32fl3207.yaml
 create mode 100644 drivers/leds/rgb/leds-is32fl3207.c


base-commit: 69963a0678a347d57c4ac8b16939dba216eb95ce
-- 
2.50.1 (Apple Git-155)