# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/pinctrl/brcm,bcm6318-pinctrl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom BCM6318 pin controller

maintainers:
  - Álvaro Fernández Rojas <noltari@gmail.com>
  - Jonas Gorski <jonas.gorski@gmail.com>

description:
  Bindings for Broadcom's BCM6318 memory-mapped pin controller.

properties:
  compatible:
    const: brcm,bcm6318-pinctrl

  reg:
    maxItems: 2

patternProperties:
  '-pins$':
    type: object
    $ref: pinmux-node.yaml#

    properties:
      function:
        enum: [ ephy0_spd_led, ephy1_spd_led, ephy2_spd_led, ephy3_spd_led,
                ephy0_act_led, ephy1_act_led, ephy2_act_led, ephy3_act_led,
                serial_led_data, serial_led_clk, inet_act_led, inet_fail_led,
                dsl_led, post_fail_led, wlan_wps_led, usb_pwron,
                usb_device_led, usb_active ]

      pins:
        enum: [ gpio0, gpio1, gpio2, gpio3, gpio4, gpio5, gpio6, gpio7,
                gpio8, gpio9, gpio10, gpio11, gpio12, gpio13, gpio40 ]

allOf:
  - $ref: pinctrl.yaml#

required:
  - compatible
  - reg

additionalProperties: false

examples:
  - |
    pinctrl@18 {
      compatible = "brcm,bcm6318-pinctrl";
      reg = <0x18 0x10>, <0x54 0x18>;

      pinctrl_ephy0_spd_led: ephy0_spd_led-pins {
        function = "ephy0_spd_led";
        pins = "gpio0";
      };

      pinctrl_ephy1_spd_led: ephy1_spd_led-pins {
        function = "ephy1_spd_led";
        pins = "gpio1";
      };

      pinctrl_ephy2_spd_led: ephy2_spd_led-pins {
        function = "ephy2_spd_led";
        pins = "gpio2";
      };

      pinctrl_ephy3_spd_led: ephy3_spd_led-pins {
        function = "ephy3_spd_led";
        pins = "gpio3";
      };

      pinctrl_ephy0_act_led: ephy0_act_led-pins {
        function = "ephy0_act_led";
        pins = "gpio4";
      };

      pinctrl_ephy1_act_led: ephy1_act_led-pins {
        function = "ephy1_act_led";
        pins = "gpio5";
      };

      pinctrl_ephy2_act_led: ephy2_act_led-pins {
        function = "ephy2_act_led";
        pins = "gpio6";
      };

      pinctrl_ephy3_act_led: ephy3_act_led-pins {
        function = "ephy3_act_led";
        pins = "gpio7";
      };

      pinctrl_serial_led: serial_led-pins {
        pinctrl_serial_led_data: serial_led_data-pins {
          function = "serial_led_data";
          pins = "gpio6";
        };

        pinctrl_serial_led_clk: serial_led_clk-pins {
          function = "serial_led_clk";
          pins = "gpio7";
        };
      };

      pinctrl_inet_act_led: inet_act_led-pins {
        function = "inet_act_led";
        pins = "gpio8";
      };

      pinctrl_inet_fail_led: inet_fail_led-pins {
        function = "inet_fail_led";
        pins = "gpio9";
      };

      pinctrl_dsl_led: dsl_led-pins {
        function = "dsl_led";
        pins = "gpio10";
      };

      pinctrl_post_fail_led: post_fail_led-pins {
        function = "post_fail_led";
        pins = "gpio11";
      };

      pinctrl_wlan_wps_led: wlan_wps_led-pins {
        function = "wlan_wps_led";
        pins = "gpio12";
      };

      pinctrl_usb_pwron: usb_pwron-pins {
        function = "usb_pwron";
        pins = "gpio13";
      };

      pinctrl_usb_device_led: usb_device_led-pins {
        function = "usb_device_led";
        pins = "gpio13";
      };

      pinctrl_usb_active: usb_active-pins {
        function = "usb_active";
        pins = "gpio40";
      };
    };