# Copyright (C) 2020 Gerson Fernando Budke <nandojve@gmail.com>
# SPDX-License-Identifier: Apache-2.0

description: |
    GPIO pins exposed on Atmel Xplained headers.

    The Xplained layout provide a standard 10 pin header.  A board can have
    one or more headers and can share pins.  This connector was developed to
    match with Atmel AVR XMEGA devices GPIO port plus power signals.  The Atmel
    Xplained Pro standard connector keep compatibility with this header and it
    can be defined on every board with an Xplained Pro Connector extension and
    every pin can be defined as general purpose GPIO.

    The AVR XMEGA port was designed as:

    Signal  Main Function
       Px0  SDA
       Px1  SCL
       Px2  RX
       Px3  TX
       Px4  SS
       Px5  MOSI
       Px6  MISO
       Px7  SCK
       GND
       VDD

    Documentation:
    https://www.microchip.com/development-tools/xplained-boards
    http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42091-Atmel-Xplained-Pro-Hardware-Development-Kit_User%20Guide.pdf

    This binding provides a nexus mapping for 10 pins where pins are disposed
    to have a even and odd column:

                           Connector
    Bind      Pin Name     Pin   Pin  Pin Name        Bind
      0          I2C(SDA)  1       2  I2C(SCL)         1
      2          UART(RX)  3       4  UART(TX)         3
      4          SPI(CS0)  5       6  SPI(MOSI)        5
      6         SPI(MISO)  7       8  SPI(SCK)         7
                      GND  9      10  VDD(+3.3V)

compatible: "atmel-xplained-header"

include: [gpio-nexus.yaml, base.yaml]
