# Copyright (c) 2020 Linaro Limited
# SPDX-License-Identifier: Apache-2.0

description: |
    STM32F1 Pin controller Node
    Based on pincfg-node.yaml binding.

    Note: `bias-disable` and `drive-push-pull` are default pin configurations.
           They will be applied in case no `bias-foo` or `driver-bar` properties
           are set.

compatible: "st,stm32f1-pinctrl"

include:
    - name: base.yaml
    - name: pincfg-node.yaml
      child-binding:
        property-allowlist:
          - bias-disable
          - bias-pull-down
          - bias-pull-up
          - drive-push-pull
          - drive-open-drain
          - output-low
          - output-high

properties:
    reg:
      required: true

    swj-cfg:
        type: string
        required: false
        default: "full" # reset state
        enum:
          - "full"
          - "no-njtrst"
          - "jtag-disable"
          - "disable"
        description: |
          Configures number of pins assigned to the SWJ debug port.

          * full         - Full SWJ (JTAG-DP + SW-DP).
          * no-njtrst    - Full SWJ (JTAG-DP + SW-DP) but without NJTRST.
                           Releases: PB4.
          * jtag-disable - JTAG-DP Disabled and SW-DP Enabled.
                           Releases: PA15 PB3 PB4.
          * disable      - JTAG-DP Disabled and SW-DP Disabled.
                           Releases: PA13 PA14 PA15 PB3 PB4.

          If absent, then Full SWJ (JTAG-DP + SW-DP) is used (reset state).

child-binding:
    description: |
        This binding gives a base representation of the STM32F1 pins
        configration

    properties:
        pinmux:
          required: true
          type: int
          description: |
            Adapted from https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
            Integer array, represents gpio pin number and mux setting.
            These defines are calculated as: ((port * 16 + line) << 8) | (function << 6) | remap)
            With:
            - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
            - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
            - function: The configuration mode, can be:
            * 0 : Alternate function output
            * 1 : Input
            * 2 : Analog
            * 3 : GPIO output
            In case selected pin function is GPIO output, pin is statically configured as
            a plain output GPIO, which configuration can be set by adding 'ouptut-low' or
            'output-high' properties to the pinctrl configuration. Default is output-low.
            - remap: The pin remapping configuration. It allows to assign the pin
            function to a different peripheral. Remain configuration can be:
            * 0 : No remap
            * 1 : Partial remap 1
            * 2 : Partial remap 2
            * 3 : Partial remap 3
            * 4 : Full remap
            To simplify the usage, macro is available to generate "pinmux" field.
            This macro is available here:
              -include/dt-bindings/pinctrl/stm32f1-pinctrl.h
            Some examples of macro usage:
               GPIO A9 set as alernate with no remap
            ... {
                     pinmux = <STM32F1_PINMUX('A', 9, ALTERNATE, REMAP_NO)>;
            };
               GPIO A9 set as alernate with full remap
            ... {
                     pinmux = <STM32F1_PINMUX('A', 9, ALTERNATE, REMAP_FULL)>;
            };
               GPIO A9 set as input
            ... {
                     pinmux = <STM32F1_PINMUX('A', 9, GPIO_IN, REMAP_NO)>;
            };
               GPIO A9 set as output-high
            ... {
                     pinmux = <STM32F1_PINMUX('A', 9, GPIO_OUT, REMAP_NO)>;
                     output-high;
            };

        slew-rate:
          required: false
          type: string
          default: "max-speed-10mhz"
          enum:
          - "max-speed-10mhz"       # Default
          - "max-speed-2mhz"
          - "max-speed-50mhz"
          description: |
            Pin output mode, maximum achievable speed. Only applies to
            output mode (alternate).
