linux/Documentation/devicetree/bindings/phy/nvidia,tegra20-usb-phy.yaml
Rob Herring 27e4a85cf7 dt-bindings: Fix incomplete if/then/else schemas
A recent review highlighted that the json-schema meta-schema allows any
combination of if/then/else schema keywords even though if, then or else
by themselves makes little sense. With an added meta-schema to only
allow valid combinations, there's a handful of schemas found which need
fixing in a variety of ways. Incorrect indentation is the most common
issue.

Cc: Lars-Peter Clausen <lars@metafoo.de>
Cc: Michael Hennerich <Michael.Hennerich@analog.com>
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Olivier Moysan <olivier.moysan@foss.st.com>
Cc: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Georgi Djakov <djakov@kernel.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Kishon Vijay Abraham I <kishon@ti.com>
Cc: Vinod Koul <vkoul@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Dmitry Osipenko <digetx@gmail.com>
Cc: linux-iio@vger.kernel.org
Cc: alsa-devel@alsa-project.org
Cc: linux-mmc@vger.kernel.org
Cc: linux-tegra@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: linux-phy@lists.infradead.org
Signed-off-by: Rob Herring <robh@kernel.org>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Acked-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20220330145741.3044896-1-robh@kernel.org
2022-04-04 14:20:09 -05:00

374 lines
8.8 KiB
YAML

# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/phy/nvidia,tegra20-usb-phy.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: NVIDIA Tegra USB PHY
maintainers:
- Dmitry Osipenko <digetx@gmail.com>
- Jon Hunter <jonathanh@nvidia.com>
- Thierry Reding <thierry.reding@gmail.com>
properties:
compatible:
oneOf:
- items:
- enum:
- nvidia,tegra124-usb-phy
- nvidia,tegra114-usb-phy
- enum:
- nvidia,tegra30-usb-phy
- items:
- enum:
- nvidia,tegra30-usb-phy
- nvidia,tegra20-usb-phy
reg:
minItems: 1
maxItems: 2
description: |
PHY0 and PHY2 share power and ground, PHY0 contains shared registers.
PHY0 and PHY2 must specify two register sets, where the first set is
PHY own registers and the second set is the PHY0 registers.
clocks:
anyOf:
- items:
- description: Registers clock
- description: Main PHY clock
- items:
- description: Registers clock
- description: Main PHY clock
- description: ULPI PHY clock
- items:
- description: Registers clock
- description: Main PHY clock
- description: UTMI pads control registers clock
- items:
- description: Registers clock
- description: Main PHY clock
- description: UTMI timeout clock
- description: UTMI pads control registers clock
clock-names:
oneOf:
- items:
- const: reg
- const: pll_u
- items:
- const: reg
- const: pll_u
- const: ulpi-link
- items:
- const: reg
- const: pll_u
- const: utmi-pads
- items:
- const: reg
- const: pll_u
- const: timer
- const: utmi-pads
interrupts:
maxItems: 1
resets:
oneOf:
- maxItems: 1
description: PHY reset
- items:
- description: PHY reset
- description: UTMI pads reset
reset-names:
oneOf:
- const: usb
- items:
- const: usb
- const: utmi-pads
"#phy-cells":
const: 0
phy_type:
$ref: /schemas/types.yaml#/definitions/string
enum: [utmi, ulpi, hsic]
dr_mode:
$ref: /schemas/types.yaml#/definitions/string
enum: [host, peripheral, otg]
default: host
vbus-supply:
description: Regulator controlling USB VBUS.
nvidia,has-legacy-mode:
description: |
Indicates whether this controller can operate in legacy mode
(as APX 2500 / 2600). In legacy mode some registers are accessed
through the APB_MISC base address instead of the USB controller.
type: boolean
nvidia,is-wired:
description: |
Indicates whether we can do certain kind of power optimizations for
the devices that are always connected. e.g. modem.
type: boolean
nvidia,has-utmi-pad-registers:
description: |
Indicates whether this controller contains the UTMI pad control
registers common to all USB controllers.
type: boolean
nvidia,hssync-start-delay:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: |
Number of 480 MHz clock cycles to wait before start of sync launches
RxActive.
nvidia,elastic-limit:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: Variable FIFO Depth of elastic input store.
nvidia,idle-wait-delay:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: |
Number of 480 MHz clock cycles of idle to wait before declare IDLE.
nvidia,term-range-adj:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description: Range adjustment on terminations.
nvidia,xcvr-setup:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 127
description: Input of XCVR cell, HS driver output control.
nvidia,xcvr-setup-use-fuses:
description: Indicates that the value is read from the on-chip fuses.
type: boolean
nvidia,xcvr-lsfslew:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 3
description: LS falling slew rate control.
nvidia,xcvr-lsrslew:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 3
description: LS rising slew rate control.
nvidia,xcvr-hsslew:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 511
description: HS slew rate control.
nvidia,hssquelch-level:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 3
description: HS squelch detector level.
nvidia,hsdiscon-level:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 7
description: HS disconnect detector level.
nvidia,phy-reset-gpio:
maxItems: 1
description: GPIO used to reset the PHY.
nvidia,pmc:
$ref: /schemas/types.yaml#/definitions/phandle-array
items:
- items:
- description: Phandle to Power Management controller.
- description: USB controller ID.
description:
Phandle to Power Management controller.
required:
- compatible
- reg
- clocks
- clock-names
- resets
- reset-names
- "#phy-cells"
- phy_type
additionalProperties: false
allOf:
- if:
properties:
phy_type:
const: utmi
then:
properties:
reg:
minItems: 2
maxItems: 2
resets:
maxItems: 2
reset-names:
maxItems: 2
required:
- nvidia,hssync-start-delay
- nvidia,elastic-limit
- nvidia,idle-wait-delay
- nvidia,term-range-adj
- nvidia,xcvr-lsfslew
- nvidia,xcvr-lsrslew
anyOf:
- required: ["nvidia,xcvr-setup"]
- required: ["nvidia,xcvr-setup-use-fuses"]
if:
properties:
compatible:
contains:
const: nvidia,tegra30-usb-phy
then:
properties:
clocks:
maxItems: 3
clock-names:
items:
- const: reg
- const: pll_u
- const: utmi-pads
required:
- nvidia,xcvr-hsslew
- nvidia,hssquelch-level
- nvidia,hsdiscon-level
else:
properties:
clocks:
maxItems: 4
clock-names:
items:
- const: reg
- const: pll_u
- const: timer
- const: utmi-pads
- if:
properties:
phy_type:
const: ulpi
then:
properties:
reg:
minItems: 1
maxItems: 1
clocks:
minItems: 2
maxItems: 3
clock-names:
minItems: 2
maxItems: 3
oneOf:
- items:
- const: reg
- const: pll_u
- items:
- const: reg
- const: pll_u
- const: ulpi-link
resets:
minItems: 1
maxItems: 2
reset-names:
minItems: 1
maxItems: 2
examples:
- |
#include <dt-bindings/clock/tegra124-car.h>
usb-phy@7d008000 {
compatible = "nvidia,tegra124-usb-phy", "nvidia,tegra30-usb-phy";
reg = <0x7d008000 0x4000>,
<0x7d000000 0x4000>;
interrupts = <0 97 4>;
phy_type = "utmi";
clocks = <&tegra_car TEGRA124_CLK_USB3>,
<&tegra_car TEGRA124_CLK_PLL_U>,
<&tegra_car TEGRA124_CLK_USBD>;
clock-names = "reg", "pll_u", "utmi-pads";
resets = <&tegra_car 59>, <&tegra_car 22>;
reset-names = "usb", "utmi-pads";
#phy-cells = <0>;
nvidia,hssync-start-delay = <0>;
nvidia,idle-wait-delay = <17>;
nvidia,elastic-limit = <16>;
nvidia,term-range-adj = <6>;
nvidia,xcvr-setup = <9>;
nvidia,xcvr-lsfslew = <0>;
nvidia,xcvr-lsrslew = <3>;
nvidia,hssquelch-level = <2>;
nvidia,hsdiscon-level = <5>;
nvidia,xcvr-hsslew = <12>;
nvidia,pmc = <&tegra_pmc 2>;
};
- |
#include <dt-bindings/clock/tegra20-car.h>
usb-phy@c5004000 {
compatible = "nvidia,tegra20-usb-phy";
reg = <0xc5004000 0x4000>;
interrupts = <0 21 4>;
phy_type = "ulpi";
clocks = <&tegra_car TEGRA20_CLK_USB2>,
<&tegra_car TEGRA20_CLK_PLL_U>,
<&tegra_car TEGRA20_CLK_CDEV2>;
clock-names = "reg", "pll_u", "ulpi-link";
resets = <&tegra_car 58>, <&tegra_car 22>;
reset-names = "usb", "utmi-pads";
#phy-cells = <0>;
nvidia,pmc = <&tegra_pmc 1>;
};