This series adds support for fully describing the USB/DP topology on ChromeOS Trogdor devices in DT. Trogdor devices have a single DP phy in the AP that is muxed to one of two usb type-c connectors depending on which port asserts HPD first to the EC. We'd like to know which port is connected to an external monitor to provide a better experience to the user about things like which type-c port is displaying DP or which type-c hub is acting up, etc. Describing the connection all the way from the source to the connector will allow us to do this. There will be some more work to do after this to wire up sysfs connections, but that work has already started or finished so it should be mostly minor changes to support DT there. This patch series is large, unfortunately, and is ordered in logical groups: gpio, USB, DRM, typec, and finally dts to put it all together. There's more that could be put in here, e.g. supporting ChromeOS Corsola devices, but I wanted to get something out there early instead of waiting to make this work with everything that exists today and posting it then. Onto the patches: First is the EC GPIO driver, which is dependency free and can be merged at any time. It's only needed to provide information about which port the EC is steering DP to, because the EC had a bug where it never told the AP about which port has HPD asserted or not. Second is the USB binding and hub patches. These are used to describe how the USB hub is wired up on all the Trogdor devices, and make the connect_type be something besides "unknown" on DT devices. ACPI has supported setting a proper connect_type for some time now. These can also be merged pretty much dependency free, except that the dt binding will be needed to avoid DT binding check failures. I don't think those checks are fatal though, so probably also fine to take this part independently. Third is the DRM bridge patches. These are used to implement lane assignment for DP altmode configurations through the drm_bridge code. The typec code will use this to tell the DP phy how many lanes of DP to drive and which lanes to drive out to the USB type-c connector. Adding support for lane assignment allows us to implement DP muxing as well, physically splitting the DP lanes on the DP phy so that hardware doesn't have to use an analog mux to steer two DP lanes to one or the other type-c port. These are a hard dependency for the typec code. Fourth is the typec patches, that ties together everything that comes before it in this series. The EC typec switch driver implements a drm_bridge that can signal HPD from the type-c connector through the bridge chain, mux the DP phy in software so that we don't have to use an analog mux, and implement orientation control for boards like Kukui that directly connect the DP phy to the type-c port, necessitating lane assignment to flip the lanes to match the cable orientation. Finally, the dts patches wire everything up to fully describe the USB/DT topology on Trogdor. This includes the USB hub, the EC gpios, the DP controller, and the external connectors like the usb-c and usb-a connectors. After this initial version I will probably split this series and send parts in pieces to more rapidly send new versions. Those parts will refer back to this version in the cover letter so we can all get the full context. I don't expect to merge this through one maintainer tree immediately, so I set the 'To' line to chrome-platform to reflect the overall target audience. Prashant Malani (1): platform/chrome: cros_ec_typec: Purge blocking switch devlinks Stephen Boyd (21): dt-bindings: gpio: Add binding for ChromeOS EC GPIO controller gpio: Add ChromeOS EC GPIO driver dt-bindings: usb: Add downstream facing ports to realtek binding usb: core: Set connect_type of ports based on DT node drm/atomic-helper: Introduce lane remapping support to bridges drm/bridge: Verify lane assignment is going to work during atomic_check device property: Add remote endpoint to devcon matcher platform/chrome: cros_typec_switch: Use read_poll_timeout helper platform/chrome: cros_typec_switch: Move port creation code to sub-function platform/chrome: cros_typec_switch: Use fwnode instead of ACPI APIs platform/chrome: cros_typec_switch: Use dev_err_probe() dt-bindings: chrome: Add google,cros-ec-typec-switch binding platform/chrome: cros_typec_switch: Add support for signaling HPD to drm_bridge platform/chrome: cros_typec_switch: Support DP muxing via DRM lane assignment platform/chrome: cros_typec_switch: Support orientation-switch platform/chrome: cros_typec_switch: Handle lack of HPD information dt-bindings: chrome: Add binding for ChromeOS Pogo pin connector arm64: dts: qcom: sc7180: quackingstick: Disable instead of delete usb_c1 arm64: dts: qcom: sc7180: pazquel: Add missing comment header arm64: dts: qcom: sc7180-trogdor: Make clamshell/detachable fragments arm64: dts: qcom: sc7180-trogdor: Wire up USB and DP to usb-c-connectors .../chrome/google,cros-ec-typec-switch.yaml | 365 ++++++++++++ .../chrome/google,pogo-pin-connector.yaml | 61 ++ .../bindings/gpio/google,cros-ec-gpio.yaml | 49 ++ .../bindings/mfd/google,cros-ec.yaml | 8 + .../bindings/usb/realtek,rts5411.yaml | 50 ++ .../dts/qcom/sc7180-trogdor-clamshell.dtsi | 30 + .../boot/dts/qcom/sc7180-trogdor-coachz.dtsi | 52 +- .../dts/qcom/sc7180-trogdor-detachable.dtsi | 25 + .../dts/qcom/sc7180-trogdor-homestar.dtsi | 54 +- .../dts/qcom/sc7180-trogdor-kingoftown.dts | 57 +- .../boot/dts/qcom/sc7180-trogdor-lazor.dtsi | 58 +- .../boot/dts/qcom/sc7180-trogdor-pazquel.dtsi | 59 +- .../boot/dts/qcom/sc7180-trogdor-pompom.dtsi | 46 +- .../qcom/sc7180-trogdor-quackingstick.dtsi | 46 +- .../arm64/boot/dts/qcom/sc7180-trogdor-r1.dts | 2 +- .../dts/qcom/sc7180-trogdor-wormdingler.dtsi | 52 +- arch/arm64/boot/dts/qcom/sc7180-trogdor.dtsi | 175 ++++++ drivers/base/property.c | 7 +- drivers/gpio/Kconfig | 10 + drivers/gpio/Makefile | 1 + drivers/gpio/gpio-cros-ec.c | 218 +++++++ drivers/gpu/drm/drm_atomic_state_helper.c | 2 + drivers/gpu/drm/drm_bridge.c | 50 ++ drivers/platform/chrome/Kconfig | 3 +- drivers/platform/chrome/cros_ec_typec.c | 10 + drivers/platform/chrome/cros_typec_switch.c | 555 +++++++++++++++--- drivers/usb/core/port.c | 37 ++ drivers/usb/roles/class.c | 4 +- drivers/usb/typec/mux.c | 8 + drivers/usb/typec/retimer.c | 7 +- include/drm/drm_atomic.h | 31 + include/drm/drm_bridge.h | 4 + include/linux/property.h | 5 +- 33 files changed, 2026 insertions(+), 115 deletions(-) create mode 100644 Documentation/devicetree/bindings/chrome/google,cros-ec-typec-switch.yaml create mode 100644 Documentation/devicetree/bindings/chrome/google,pogo-pin-connector.yaml create mode 100644 Documentation/devicetree/bindings/gpio/google,cros-ec-gpio.yaml create mode 100644 arch/arm64/boot/dts/qcom/sc7180-trogdor-clamshell.dtsi create mode 100644 arch/arm64/boot/dts/qcom/sc7180-trogdor-detachable.dtsi create mode 100644 drivers/gpio/gpio-cros-ec.c Cc: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx> Cc: Andrzej Hajda <andrzej.hajda@xxxxxxxxx> Cc: Andy Gross <agross@xxxxxxxxxx> Cc: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> Cc: Bartosz Golaszewski <brgl@xxxxxxxx> Cc: Benson Leung <bleung@xxxxxxxxxxxx> Cc: Bjorn Andersson <andersson@xxxxxxxxxx> Cc: <chrome-platform@xxxxxxxxxxxxxxx> Cc: Conor Dooley <conor+dt@xxxxxxxxxx> Cc: <cros-qcom-dts-watchers@xxxxxxxxxxxx> Cc: Daniel Scally <djrscally@xxxxxxxxx> Cc: Daniel Vetter <daniel@xxxxxxxx> Cc: David Airlie <airlied@xxxxxxxxx> Cc: <devicetree@xxxxxxxxxxxxxxx> Cc: <dri-devel@xxxxxxxxxxxxxxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: Guenter Roeck <groeck@xxxxxxxxxxxx> Cc: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> Cc: Ivan Orlov <ivan.orlov0322@xxxxxxxxx> Cc: Jernej Skrabec <jernej.skrabec@xxxxxxxxx> Cc: Jonas Karlman <jonas@xxxxxxxxx> Cc: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@xxxxxxxxxx> Cc: Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx> Cc: Lee Jones <lee@xxxxxxxxxx> Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> Cc: <linux-acpi@xxxxxxxxxxxxxxx> Cc: <linux-arm-msm@xxxxxxxxxxxxxxx> Cc: <linux-gpio@xxxxxxxxxxxxxxx> Cc: <linux-usb@xxxxxxxxxxxxxxx> Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Cc: maciek swiech <drmasquatch@xxxxxxxxxx> Cc: Matthias Kaehlcke <mka@xxxxxxxxxxxx> Cc: Maxime Ripard <mripard@xxxxxxxxxx> Cc: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx> Cc: Neil Armstrong <neil.armstrong@xxxxxxxxxx> Cc: Pin-yen Lin <treapking@xxxxxxxxxxxx> Cc: Prashant Malani <pmalani@xxxxxxxxxxxx> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx> Cc: Robert Foss <rfoss@xxxxxxxxxx> Cc: Rob Herring <robh+dt@xxxxxxxxxx> Cc: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> Cc: Thomas Zimmermann <tzimmermann@xxxxxxx> Cc: Tzung-Bi Shih <tzungbi@xxxxxxxxxx> Cc: Vinod Koul <vkoul@xxxxxxxxxx> base-commit: 0dd3ee31125508cd67f7e7172247f05b7fd1753a -- https://chromeos.dev