# Copyright 2022, 2024 NXP
# SPDX-License-Identifier: Apache-2.0

description: |
  NXP S32 pinctrl node for S32Z/E SoCs.

  The NXP S32 pin controller is a singleton node responsible for controlling
  the pin function selection and pin properties. This node, labeled 'pinctrl' in
  the SoC's devicetree, will define pin configurations in pin groups. Each group
  within the pin configuration defines the pin configuration for a peripheral,
  and each numbered subgroup in the pin group defines all the pins for that
  peripheral with the same configuration properties. The 'pinmux' property in
  a group selects the pins to be configured, and the remaining properties set
  configuration values for those pins.

  For example, to configure the pinmux for UART0, modify the 'pinctrl' from your
  board or application devicetree overlay as follows:

    /* Include the SoC package header containing the predefined pins definitions */
    #include <nxp/s32/S32Z27-BGA594-pinctrl.h>

    &pinctrl {
      uart0_default: uart0_default {
        group1 {
          pinmux = <PB10_LIN_0_TX>;
          output-enable;
        };
        group2 {
          pinmux = <PB11_LIN_0_RX>;
          input-enable;
        };
      };
    };

  The 'uart0_default' node contains the pin configurations for a particular state
  of a device. The 'default' state is the active state. Other states for the same
  device can be specified in separate child nodes of 'pinctrl'.

  In addition to 'pinmux' property, each group can contain other properties such as
  'bias-pull-up' or 'slew-rate' that will be applied to all the pins defined in
  'pinmux' array. To enable the input buffer use 'input-enable' and to enable the
  output buffer use 'output-enable'.

  To link the pin configurations with UART0 device, use pinctrl-N property in the
  device node, where 'N' is the zero-based state index (0 is the default state).
  Following previous example:

    &uart0 {
      pinctrl-0 = <&uart0_default>;
      pinctrl-names = "default";
      status = "okay";
    };

  If only the required properties are supplied, the pin configuration register
  will be assigned the following reset values:
    - input and output buffers disabled
    - internal pull not enabled
    - open drain disabled
    - slew rate 4 (see description in property below).
    - termination resistor disabled (affect LVDS pads only).
    - current reference control disabled (affect LVDS pads only).
    - Rx current boost disabled  (affect LVDS pads only).

  Additionally:
  - Safe Mode is always kept as reset value (disabled).
  - Receiver Select is always kept as reset value (enables the differential vref based receiver).

compatible: "nxp,s32ze-pinctrl"

include: base.yaml

child-binding:
  description: NXP S32 pin controller pin group.
  child-binding:
    description: NXP S32 pin controller pin configuration node.

    include:
      - name: pincfg-node.yaml
        property-allowlist:
          - bias-pull-down
          - bias-pull-up
          - drive-open-drain
          - slew-rate
          - input-enable
          - output-enable

    properties:
      pinmux:
        required: true
        type: array
        description: |
          An array of pins sharing the same group properties. The pins must be
          defined using the macros from the SoC package header. These macros
          encode all the pin muxing information in a 32-bit value.

      slew-rate:
        enum: [0, 4, 5, 6, 7]
        default: 4
        description: |
          Slew rate control. Reset value is 4.
          - For 3.3 V / 1.8 V FAST pads:
            0: FMAX_3318 = 208 MHz (at 1.8 V), 166 MHz (at 3.3 V)
            4: FMAX_3318 = 166 MHz (at 1.8 V), 150 MHz (at 3.3 V)
            5: FMAX_3318 = 150 MHz (at 1.8 V), 133 MHz (at 3.3 V)
            6: FMAX_3318 = 133 MHz (at 1.8 V), 100 MHz (at 3.3 V)
            7: FMAX_3318 = 100 MHz (at 1.8 V), 83 MHz (at 3.3 V)
          - For 1.8 V GPIO pads:
            0: FMAX_18 = 208 MHz
            4: FMAX_18 = 150 MHz
            5: FMAX_18 = 133 MHz
            6: FMAX_18 = 100 MHz
            7: FMAX_18 = 50 MHz
          - For 3.3 V GPIO pads:
            0: Reserved
            4: FMAX_33 = 50 MHz
            5: FMAX_33 = 50 MHz
            6: FMAX_33 = 50 MHz
            7: FMAX_33 = 1 MHz

      nxp,current-reference-control:
        type: boolean
        description: |
          This configuration applies the current reference control to
          the associated pin. It is only applicable to LVDS pads and
          has no effect on other types of pads

      nxp,termination-resistor:
        type: boolean
        description: |
          This configuration applies the termination resistor to
          the associated pin. It is only applicable to LVDS pads and
          has no effect on other types of pads

      nxp,rx-current-boost:
        type: boolean
        description: |
          RX LVDS Current Boost
          Boosts RX IO current. It is only applicable to LVDS pads and
          has no effect on other types of pads
          0: Current reference is 200 μA; supports data rate up to 320 Mbaud
          1: Current reference is 1 mA; supports data rate up to 420 Mbaud
