# 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: base.yaml

properties:
    reg:
      required: true

    swj-cfg:
        type: string
        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

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

    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/zephyr/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:
          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).
