nuttx/configs/sama5d4-ek/src/sama5d4-ek.h

1144 lines
39 KiB
C
Raw Blame History

/************************************************************************************
* configs/sama5d4-ek/src/sama5d4-ek.h
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************************************/
#ifndef __CONFIGS_SAMA5D4_EK_SRC_SAMA5D4_EK_H
#define __CONFIGS_SAMA5D4_EK_SRC_SAMA5D4_EK_H
/************************************************************************************
* Included Files
************************************************************************************/
#include <nuttx/config.h>
#include <nuttx/compiler.h>
#include <stdint.h>
#include <arch/irq.h>
#include <nuttx/irq.h>
#include "chip/sam_pinmap.h"
/************************************************************************************
* Pre-processor Definitions
************************************************************************************/
/* Configuration ************************************************************/
#define HAVE_HSMCI 1
#define HAVE_AT25 1
#define HAVE_NAND 1
#define HAVE_AUTOMOUNTER 1
#define HAVE_USBHOST 1
#define HAVE_USBDEV 1
#define HAVE_USBOVCUR 1
#define HAVE_USBMONITOR 1
#define HAVE_NETWORK 1
#define HAVE_MAXTOUCH 1
#define HAVE_WM8904 1
#define HAVE_AUDIO_NULL 1
#define HAVE_PMIC 1
#define HAVE_ELF 1
/* HSMCI */
/* Can't support MMC/SD if the card interface(s) are not enable */
#if !defined(CONFIG_SAMA5_HSMCI0) && !defined(CONFIG_SAMA5_HSMCI1)
# undef HAVE_HSMCI
#endif
/* Can't support MMC/SD features if mountpoints are disabled */
#if defined(HAVE_HSMCI) && defined(CONFIG_DISABLE_MOUNTPOINT)
# warning Mountpoints disabled. No MMC/SD support
# undef HAVE_HSMCI
#endif
/* We need PIO interrupts on PIOE to support card detect interrupts */
#if defined(HAVE_HSMCI) && !defined(CONFIG_SAMA5_PIOE_IRQ)
# warning PIOE interrupts not enabled. No MMC/SD support.
# undef HAVE_HSMCI
#endif
/* NAND FLASH */
/* Can't support the NAND device if NAND flash is not configured on EBI CS3 */
#ifndef CONFIG_SAMA5_EBICS3_NAND
# undef HAVE_NAND
#endif
/* Can't support NAND features if mountpoints are disabled or if we were not
* asked to mount the NAND part
*/
#if defined(CONFIG_DISABLE_MOUNTPOINT) || !defined(CONFIG_SAMA5D4EK_NAND_BLOCKMOUNT)
# undef HAVE_NAND
#endif
/* Can't support NAND if the MTD feature is not enabled */
#if !defined(CONFIG_MTD) || !defined(CONFIG_MTD_NAND)
# undef HAVE_NAND
#endif
/* If we are going to mount the NAND, then they user must also have told
* us what to do with it by setting one of CONFIG_SAMA5D4EK_NAND_FTL or
* CONFIG_SAMA5D4EK_NAND_NXFFS.
*/
#ifndef CONFIG_MTD
# undef CONFIG_SAMA5D4EK_NAND_NXFFS
# undef CONFIG_SAMA5D4EK_NAND_FTL
#endif
#if !defined(CONFIG_FS_NXFFS) || !defined(CONFIG_NXFFS_NAND)
# undef CONFIG_SAMA5D4EK_NAND_NXFFS
#endif
#if !defined(CONFIG_SAMA5D4EK_NAND_FTL) && !defined(CONFIG_SAMA5D4EK_NAND_NXFFS)
# undef HAVE_NAND
#endif
#if defined(CONFIG_SAMA5D4EK_NAND_FTL) && defined(CONFIG_SAMA5D4EK_NAND_NXFFS)
# warning Both CONFIG_SAMA5D4EK_NAND_FTL and CONFIG_SAMA5D4EK_NAND_NXFFS are set
# warning Ignoring CONFIG_SAMA5D4EK_NAND_NXFFS
# undef CONFIG_SAMA5D4EK_NAND_NXFFS
#endif
/* AT25 Serial FLASH */
/* Can't support the AT25 device if it SPI0 or AT25 support are not enabled */
#if !defined(CONFIG_SAMA5_SPI0) || !defined(CONFIG_MTD_AT25)
# undef HAVE_AT25
#endif
/* Can't support AT25 features if mountpoints are disabled or if we were not
* asked to mount the AT25 part
*/
#if defined(CONFIG_DISABLE_MOUNTPOINT) || !defined(CONFIG_SAMA5D4EK_AT25_BLOCKMOUNT)
# undef HAVE_AT25
#endif
/* If we are going to mount the AT25, then they user must also have told
* us what to do with it by setting one of these.
*/
#ifndef CONFIG_FS_NXFFS
# undef CONFIG_SAMA5D4EK_AT25_NXFFS
#endif
#if !defined(CONFIG_SAMA5D4EK_AT25_FTL) && !defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) && \
!defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
# undef HAVE_AT25
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_FTL) && defined(CONFIG_SAMA5D4EK_AT25_CHARDEV)
# warning Both CONFIG_SAMA5D4EK_AT25_CHARDEV and CONFIG_SAMA5D4EK_AT25_FTL are set
# warning Ignoring CONFIG_SAMA5D4EK_AT25_FTL
# undef CONFIG_SAMA5D4EK_AT25_FTL
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_FTL) && defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
# warning Both CONFIG_SAMA5D4EK_AT25_FTL and CONFIG_SAMA5D4EK_AT25_NXFFS are set
# warning Ignoring CONFIG_SAMA5D4EK_AT25_NXFFS
# undef CONFIG_SAMA5D4EK_AT25_NXFFS
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) && defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
# warning Both CONFIG_SAMA5D4EK_AT25_CHARDEV and CONFIG_SAMA5D4EK_AT25_NXFFS are set
# warning Ignoring CONFIG_SAMA5D4EK_AT25_NXFFS
# undef CONFIG_SAMA5D4EK_AT25_NXFFS
#endif
/* Assign minor device numbers. For example, if we also use MINOR number 0
* for the AT25, it should appear as /dev/mtdblock0
*/
#define _NAND_MINOR 0
#ifdef HAVE_NAND
# define NAND_MINOR _NAND_MINOR
# define _AT25_MINOR (_NAND_MINOR+1)
#else
# define _AT25_MINOR _NAND_MINOR
#endif
#ifdef HAVE_AT25
# define AT25_MINOR _AT25_MINOR
#endif
/* MMC/SD minor numbers: The NSH device minor extended is extended to support
* two devices. If CONFIG_NSH_MMCSDMINOR is zero, these will be: /dev/mmcsd0
* and /dev/mmcsd1.
*/
#ifndef CONFIG_NSH_MMCSDMINOR
# define CONFIG_NSH_MMCSDMINOR 0
#endif
#ifdef HAVE_HSMCI
# define HSMCI0_SLOTNO 0
# define HSMCI1_SLOTNO 1
# ifdef CONFIG_SAMA5_HSMCI0
# define HSMCI0_MINOR CONFIG_NSH_MMCSDMINOR
# define HSMCI1_MINOR (CONFIG_NSH_MMCSDMINOR+1)
# else
# define HSMCI1_MINOR CONFIG_NSH_MMCSDMINOR
# endif
#else
#endif
/* Automounter. Currently only works with HSMCI. */
#if !defined(CONFIG_FS_AUTOMOUNTER) || !defined(HAVE_HSMCI)
# undef HAVE_AUTOMOUNTER
#endif
#ifndef CONFIG_SAMA5_HSMCI0
# undef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT
#endif
#ifndef CONFIG_SAMA5_HSMCI1
# undef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT
#endif
#if !defined(CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT) && \
!defined(CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT)
# undef HAVE_AUTOMOUNTER
#endif
#ifdef HAVE_AUTOMOUNTER
# ifdef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT
/* HSMCI0 Automounter defaults */
# ifndef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_FSTYPE
# define CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_FSTYPE "vfat"
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_BLKDEV
# define CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_BLKDEV "/dev/mmcds0"
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_MOUNTPOINT
# define CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_MOUNTPOINT "/mnt/sdcard0"
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_DDELAY
# define CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_DDELAY 1000
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_UDELAY
# define CONFIG_SAMA5D4EK_HSMCI0_AUTOMOUNT_UDELAY 2000
# endif
# endif
# ifdef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT
/* HSMCI1 Automounter defaults */
# ifndef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_FSTYPE
# define CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_FSTYPE "vfat"
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_BLKDEV
# define CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_BLKDEV "/dev/mmcds0"
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_MOUNTPOINT
# define CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_MOUNTPOINT "/mnt/sdcard0"
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_DDELAY
# define CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_DDELAY 1000
# endif
# ifndef CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_UDELAY
# define CONFIG_SAMA5D4EK_HSMCI1_AUTOMOUNT_UDELAY 2000
# endif
# endif
#endif
/* USB Host / USB Device */
/* Either CONFIG_SAMA5_UHPHS or CONFIG_SAMA5_UDPHS must be defined, or there is
* no USB of any kind.
*/
#if !defined(CONFIG_SAMA5_UHPHS)
# undef CONFIG_SAMA5_OHCI
# undef CONFIG_SAMA5_EHCI
#endif
#if !defined(CONFIG_SAMA5_UDPHS)
# undef HAVE_USBDEV
#endif
/* CONFIG_USBDEV and CONFIG_USBHOST must also be defined */
#if !defined(CONFIG_USBDEV)
# undef HAVE_USBDEV
#endif
#if defined(CONFIG_USBHOST)
# if !defined(CONFIG_SAMA5_OHCI) && !defined(CONFIG_SAMA5_EHCI)
# warning CONFIG_USBHOST is defined, but neither CONFIG_SAMA5_OHCI nor CONFIG_SAMA5_EHCI are defined
# endif
#else
# undef CONFIG_SAMA5_OHCI
# undef CONFIG_SAMA5_EHCI
#endif
#if !defined(CONFIG_SAMA5_OHCI) && !defined(CONFIG_SAMA5_EHCI)
# undef HAVE_USBHOST
#endif
#if defined(HAVE_USBHOST) && !defined(CONFIG_SAMA5_UHPHS_RHPORT1) && \
!defined(CONFIG_SAMA5_UHPHS_RHPORT2) && !defined(CONFIG_SAMA5_UHPHS_RHPORT3)
# undef HAVE_USBHOST
# warning No ports defined for USB host
#endif
#ifndef HAVE_USBHOST
# undef CONFIG_SAMA5_UHPHS_RHPORT1
# undef CONFIG_SAMA5_UHPHS_RHPORT2
# undef CONFIG_SAMA5_UHPHS_RHPORT3
#endif
/* No overcurrent support if no USB host or no interrupts of PIOD */
#if !defined(HAVE_USBHOST)
# undef HAVE_USBOVCUR
#endif
#if defined(HAVE_USBHOST) && !defined(CONFIG_SAMA5_PIOE_IRQ)
# undef HAVE_USBOVCUR
# warning CONFIG_SAMA5_PIOE_IRQ need for USB host overcurrent support
#endif
/* Check if we should enable the USB monitor before starting NSH */
#ifndef CONFIG_SYSTEM_USBMONITOR
# undef HAVE_USBMONITOR
#endif
#ifndef HAVE_USBDEV
# undef CONFIG_USBDEV_TRACE
#endif
#ifndef HAVE_USBHOST
# undef CONFIG_USBHOST_TRACE
#endif
#if !defined(CONFIG_USBDEV_TRACE) && !defined(CONFIG_USBHOST_TRACE)
# undef HAVE_USBMONITOR
#endif
/* Networking */
#if !defined(CONFIG_NET) || !defined(CONFIG_SAMA5_EMACB)
# undef HAVE_NETWORK
#endif
/* maXTouch controller */
#ifndef CONFIG_INPUT_MXT
# undef HAVE_MAXTOUCH
#endif
#ifdef HAVE_MAXTOUCH
# ifndef CONFIG_SAMA5_TWI0
# warning CONFIG_SAMA5_TWI0 is required for touchscreen support
# undef HAVE_MAXTOUCH
# endif
# ifndef CONFIG_SAMA5_PIOE_IRQ
# warning PIOE interrupts not enabled. No touchsreen support.
# undef HAVE_MAXTOUCH
# endif
#endif
/* Audio */
/* PCM/WM8904 driver */
#ifndef CONFIG_AUDIO_WM8904
# undef HAVE_WM8904
#endif
#ifdef HAVE_WM8904
# ifndef CONFIG_SAMA5_TWI0
# warning CONFIG_SAMA5_TWI0 is required for audio support
# undef HAVE_WM8904
# endif
# ifndef CONFIG_SAMA5_SSC0
# warning CONFIG_SAMA5_SSC0 is required for audio support
# undef HAVE_WM8904
# endif
# if !defined(CONFIG_SAMA5_PIOE_IRQ)
# warning CONFIG_SAMA5_PIOE_IRQ is required for audio support
# undef HAVE_HSMCI
# endif
# ifndef CONFIG_AUDIO_FORMAT_PCM
# warning CONFIG_AUDIO_FORMAT_PCM is required for audio support
# undef HAVE_WM8904
# endif
# ifndef CONFIG_SAMA5D4EK_WM8904_I2CFREQUENCY
# warning Defaulting to maximum WM8904 I2C frequency
# define CONFIG_SAMA5D4EK_WM8904_I2CFREQUENCY 400000
# endif
# if CONFIG_SAMA5D4EK_WM8904_I2CFREQUENCY > 400000
# warning WM8904 I2C frequency cannot exceed 400KHz
# undef CONFIG_SAMA5D4EK_WM8904_I2CFREQUENCY
# define CONFIG_SAMA5D4EK_WM8904_I2CFREQUENCY 400000
# endif
#endif
/* PCM/null driver */
#ifndef CONFIG_AUDIO_NULL
# undef HAVE_AUDIO_NULL
#endif
#ifdef HAVE_WM8904
# undef HAVE_AUDIO_NULL
#endif
#ifdef HAVE_AUDIO_NULL
# ifndef CONFIG_AUDIO_FORMAT_PCM
# warning CONFIG_AUDIO_FORMAT_PCM is required for audio support
# undef HAVE_AUDIO_NULL
# endif
#endif
/* PMIC */
#if !defined(CONFIG_SAMA5_TWI0) || !defined(CONFIG_SAMA5D4_MB_REVC)
# undef HAVE_PMIC
#endif
#ifndef CONFIG_EXPERIMENTAL
# undef HAVE_PMIC /* REVISIT: Disable anyway because it does not yet work */
#endif
/* ELF */
#if defined(CONFIG_BINFMT_DISABLE) || !defined(CONFIG_ELF)
# undef HAVE_ELF
#endif
/* LEDs *****************************************************************************/
/* There are 3 LEDs on the SAMA5D4-EK:
*
* ------------------------------ ------------------- -------------------------
* SAMA5D4 PIO SIGNAL USAGE
* ------------------------------ ------------------- -------------------------
* PE28/NWAIT/RTS4/A19 1Wire_PE28 1-WIRE ROM, LCD, D8 (green)
* PE8/A8/TCLK3/PWML3 LED_USER_PE8 LED_USER (D10)
* PE9/A9/TIOA2 LED_POWER_PE9 LED_POWER (D9, Red)
* ------------------------------ ------------------- -------------------------
*
* - D8: D8 is shared with other functions and cannot be used if the 1-Wire ROM
* is used. I am not sure of the LCD function, but the LED may not be available
* if the LCD is used either. We will avoid using D8 just for simplicity.
* - D10: Nothing special here. A low output illuminates.
* - D9: The Power ON LED. Connects to the via an IRLML2502 MOSFET. This LED will
* be on when power is applied but otherwise; a low output value will turn it
* off.
*/
#define PIO_LED_USER (PIO_OUTPUT | PIO_CFG_PULLUP | PIO_OUTPUT_SET | \
PIO_PORT_PIOE | PIO_PIN8)
#define PIO_LED_POWER (PIO_OUTPUT | PIO_CFG_PULLUP | PIO_OUTPUT_CLEAR | \
PIO_PORT_PIOE | PIO_PIN9)
/* Buttons **************************************************************************/
/* A single button, PB_USER1 (PB2), is available on the SAMA5D4-EK:
*
* ------------------------------ ------------------- -------------------------
* SAMA5D4 PIO SIGNAL USAGE
* ------------------------------ ------------------- -------------------------
* PE13/A13/TIOB1/PWML2 PB_USER1_PE13 PB_USER1
* ------------------------------ ------------------- -------------------------
*
* Closing JP2 will bring PE13 to ground so 1) PE13 should have a weak pull-up,
* and 2) when PB2 is pressed, a low value will be senses.
*/
#define PIO_BTN_USER (PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_BOTHEDGES | PIO_PORT_PIOE | PIO_PIN13)
#define IRQ_BTN_USER SAM_IRQ_PE13
/* TM7000 LCD/Touchscreen ***********************************************************/
/* The TM7000 LCD is available for the SAMA5D4-EK. See documentation
* available on the Precision Design Associates website:
* http://www.pdaatl.com/doc/tm7000.pdf
*
* The TM7000 features an touchscreen controol
*
* - 7 inch LCD at 800x480 18-bit RGB resolution and white backlight
* - Projected Capacitive Multi-Touch Controller based on the Atmel
* MXT768E maXTouch<63> IC
* - 4 Capacitive <20>Navigation<6F> Keys available via an Atmel AT42QT1070
* QTouch<63> Button Sensor IC
* - 200 bytes of non-volatile serial EEPROM
*
* Both the MXT768E and the AT42QT1070 are I2C devices with interrupting
* PIO pins:
*
* ------------------------ -----------------
* SAMA5D4-EK TM7000
* ------------------------ -----------------
* J9 pin 5 LCD_PE24 J4 pin 5 ~CHG_mxt
* J9 pin 6 LCD_PE25 J4 pin 6 ~CHG_QT
* J9 pin 7 LCD_TWCK0_PA31 J4 pin 7 SCL_0
* J9 pin 8 LCD_TWD0_PA30 J4 pin 8 SDA_0
* ------------------------ -----------------
*
* The schematic indicates the the MXT468E address is 0x4c/0x4d.
*/
#define PIO_CHG_MXT (PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_FALLING | PIO_PORT_PIOE | PIO_PIN24)
#define IRQ_CHG_MXT SAM_IRQ_PE24
#define PIO_CHG_QT (PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_FALLING | PIO_PORT_PIOE | PIO_PIN25)
#define IRQ_CHG_QT SAM_IRQ_PE25
/* The touchscreen communicates on TWI0, I2C address 0x4c */
#define MXT_TWI_BUS 0
#define MXT_I2C_ADDRESS 0x4c
/* HSMCI Card Slots *****************************************************************/
/* The SAMA5D4-EK provides a two SD memory card slots: (1) a full size SD
* card slot (J10), and (2) a microSD memory card slot (J11).
*
* The full size SD card slot connects via HSMCI0. The card detect discrete
* is available on PE5 (pulled high). The write protect discrete is tied to
* ground and is not available to software. The slot supports 8-bit wide
* transfer mode, but the NuttX driver currently uses only the 4-bit wide
* transfer mode
*
* ------------------------------ ------------------- -------------------------
* SAMA5D4 PIO SIGNAL USAGE
* ------------------------------ ------------------- -------------------------
* PC4/SPI0_NPCS1/MCI0_CK/PCK1 PC4 MCI0_CK, ISI_MCK, EXP
* PC5/D0/MCI0_CDA PC5 MCI0_CDA, NAND_IO0
* PC6/D1/MCI0_DA0 PC6 MCI0_DA0, NAND_IO1
* PC7/D2/MCI0_DA1 PC7 MCI0_DA1, NAND_IO2
* PC8/D3/MCI0_DA2 PC8 MCI0_DA2, NAND_IO3
* PC9/D4/MCI0_DA3 PC9 MCI0_DA3, NAND_IO4
* PC10/D5/MCI0_DA4 PC10 MCI0_DA4, NAND_IO5
* PC11/D6/MCI0_DA5 PC11 MCI0_DA5, NAND_IO6
* PC12/D7/MCI0_DA6 PC12 MCI0_DA6, NAND_IO7
* PC13/NRD/NANDOE/MCI0_DA7 PC13 MCI0_DA7, NAND_RE
* PE5/A5/CTS3 MCI0_CD_PE5 MCI0_CD
* ------------------------------ ------------------- -------------------------
*/
#define PIO_MCI0_CD (PIO_INPUT | PIO_CFG_DEFAULT | PIO_CFG_DEGLITCH | \
PIO_INT_BOTHEDGES | PIO_PORT_PIOE | PIO_PIN5)
#define IRQ_MCI0_CD SAM_IRQ_PE5
/* The microSD connects vi HSMCI1. The card detect discrete is available on
* PE6 (pulled high) NOTE that PE15 must be controlled to provide power
* to the HSMCI1 slot (the HSMCI0 slot is always powered).
*
* ------------------------------ ------------------- -------------------------
* SAMA5D4 PIO SIGNAL USAGE
* ------------------------------ ------------------- -------------------------
* PE14/A14/TCLK1/PWMH3 MCI1_CD_PE14 MCI1_CD ???
* PE15/A15/SCK3/TIOA0 MCI1_PWR_PE15 MCI1_PWR
* PE18/A18/TIOA5/MCI1_CK PE18 MCI1_CK, EXP
* PE19/A19/TIOB5/MCI1_CDA PE19 MCI1_CDA, EXP
* PE20/A20/TCLK5/MCI1_DA0 PE20 MCI1_DA0, EXP
* PE21/A23/TIOA4/MCI1_DA1 PE21 MCI1_DA1, EXP
* PE22/A24/TIOB4/MCI1_DA2 PE22 MCI1_DA2, EXP
* PE23/A25/TCLK4/MCI1_DA3 PE23 MCI1_DA3, EXP
* PE6/A6/TIOA3 MCI1_CD_PE6 MCI1_CD
* ------------------------------ ------------------- -------------------------
*/
#define PIO_MCI1_CD (PIO_INPUT | PIO_CFG_DEFAULT | PIO_CFG_DEGLITCH | \
PIO_INT_BOTHEDGES | PIO_PORT_PIOE | PIO_PIN6)
#define IRQ_MCI1_CD SAM_IRQ_PE6
#define IRQ_MCI1_PWR (PIO_OUTPUT | PIO_CFG_DEFAULT | PIO_OUTPUT_SET | \
PIO_PORT_PIOE | PIO_PIN15)
/* USB Ports ************************************************************************/
/* The SAMA5D4-EK features three USB communication ports:
*
* * Port A Host High Speed (EHCI) and Full Speed (OHCI) multiplexed with
* USB Device High Speed Micro AB connector, J1
*
* * Port B Host High Speed (EHCI) and Full Speed (OHCI) standard type A
* connector, J5 upper port
*
* * Port C Host Full Speed (OHCI) and Full Speed (OHCI) standard type A
* connector, J5 lower port
*
* The three USB host ports are equipped with 500-mA high-side power
* switch for self-powered and bus-powered applications.
*
* The USB device port A (J5) features a VBUS insert detection function.
*
* Port A
* ------
*
* PIO Signal Name Function
* ---- -------------- -------------------------------------------------------
* PE10 USBA_EN5V_PE10 VBus power enable (via MN2 power switch) to VBus pin of
* the OTG connector (host)
* PE31 USBA_VBUS_PE31 VBus sensing from the VBus pin of the OTG connector (device)
*/
#ifdef CONFIG_SAMA5_UHPHS_RHPORT1
#define PIO_USBA_VBUS_ENABLE \
(PIO_OUTPUT | PIO_CFG_DEFAULT | PIO_OUTPUT_CLEAR | \
PIO_PORT_PIOE | PIO_PIN10)
#endif
#ifdef HAVE_USBDEV
# define PIO_USBA_VBUS_SENSE \
(PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_BOTHEDGES | PIO_PORT_PIOE | PIO_PIN31)
# define IRQ_USBA_VBUS_SENSE \
SAM_IRQ_PE31
#endif
/* Port B
* ------
*
* PIO Signal Name Function
* ---- -------------- -------------------------------------------------------
* PE11 USBB_EN5V_PE11 VBus power enable (via MN4 power switch). To the A1
* pin of J5 Dual USB A connector
*/
#ifdef CONFIG_SAMA5_UHPHS_RHPORT2
# define PIO_USBB_VBUS_ENABLE \
(PIO_OUTPUT | PIO_CFG_DEFAULT | PIO_OUTPUT_CLEAR | \
PIO_PORT_PIOE | PIO_PIN11)
#endif
/* Port C
* ------
*
* PIO Signal Name Function
* ---- -------------- -------------------------------------------------------
* PE12 USBC_EN5V_PE12 VBus power enable (via MN4 power switch). To the B1
* pin of J5 Dual USB A connector
*/
#ifdef CONFIG_SAMA5_UHPHS_RHPORT3
# define PIO_USBC_VBUS_ENABLE \
(PIO_OUTPUT | PIO_CFG_DEFAULT | PIO_OUTPUT_CLEAR | \
PIO_PORT_PIOE | PIO_PIN12)
#endif
/* Both Ports B and C
* ------------------
*
* PIO Signal Name Function
* ---- ------------- -------------------------------------------------------
* PD9 USB_OVCUR_PD9 Combined over-current indication from port A and B
*/
#ifdef HAVE_USBOVCUR
# define PIO_USBBC_VBUS_OVERCURRENT \
(PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_BOTHEDGES | PIO_PORT_PIOD | PIO_PIN9)
# define IRQ_USBBC_VBUS_OVERCURRENT \
SAM_IRQ_PD9
#endif
/* Ethernet */
#ifdef CONFIG_SAMA5_EMACB
/* ETH0/1: Ethernet 10/100 (EMAC) Ports
*
* Networking support via the can be added to NSH by selecting the following
* configuration options. The SAMA5D44 supports two different 10/100Base-T
* Ethernet MAC peripherals.
*
* ------------------------------ ------------------- -------------------------
* SAMA5D4 PIO SIGNAL USAGE
* ------------------------------ ------------------- -------------------------
* PB0/G0_TXCK PB0 G0_TXCK, EXP
* PB1/G0_RXCK/SCK2/ISI_PCK ISI_PCK_PB1 ISI_PCK
* PB2/G0_TXEN PB2 G0_TXEN,EXP
* PB3/G0_TXER/CTS2/ISI_VSYNC ISI_VSYNC_PB3 ISI_VSYNC
* PB4/G0_CRS/RXD2/ISI_HSYNC ISI_HSYNC_PB4 ISI_HSYNC
* PB5/G0_COL/TXD2/PCK2 ISI_PWD_PB5 ISI_PWD
* PB6/G0_RXDV PB6 G0_RXDV, EXP
* PB7/G0_RXER PB7 G0_RXER, EXP
* PB8/G0_RX0 PB8 G0_RX0, EXP
* PB9/G0_RX1 PB9 G0_RX1, EXP
* PB10/G0_RX2/PCK2/PWML1 PB10 AUDIO_PCK2, EXP
* PB11/G0_RX3/RTS2/PWMH1 ISI_RST_PB11 ISI_RST
* PB12/G0_TX0 PB12 G0_TX0, EXP
* PB13/G0_TX1 PB13 G0_TX1, EXP
* PB14/G0_TX2/SPI2_NPCS1/PWMH0 ZIG_SPI2_NPCS1 ZIG_SPI2_NPCS1
* PB15/G0_TX3/SPI2_NPCS2/PWML0 HDMI_RST_PB15 HDMI_RST
* PB16/G0_MDC PB16 G0_MDC, EXP
* PB17/G0_MDIO PB17 G0_MDIO, EXP
* PE1/A1/MCI0_DB0 G0_IRQ_PE1 G0_IRQ
* ------------------------------ ------------------- -------------------------
* PA2/LCDDAT2/G1_TXCK PA LCDDAT2, G1_TXCK
* PA3/LCDDAT3/G1_RXCK PA3 LCDDAT3
* PA4/LCDDAT4/G1_TXEN PA4 LCDDAT4, G1_TXEN
* PA5/LCDDAT5/G1_TXER PA5 LCDDAT5
* PA6/LCDDAT6/G1_CRS PA6 LCDDAT6
* PA9/LCDDAT9/G1_COL PA9 LCDDAT9
* PA10/LCDDAT10/G1_RXDV PA10 LCDDAT10, G1_RXDV
* PA11/LCDDAT11/G1_RXER PA11 LCDDAT11, G1_RXER
* PA12/LCDDAT12/G1_RX0 PA12 LCDDAT12, G1_RX0
* PA13/LCDDAT13/G1_RX1 PA13 LCDDAT13, G1_RX1
* PA14/LCDDAT14/G1_TX0 PA14 LCDDAT14, G1_TX0
* PA15/LCDDAT15/G1_TX1 PA15 LCDDAT15, G1_TX1
* PA18/LCDDAT18/G1_RX2 PA18 LCDDAT18
* PA19/LCDDAT19/G1_RX3 PA19 LCDDAT19
* PA20/LCDDAT20/G1_TX2 PA20 LCDDAT20
* PA21/LCDDAT21/G1_TX3 PA21 LCDDAT21
* PA22/LCDDAT22/G1_MDC PA22 LCDDAT22, G1_MDC
* PA23/LCDDAT23/G1_MDIO PA23 LCDDAT23, G1_MDIO
* PE2/A2/MCI0_DB1 G1_IRQ_PE2 G1_IRQ
* ------------------------------ ------------------- -------------------------
*
* EMAC2 connects (directly) to a KSZ8081RNB PHY (U10) and is available at
* the ETH0 connector.
*
* EMAC1 connects (indirectly) to another KSZ8081RNB PHY (U7) and is available
* at the ETH1 connector. The ETH1 signals go through a line driver that is
* enabled via LCD_ETH1_CONFIG when an LCD is detected:
*
* - LCD_ETH1_CONFIG = 0: LCD 5v disable
* - LCD_ETH1_CONFIG = 1 & LCD_DETECT# =0: LCD 5v enable.
*
* The sense of KSZ8081 interrupt is configurable but is, by default, active
* low.
*/
#ifdef CONFIG_SAMA5_EMAC0
# define PIO_INT_ETH0 (PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_FALLING | PIO_PORT_PIOE | PIO_PIN1)
# define IRQ_INT_ETH0 SAM_IRQ_PE1
#endif
#ifdef CONFIG_SAMA5_EMAC1
# define PIO_INT_ETH1 (PIO_INPUT | PIO_CFG_PULLUP | PIO_CFG_DEGLITCH | \
PIO_INT_FALLING | PIO_PORT_PIOE | PIO_PIN2)
# define IRQ_INT_ETH1 SAM_IRQ_PE2
#endif
#endif
/* WM8904 Audio Codec ***************************************************************/
/* SAMA5D4 Interface
* ---- ------------------ ---------------- ---------- ------------------------------
* PIO USAGE BOARD SIGNAL WM8904 PIN NOTE
* ---- ------------------ ---------------- ---------- ------------------------------
* PA30 TWD0 AUDIO_TWD0_PA30 SDA Pulled up, See J23 note below
* PA31 TWCK0 AUDIO_TWCK0_PA31 SCLK Pulled up
* PB10 AUDIO_PCK2/EXP AUDIO_PCK2_PB10 MCLK
* PB27 AUDIO/HDMI_TK0/EXP AUDIO_TK0_PB27 BCLK/GPIO4 TK0/RK0 are mutually exclusive
* PB26 AUDIO_RK0 AUDIO_RK0_PB26 " "/" " " "/" " " " " " " "
* PB30 AUDIO_RF/ZIG_TWCK2 AUDIO_RF0_PB30 LRCLK TF0/RF0 are mutually exclusive
* PB31 AUDIO/HDMI_TF0/EXP AUDIO_TF0_PB31 " " " "/" " " " " " " "
* PB29 AUDIO_RD0/ZIG_TWD2 AUDIO_RD0_PB29 ADCDAT
* PB28 AUDIO/HDMI_TD0/EXP AUDIO_TD0_PB28 ACDAT
* PE4 AUDIO_IRQ AUDIO_IRQ_PE4 IRQ/GPIO1 Audio interrupt
* ---- ------------------ ---------------- ---------- ------------------------------
* Note that jumper J23 must be closed to connect AUDIO_TWD0_PA30
*/
/* Pin Disambiguation */
#define PIO_SSC0_TD PIO_SSC0_TD_2
/* Audio Interrupt. All interrupts are default, active high level. Pull down
* internally in the WM8904. So we want no pull-up/downs and we want to
* interrupt on the high level.
*/
#define PIO_INT_WM8904 (PIO_INPUT | PIO_CFG_DEFAULT | PIO_CFG_DEGLITCH | \
PIO_INT_HIGHLEVEL | PIO_PORT_PIOE | PIO_PIN4)
#define IRQ_INT_WM8904 SAM_IRQ_PE4
/* The MW8904 communicates on TWI0, I2C address 0x1a for control operations */
#define WM8904_TWI_BUS 0
#define WM8904_I2C_ADDRESS 0x1a
/* The MW8904 transfers data on SSC0 */
#define WM8904_SSC_BUS 0
/* SPI Chip Selects *****************************************************************/
/* The SAMA5D4-EK includes an Atmel AT25DF321A, 32-megabit, 2.7-volt SPI serial
* FLASH on board. The connection is as follows:
*
* AT25DF321A SAMA5D4-EK SAMA5
* ---------- --------------- --------------------------------
* SI AT25_SPI0_SI PC1 PC1/SPI0_MOSI/PWML2/ISI_D9
* SO AT25_SPI0_SO PC0 PC0/SPI0_MISO/PWMH2/ISI_D8
* SCK AT25_SPI0_SPCK PC2 PC2/SPI0_SPCK/PWMH3/ISI_D10
* /CS AT25_SPI0_NCPS0 PC3 PC3/SPI0_NPCS0/PWML3/ISI_D11
*
* AT25_SPI0_NCPS0 goes to the AT25DF321A as via a NL17SZ126 if JP6 is closed
*/
#define PIO_AT25_NPCS0 (PIO_OUTPUT | PIO_CFG_PULLUP | PIO_OUTPUT_SET | \
PIO_PORT_PIOC | PIO_PIN3)
#define AT25_PORT SPI0_CS0
/* ACT8865 power management chip ****************************************************/
/* The PMIC communicates on TWI0, I2C address 0x5b */
#define PMIC_TWI_BUS 0
#define PMIC_I2C_ADDRESS 0x5b
#define PMIC_I2C_FREQUENCY 400000 /* 400KHz max */
/************************************************************************************
* Public Types
************************************************************************************/
/************************************************************************************
* Public data
************************************************************************************/
#ifndef __ASSEMBLY__
/************************************************************************************
* Public Functions
************************************************************************************/
/************************************************************************************
* Name: sam_spiinitialize
*
* Description:
* Called to configure SPI chip select PIO pins for the SAMA5D4-EK board.
*
************************************************************************************/
#if defined(CONFIG_SAMA5_SPI0) || defined(CONFIG_SAMA5_SPI1)
void weak_function sam_spiinitialize(void);
#endif
/************************************************************************************
* Name: board_sdram_config
*
* Description:
* Configures DDR2 (MT47H128M16RT 128MB or, optionally, MT47H64M16HR)
*
* Per the SAMA5D4-EK User guide: "Two SDRAM/DDR2 used as main system memory.
* MT47H128M16 - 2 Gb - 16 Meg x 16 x 8 banks, the board provides up to 2 Gb on-
* board, soldered DDR2 SDRAM. The memory bus is 32 bits wide and operates with
* up to 166 MHz."
*
* From the Atmel Code Example:
* MT47H64M16HR : 8 Meg x 16 x 8 banks
* Refresh count: 8K
* Row address: A[12:0] (8K)
* Column address A[9:0] (1K)
* Bank address BA[2:0] a(24,25) (8)
*
* This logic was taken from Atmel sample code for the SAMA5D4-EK.
*
* Input Parameters:
* devtype - Either DDRAM_MT47H128M16RT or DDRAM_MT47H64M16HR
*
* Assumptions:
* The DDR memory regions is configured as strongly ordered memory. When we
* complete initialization of SDRAM and it is ready for use, we will make DRAM
* into normal memory.
*
************************************************************************************/
#if defined(CONFIG_SAMA5_DDRCS) && !defined(CONFIG_SAMA5_BOOT_SDRAM)
void sam_sdram_config(void);
#else
# define board_sdram_config(t)
#endif
/****************************************************************************
* Name: sam_bringup
*
* Description:
* Bring up board features
*
****************************************************************************/
int sam_bringup(void);
/****************************************************************************
* Name: sam_nand_automount
*
* Description:
* Initialize and configure the NAND on CS3
*
****************************************************************************/
#ifdef HAVE_NAND
int sam_nand_automount(int minor);
#endif
/****************************************************************************
* Name: sam_at25_automount
*
* Description:
* Initialize and configure the AT25 serial FLASH
*
****************************************************************************/
#ifdef HAVE_AT25
int sam_at25_automount(int minor);
#endif
/****************************************************************************
* Name: sam_hsmci_initialize
*
* Description:
* Initialize and configure one HSMCI slot
*
****************************************************************************/
#ifdef HAVE_HSMCI
int sam_hsmci_initialize(int slotno, int minor);
#endif
/************************************************************************************
* Name: sam_cardinserted
*
* Description:
* Check if a card is inserted into the selected HSMCI slot
*
************************************************************************************/
#ifdef HAVE_HSMCI
bool sam_cardinserted(int slotno);
#endif
/************************************************************************************
* Name: sam_automount_initialize
*
* Description:
* Configure auto-mounters for each enable and so configured HSMCI
*
* Input Parameters:
* None
*
* Returned Value:
* None
*
************************************************************************************/
#ifdef HAVE_AUTOMOUNTER
void sam_automount_initialize(void);
#endif
/************************************************************************************
* Name: sam_automount_event
*
* Description:
* The HSMCI card detection logic has detected an insertion or removal event. It
* has already scheduled the MMC/SD block driver operations. Now we need to
* schedule the auto-mount event which will occur with a substantial delay to make
* sure that everything has settle down.
*
* Input Parameters:
* slotno - Identifies the HSMCI0 slot: HSMCI0 or HSMCI1_SLOTNO. There is a
* terminology problem here: Each HSMCI supports two slots, slot A and slot B.
* Only slot A is used. So this is not a really a slot, but an HSCMI peripheral
* number.
* inserted - True if the card is inserted in the slot. False otherwise.
*
* Returned Value:
* None
*
* Assumptions:
* Interrupts are disabled.
*
************************************************************************************/
#ifdef HAVE_AUTOMOUNTER
void sam_automount_event(int slotno, bool inserted);
#endif
/************************************************************************************
* Name: sam_writeprotected
*
* Description:
* Check if the card in the MMCSD slot is write protected
*
************************************************************************************/
#ifdef HAVE_HSMCI
bool sam_writeprotected(int slotno);
#endif
/************************************************************************************
* Name: sam_usbinitialize
*
* Description:
* Called from sam_usbinitialize very early in inialization to setup USB-related
* PIO pins for the SAMA5D4-EK board.
*
************************************************************************************/
#if defined(CONFIG_SAMA5_UHPHS) || defined(CONFIG_SAMA5_UDPHS)
void weak_function sam_usbinitialize(void);
#endif
/****************************************************************************************************
* Name: stm32_usbhost_initialize
*
* Description:
* Called at application startup time to initialize the USB host functionality. This function will
* start a thread that will monitor for device connection/disconnection events.
*
****************************************************************************************************/
#ifdef HAVE_USBHOST
int sam_usbhost_initialize(void);
#endif
/************************************************************************************
* Name: sam_netinitialize
*
* Description:
* Configure board resources to support networking.
*
************************************************************************************/
#ifdef HAVE_NETWORK
void weak_function sam_netinitialize(void);
#endif
/************************************************************************************
* Name: board_led_initialize
************************************************************************************/
#ifdef CONFIG_ARCH_LEDS
void board_led_initialize(void);
#endif
/************************************************************************************
* Name: nsh_archinitialize
*
* Description:
* Perform architecture specific initialization for NSH.
*
* CONFIG_NSH_ARCHINIT=y :
* Called from the NSH library
*
* CONFIG_BOARD_INITIALIZE=y, CONFIG_NSH_LIBRARY=y, && CONFIG_NSH_ARCHINIT=n :
* Called from board_initialize().
*
************************************************************************************/
#ifdef CONFIG_NSH_LIBRARY
int nsh_archinitialize(void);
#endif
/****************************************************************************
* Name: sam_wm8904_initialize
*
* Description:
* This function is called by platform-specific, setup logic to configure
* and register the WM8904 device. This function will register the driver
* as /dev/wm8904[x] where x is determined by the minor device number.
*
* Input Parameters:
* minor - The input device minor number
*
* Returned Value:
* Zero is returned on success. Otherwise, a negated errno value is
* returned to indicate the nature of the failure.
*
****************************************************************************/
#ifdef HAVE_WM8904
int sam_wm8904_initialize(int minor);
#endif /* HAVE_WM8904 */
/****************************************************************************
* Name: sam_audio_null_initialize
*
* Description:
* Set up to use the NULL audio device for PCM unit-level testing.
*
* Input Parameters:
* minor - The input device minor number
*
* Returned Value:
* Zero is returned on success. Otherwise, a negated errno value is
* returned to indicate the nature of the failure.
*
****************************************************************************/
#ifdef HAVE_AUDIO_NULL
int sam_audio_null_initialize(int minor);
#endif /* HAVE_AUDIO_NULL */
/****************************************************************************
* Name: sam_pmic_initialize
*
* Description:
* Currently, this function only disables the PMIC.
*
* Input Parameters:
* None
*
* Returned Value:
* None
*
****************************************************************************/
#ifdef HAVE_PMIC
void sam_pmic_initialize(void);
#else
# define sam_pmic_initialize()
#endif
#endif /* __ASSEMBLY__ */
#endif /* __CONFIGS_SAMA5D4_EK_SRC_SAMA5D4_EK_H */