# Copyright (c) 2021 IoT.bzh
# SPDX-License-Identifier: Apache-2.0

description: |
    Renesas R-Car Pin Function Controller node
    This binding gives a base representation of the R-Car pins configuration.
    The R-Car pin controller is a singleton node responsible for controlling
    pin function selection and pin properties. For example, you can use this
    node to route CAN0 TX A to pin 'RD', and enable pull-up resistor as well
    as driving ability.

    The node has the 'pfc' node label set in your SoC's devicetree, so you can
    modify it like this:

    &pfc {
         /* your modifications go here */
    };

    All device pin configurations should be placed in child nodes of the
    'pfc' node, as shown in this example:
      /* You can put this in places like a board-pinctrl.dtsi file in
       * your board directory, or a devicetree overlay in your application.
       */

      /* include pre-defined pins and functions for the SoC used by the board */
      #include <dt-bindings/pinctrl/renesas/pinctrl-r8a77951.h>

      &pfc {
        /* configuration for can0 data a tx default state */
        can0_data_a_tx_default: can0_data_a_tx_default {
          /* configure PIN_RD as FUNC_CAN0_TX_A */
          pin = <PIN_RD FUNC_CAN0_TX_A>;
        };
        /* configuration for can0 data a rx default state */
        can0_data_a_rx_default: can0_data_a_rx_default {
          /* configure PIN_RD_WR as FUNC_CAN0_RX_A */
          pin = <PIN_RD_WR FUNC_CAN0_RX_A>;
        };
      };

    The 'can0_data_a_tx_default' child node encodes the pin configurations
    for a particular state of a device; in this case, the default
    (that is, active) sate. You would specify the low-power configuration for
    the same device in a separate child node.

    A pin configuration can also specify pin properties such as the
    'bias-pull-up' property. Here is a list of supported standard pin
    properties:

    - bias-disable
    - bias-pull-down
    - bias-pull-up
    - drive-strength

    To link pin configurations with a device, use a pinctrl-N property for some
    number N, like this example you could place in your board's DTS file:

      #include "board-pinctrl.dtsi"

      &can0 {
        pinctrl-0 = <&can0_data_a_tx_default &can0_data_a_rx_default>;
        pinctrl-1 = <&can0_data_a_tx_sleep &can0_data_a_rx_sleep>;
        pinctrl-names = "default", "sleep";
      };

compatible: "renesas,rcar-pfc"

include: base.yaml

properties:
  reg:
    required: true

child-binding:
  description: |
     This binding gives a base representation of the R-Car pins configuration.

  include:
    - name: pincfg-node.yaml
      property-allowlist:
        - bias-disable
        - bias-pull-down
        - bias-pull-up
        - drive-strength

  properties:
    pin:
      type: array
      required: true
      description: |
        The array is expected to have up to two elements. The first element is
        the pin the second optional element is the pin function.
    drive-strength:
      enum: [3, 6, 9, 12, 15, 18, 21, 24]
