# 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) state. 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
    - power-source

    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
        - power-source

  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]
