Add bindings for the GE SUNH add-on connector. This is a physical, hot-pluggable connector that allows to attach and detach at runtime an add-on adding peripherals on non-discoverable busses. Signed-off-by: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx> --- NOTE: the second and third examples fail 'make dt_binding_check' because they are example of DT overlay code -- I'm not aware of a way to validate overlay examples as of now This patch is new in v2. --- .../connector/ge,sunh-addon-connector.yaml | 197 +++++++++++++++++++++ MAINTAINERS | 5 + 2 files changed, 202 insertions(+) diff --git a/Documentation/devicetree/bindings/connector/ge,sunh-addon-connector.yaml b/Documentation/devicetree/bindings/connector/ge,sunh-addon-connector.yaml new file mode 100644 index 000000000000..c7ac62e5f2c9 --- /dev/null +++ b/Documentation/devicetree/bindings/connector/ge,sunh-addon-connector.yaml @@ -0,0 +1,197 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/connector/ge,sunh-addon-connector.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: GE SUNH hotplug add-on connector + +maintainers: + - Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx> + +description: + Represent the physical connector present on GE SUNH devices that allows + to attach and detach at runtime an add-on adding peripherals on + non-discoverable busses. + + This connector has status GPIOs to notify the connection status to the + CPU and a reset GPIO to allow the CPU to reset all the peripherals on the + add-on. It also has a 4-lane MIPI DSI bus. + + Add-on removal can happen at any moment under user control and without + prior notice to the CPU, making all of its components not usable + anymore. Later on, the same or a different add-on model can be connected. + +properties: + compatible: + const: ge,sunh-addon-connector + + reset-gpios: + description: An output GPIO to reset the peripherals on the add-on. + maxItems: 1 + + plugged-gpios: + description: An input GPIO that is asserted if and only if an add-on is + physically connected. + maxItems: 1 + + powergood-gpios: + description: An input GPIO that is asserted if and only if power rails + on the add-on are stable. + maxItems: 1 + + ports: + $ref: /schemas/graph.yaml#/properties/ports + + description: OF graph bindings modeling the MIPI DSI bus across the + connector. The connector splits the video pipeline in a fixed part + and a removable part. + + The fixed part of the video pipeline includes all components up to + the display controller and 0 or more bridges. The removable part + includes any bridges and any other components up to the panel. + + properties: + port@0: + $ref: /schemas/graph.yaml#/properties/port + description: The MIPI DSI bus line from the CPU to the connector. + The remote-endpoint sub-node must point to the last non-removable + component of the video pipeline. + + port@1: + $ref: /schemas/graph.yaml#/properties/port + + description: The MIPI DSI bus line from the connector to the + add-on. The remote-endpoint sub-node must point to the first + add-on component of the video pipeline. As it describes the + hot-pluggable hardware, the endpoint node cannot be filled until + an add-on is detected, so this needs to be done by a device tree + overlay at runtime. + + required: + - port@0 + - port@1 + +required: + - compatible + +unevaluatedProperties: false + +examples: + # Main DTS describing the "main" board up to the connector + - | + / { + #include <dt-bindings/gpio/gpio.h> + + addon_connector: addon-connector { + compatible = "ge,sunh-addon-connector"; + reset-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; + plugged-gpios = <&gpio1 2 GPIO_ACTIVE_LOW>; + powergood-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + hotplug_conn_dsi_in: endpoint { + remote-endpoint = <&previous_bridge_out>; + }; + }; + + port@1 { + reg = <1>; + + hotplug_conn_dsi_out: endpoint { + // remote-endpoint to be added by overlay + }; + }; + }; + }; + }; + + # "base" overlay describing the common components on every add-on that + # are required to read the model ID + - | + &i2c1 { + #address-cells = <1>; + #size-cells = <0>; + + eeprom@50 { + compatible = "atmel,24c64"; + reg = <0x50>; + + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + addon_model_id: addon-model-id@400 { + reg = <0x400 0x1>; + }; + }; + }; + }; + + &addon_connector { + nvmem-cells = <&addon_model_id>; + nvmem-cell-names = "id"; + }; + + # Add-on-specific overlay describing all add-on components not in the + # "base" overlay + - | + &hotplug_conn_dsi_out { + remote-endpoint = <&addon_bridge_in>; + }; + + &i2c1 { + #address-cells = <1>; + #size-cells = <0>; + + dsi-lvds-bridge@42 { + compatible = "some-video-bridge"; + reg = <0x42>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + addon_bridge_in: endpoint { + remote-endpoint = <&hotplug_conn_dsi_out>; + data-lanes = <1 2 3 4>; + }; + }; + + port@1 { + reg = <1>; + + addon_bridge_out: endpoint { + remote-endpoint = <&panel_in>; + }; + }; + }; + }; + }; + + &{/} + { + panel { + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0{ + reg = <0>; + + panel_in: endpoint { + remote-endpoint = <&addon_bridge_out>; + }; + }; + }; + }; diff --git a/MAINTAINERS b/MAINTAINERS index ec0284125e8f..4955501217eb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9897,6 +9897,11 @@ S: Maintained F: Documentation/devicetree/bindings/iio/pressure/honeywell,mprls0025pa.yaml F: drivers/iio/pressure/mprls0025pa* +HOTPLUG CONNECTOR FOR GE SUNH ADDONS +M: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx> +S: Maintained +F: Documentation/devicetree/bindings/connector/ge,sunh-addon-connector.yaml + HP BIOSCFG DRIVER M: Jorge Lopez <jorge.lopez2@xxxxxx> L: platform-driver-x86@xxxxxxxxxxxxxxx -- 2.34.1