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

title: Microchip PIO3 Pinmux Controller

maintainers:
  - Manikandan Muralidharan <manikandan.m@microchip.com>

description:
  The AT91 Pinmux Controller, enables the IC to share one PAD to several
  functional blocks. The sharing is done by multiplexing the PAD input/output
  signals. For each PAD there are up to 8 muxing options (called periph modes).
  Since different modules require different PAD settings (like pull up, keeper,
  etc) the controller controls also the PAD settings parameters.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - atmel,at91rm9200-pinctrl
              - atmel,at91sam9x5-pinctrl
              - atmel,sama5d3-pinctrl
              - microchip,sam9x60-pinctrl
          - const: simple-mfd
      - items:
          - enum:
              - microchip,sam9x7-pinctrl
          - const: microchip,sam9x60-pinctrl
          - const: simple-mfd

  '#address-cells':
    const: 1

  '#size-cells':
    const: 1

  ranges: true

  atmel,mux-mask:
    $ref: /schemas/types.yaml#/definitions/uint32-matrix
    description: |
      Array of mask (periph per bank) to describe if a pin can be
      configured in this periph mode. All the periph and bank need to
      be described.

      #How to create such array:

      Each column will represent the possible peripheral of the pinctrl
      Each line will represent a pio bank

      #Example:

      In at91sam9260.dtsi,
      Peripheral: 2 ( A and B)
      Bank: 3 (A, B and C)

      #    A          B
      0xffffffff 0xffc00c3b  # pioA
      0xffffffff 0x7fff3ccf  # pioB
      0xffffffff 0x007fffff  # pioC

      For each peripheral/bank we will describe in a u32 if a pin can be
      configured in it by putting 1 to the pin bit (1 << pin)

      Let's take the pioA on peripheral B whose value is 0xffc00c3b
      From the datasheet Table 10-2.
      Peripheral B
      PA0     MCDB0
      PA1     MCCDB
      PA2
      PA3     MCDB3
      PA4     MCDB2
      PA5     MCDB1
      PA6
      PA7
      PA8
      PA9
      PA10    ETX2
      PA11    ETX3
      PA12
      PA13
      PA14
      PA15
      PA16
      PA17
      PA18
      PA19
      PA20
      PA21
      PA22    ETXER
      PA23    ETX2
      PA24    ETX3
      PA25    ERX2
      PA26    ERX3
      PA27    ERXCK
      PA28    ECRS
      PA29    ECOL
      PA30    RXD4
      PA31    TXD4

allOf:
  - $ref: pinctrl.yaml#

required:
  - compatible
  - ranges
  - "#address-cells"
  - "#size-cells"
  - atmel,mux-mask

patternProperties:
  'gpio@[0-9a-f]+$':
    $ref: /schemas/gpio/atmel,at91rm9200-gpio.yaml
    unevaluatedProperties: false

additionalProperties:
  type: object
  additionalProperties:
    type: object
    additionalProperties: false

    properties:
      atmel,pins:
        $ref: /schemas/types.yaml#/definitions/uint32-matrix
        description: |
          Each entry consists of 4 integers and represents the pins
          mux and config setting.The format is
          atmel,pins = <PIN_BANK PIN_BANK_NUM PERIPH CONFIG>.
          Supported pin number and mux varies for different SoCs, and
          are defined in <include/dt-bindings/pinctrl/at91.h>.
          items:
            items:
              - description:
                  Pin bank
              - description:
                  Pin bank index
              - description:
                  Peripheral function
              - description:
                  Pad configuration

examples:
  - |
     #include <dt-bindings/clock/at91.h>
     #include <dt-bindings/interrupt-controller/irq.h>
     #include <dt-bindings/pinctrl/at91.h>

     pinctrl@fffff400 {
       #address-cells = <1>;
       #size-cells = <1>;
       compatible = "atmel,at91rm9200-pinctrl", "simple-mfd";
       ranges = <0xfffff400 0xfffff400 0x600>;

       atmel,mux-mask = <
         /*    A         B     */
         0xffffffff 0xffc00c3b  /* pioA */
         0xffffffff 0x7fff3ccf  /* pioB */
         0xffffffff 0x007fffff  /* pioC */
         >;

       dbgu {
         pinctrl_dbgu: dbgu-0 {
           atmel,pins =
             <AT91_PIOB 14 AT91_PERIPH_A AT91_PINCTRL_PULL_UP
              AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>;
         };
       };

       pioA: gpio@fffff400 {
         compatible = "atmel,at91rm9200-gpio";
         reg = <0xfffff400 0x200>;
         interrupts = <2 IRQ_TYPE_LEVEL_HIGH 1>;
         #gpio-cells = <2>;
         gpio-controller;
         interrupt-controller;
         #interrupt-cells = <2>;
         clocks = <&pmc PMC_TYPE_PERIPHERAL 2>;
       };
     };
...
