# Copyright (c) 2022 Nuvoton Technology Corporation.
# SPDX-License-Identifier: Apache-2.0

description: |
  The Nuvoton pin controller is a singleton node responsible for controlling
  pin function selection and pin properties. For example, you can use these
  nodes to select peripheral pin functions.

  Here is a list of supported standard pin properties:
    - bias-pull-down: Enable pull-down resistor.
    - bias-pull-up: Enable pull-up resistor.
    - drive-open-drain: Output driver is open-drain.

  Custom pin properties for npcx series are available also:
    - pinmux-locked: Lock pinmux configuration for peripheral device
    - pinmux-gpio: Inverse pinmux back to gpio
    - psl-in-mode: Select the assertion detection mode of PSL input
    - psl-in-pol: Select the assertion detection polarity of PSL input

  An example for NPCX7 family, include the chip level pinctrl DTSI file in the
  board level DTS:

    #include <nuvoton/npcx/npcx7/npcx7-pinctrl.dtsi>

  We want to use the I2C0_0 port of the NPCX7M6FB controller and enable the
  internal 3.3V pull-up if its i2c frequency won't exceed 400kHz.

  To change a pin's pinctrl default properties, add a reference to the
  pin in the board's DTS file and set the properties as below:

    &i2c0_0_sda_scl_gpb4_b5 {
      bias-pull-up; /* Enable internal pull-up for i2c0_0 */
      pinmux-locked; /* Lock pinmuxing */
    };

    &i2c0_0 {
      pinctrl-0 = <&i2c0_0_sda_scl_gpb4_b5>;
      pinctrl-names = "default";
    }

compatible: "nuvoton,npcx-pinctrl"

include: base.yaml

child-binding:
  description: |
    NPCX pin controller pin configuration nodes

  include:
    - name: pincfg-node.yaml
      property-allowlist:
        - bias-pull-down
        - bias-pull-up
        - drive-open-drain

  properties:
    pinmux:
      type: phandle
      description: Configurations of pinmux selection
    dev-ctl:
      type: array
      description: Configurations of device control such as tri-state, io type and so on.
    periph-pupd:
      type: array
      description: |
        A map to PUPD_ENn register/bit that enable pull-up/down of NPCX peripheral devices.
        Please don't overwrite this property in the board-level DT driver.
    psl-offset:
      type: int
      description: |
        Offset to PSL_CTS register that is used for PSL input's status and detection mode.
        Please don't overwrite this property in the board-level DT driver.
    psl-polarity:
      type: phandle
      description: |
        A map to DEVALTn that configures detection polarity of PSL input pads.
        Please don't overwrite this property in the board-level DT driver.
    pinmux-locked:
      type: boolean
      description: Lock pinmux selection
    pinmux-gpio:
      type: boolean
      description: Inverse pinmux selection to GPIO
    psl-in-mode:
      type: string
      description: |
        The assertion detection mode of PSL input selection
        - "level": Select the detection mode to level detection
        - "edge": Select the detection mode to edge detection
      enum:
        - "level"
        - "edge"
    psl-in-pol:
      type: string
      description: |
        The assertion detection polarity of PSL input selection
        - "low-falling": Select the detection polarity to low/falling
        - "high-rising": Select the detection polarity to high/rising
      enum:
        - "low-falling"
        - "high-rising"
