Message ID | 20250210225714.1073618-2-swboyd@chromium.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | arm64: dts: qcom: sc7180-trogdor: Wire up USB | expand |
On Mon, Feb 10, 2025 at 02:57:11PM -0800, Stephen Boyd wrote: > +$id: http://devicetree.org/schemas/usb/google,usb-pogo-keyboard.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Google USB Pogo Pin Keyboard > + > +maintainers: > + - Stephen Boyd <swboyd@chromium.org> > + > +description: > + ChromeOS devices with a detachable keyboard have a set of five pogo pins that > + are the typical four pins for USB (D+/D-, VBUS, GND) and an extra pin for > + base detection. The detachable keyboard is a USB device that connects to the > + four USB pogo pins. > + > +properties: > + compatible: > + const: google,usb-pogo-keyboard > + > + '#address-cells': If there is going to be any new version: please use consistent quotes, either ' or " > + const: 1 > + > + '#size-cells': > + const: 0 > + > + port: > + $ref: /schemas/graph.yaml#/properties/port > + description: Connection to USB2 port providing USB HS signals > + required: > + - endpoint > + > +patternProperties: > + "^keyboard@[0-9a-f]{1,2}$": What does the unit address represent here? Why this isn't just "keyboard"? One connector usually has only one keyboard, right? Maybe it is only to fulfill the usb-device schema? The reg is there to represent USB hub or controller port, which is not true here. I don't have any idea how to solve it. I assume you need the keyboard child, right? Best regards, Krzysztof
Quoting Krzysztof Kozlowski (2025-02-13 00:11:25) > On Mon, Feb 10, 2025 at 02:57:11PM -0800, Stephen Boyd wrote: > > + const: 1 > > + > > + '#size-cells': > > + const: 0 > > + > > + port: > > + $ref: /schemas/graph.yaml#/properties/port > > + description: Connection to USB2 port providing USB HS signals > > + required: > > + - endpoint > > + > > +patternProperties: > > + "^keyboard@[0-9a-f]{1,2}$": > > What does the unit address represent here? Why this isn't just > "keyboard"? One connector usually has only one keyboard, right? Yes one connector has one keyboard. > > Maybe it is only to fulfill the usb-device schema? The reg is there to > represent USB hub or controller port, which is not true here. Right, this is to fulfill the schema. These pins are connected to a USB hub or controller port, so we use that as the unit address. > > I don't have any idea how to solve it. I assume you need the keyboard > child, right? Yes we need the keyboard child so that we can make sure the keyboard that's expected is plugged in instead of some other one that doesn't pair with the device. We treat the detachable keyboard as 'not external' or 'expected' when it matches this VID/PID we have listed in DT so that we trust it slightly more than a standard USB keyboard that you could plug in to a USB connector.
diff --git a/Documentation/devicetree/bindings/usb/google,usb-pogo-keyboard.yaml b/Documentation/devicetree/bindings/usb/google,usb-pogo-keyboard.yaml new file mode 100644 index 000000000000..e1b3b2c1711e --- /dev/null +++ b/Documentation/devicetree/bindings/usb/google,usb-pogo-keyboard.yaml @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/usb/google,usb-pogo-keyboard.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Google USB Pogo Pin Keyboard + +maintainers: + - Stephen Boyd <swboyd@chromium.org> + +description: + ChromeOS devices with a detachable keyboard have a set of five pogo pins that + are the typical four pins for USB (D+/D-, VBUS, GND) and an extra pin for + base detection. The detachable keyboard is a USB device that connects to the + four USB pogo pins. + +properties: + compatible: + const: google,usb-pogo-keyboard + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + port: + $ref: /schemas/graph.yaml#/properties/port + description: Connection to USB2 port providing USB HS signals + required: + - endpoint + +patternProperties: + "^keyboard@[0-9a-f]{1,2}$": + description: The detachable keyboard + type: object + $ref: /schemas/usb/usb-device.yaml + unevaluatedProperties: false + +required: + - compatible + - '#address-cells' + - '#size-cells' + - port + +additionalProperties: false + +examples: + - | + connector { + compatible = "google,usb-pogo-keyboard"; + #address-cells = <1>; + #size-cells = <0>; + + keyboard@2 { + compatible = "usb18d1,504c"; + reg = <2>; + }; + + port { + pogo_connector_in: endpoint { + remote-endpoint = <&usb_hub_dsp3_hs>; + }; + }; + }; + +...
Describe the set of pins used to connect the detachable keyboard on detachable ChromeOS devices. The set of pins is called the "pogo pins". It's basically USB 2.0 with an extra pin for base detection. We expect to find a keyboard on the other side of this connector with a specific vid/pid, so describe that as a child device at the port of the usb device connected upstream. Cc: Rob Herring <robh@kernel.org> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> Cc: Conor Dooley <conor+dt@kernel.org> Cc: Benson Leung <bleung@chromium.org> Cc: <devicetree@vger.kernel.org> Cc: <chrome-platform@lists.linux.dev> Cc: Pin-yen Lin <treapking@chromium.org> Signed-off-by: Stephen Boyd <swboyd@chromium.org> --- .../usb/google,usb-pogo-keyboard.yaml | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Documentation/devicetree/bindings/usb/google,usb-pogo-keyboard.yaml