/*
 * Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 */
#ifndef __MACH_IOMUX_MX21_H__
#define __MACH_IOMUX_MX21_H__

#include <mach/iomux-mx2x.h>

/* Primary GPIO pin functions */

#define PB22_PF_USBH1_BYP	(GPIO_PORTB | GPIO_PF | 22)
#define PB25_PF_USBH1_ON	(GPIO_PORTB | GPIO_PF | 25)
#define PC5_PF_USBOTG_SDA	(GPIO_PORTC | GPIO_PF | 5)
#define PC6_PF_USBOTG_SCL	(GPIO_PORTC | GPIO_PF | 6)
#define PC7_PF_USBOTG_ON	(GPIO_PORTC | GPIO_PF | 7)
#define PC8_PF_USBOTG_FS	(GPIO_PORTC | GPIO_PF | 8)
#define PC9_PF_USBOTG_OE	(GPIO_PORTC | GPIO_PF | 9)
#define PC10_PF_USBOTG_TXDM	(GPIO_PORTC | GPIO_PF | 10)
#define PC11_PF_USBOTG_TXDP	(GPIO_PORTC | GPIO_PF | 11)
#define PC12_PF_USBOTG_RXDM	(GPIO_PORTC | GPIO_PF | 12)
#define PC13_PF_USBOTG_RXDP	(GPIO_PORTC | GPIO_PF | 13)
#define PC16_PF_SAP_FS		(GPIO_PORTC | GPIO_PF | 16)
#define PC17_PF_SAP_RXD		(GPIO_PORTC | GPIO_PF | 17)
#define PC18_PF_SAP_TXD		(GPIO_PORTC | GPIO_PF | 18)
#define PC19_PF_SAP_CLK		(GPIO_PORTC | GPIO_PF | 19)
#define PE0_PF_TEST_WB2		(GPIO_PORTE | GPIO_PF | 0)
#define PE1_PF_TEST_WB1		(GPIO_PORTE | GPIO_PF | 1)
#define PE2_PF_TEST_WB0		(GPIO_PORTE | GPIO_PF | 2)
#define PF1_PF_NFCE		(GPIO_PORTF | GPIO_PF | 1)
#define PF3_PF_NFCLE		(GPIO_PORTF | GPIO_PF | 3)
#define PF7_PF_NFIO0		(GPIO_PORTF | GPIO_PF | 7)
#define PF8_PF_NFIO1		(GPIO_PORTF | GPIO_PF | 8)
#define PF9_PF_NFIO2		(GPIO_PORTF | GPIO_PF | 9)
#define PF10_PF_NFIO3		(GPIO_PORTF | GPIO_PF | 10)
#define PF11_PF_NFIO4		(GPIO_PORTF | GPIO_PF | 11)
#define PF12_PF_NFIO5		(GPIO_PORTF | GPIO_PF | 12)
#define PF13_PF_NFIO6		(GPIO_PORTF | GPIO_PF | 13)
#define PF14_PF_NFIO7		(GPIO_PORTF | GPIO_PF | 14)
#define PF16_PF_RES		(GPIO_PORTF | GPIO_PF | 16)

/* Alternate GPIO pin functions */

#define PA5_AF_BMI_CLK_CS	(GPIO_PORTA | GPIO_AF | 5)
#define PA6_AF_BMI_D0		(GPIO_PORTA | GPIO_AF | 6)
#define PA7_AF_BMI_D1		(GPIO_PORTA | GPIO_AF | 7)
#define PA8_AF_BMI_D2		(GPIO_PORTA | GPIO_AF | 8)
#define PA9_AF_BMI_D3		(GPIO_PORTA | GPIO_AF | 9)
#define PA10_AF_BMI_D4		(GPIO_PORTA | GPIO_AF | 10)
#define PA11_AF_BMI_D5		(GPIO_PORTA | GPIO_AF | 11)
#define PA12_AF_BMI_D6		(GPIO_PORTA | GPIO_AF | 12)
#define PA13_AF_BMI_D7		(GPIO_PORTA | GPIO_AF | 13)
#define PA14_AF_BMI_D8		(GPIO_PORTA | GPIO_AF | 14)
#define PA15_AF_BMI_D9		(GPIO_PORTA | GPIO_AF | 15)
#define PA16_AF_BMI_D10		(GPIO_PORTA | GPIO_AF | 16)
#define PA17_AF_BMI_D11		(GPIO_PORTA | GPIO_AF | 17)
#define PA18_AF_BMI_D12		(GPIO_PORTA | GPIO_AF | 18)
#define PA19_AF_BMI_D13		(GPIO_PORTA | GPIO_AF | 19)
#define PA20_AF_BMI_D14		(GPIO_PORTA | GPIO_AF | 20)
#define PA21_AF_BMI_D15		(GPIO_PORTA | GPIO_AF | 21)
#define PA22_AF_BMI_READ_REQ	(GPIO_PORTA | GPIO_AF | 22)
#define PA23_AF_BMI_WRITE	(GPIO_PORTA | GPIO_AF | 23)
#define PA29_AF_BMI_RX_FULL	(GPIO_PORTA | GPIO_AF | 29)
#define PA30_AF_BMI_READ	(GPIO_PORTA | GPIO_AF | 30)

/* AIN GPIO pin functions */

#define PC14_AIN_SYS_CLK	(GPIO_PORTC | GPIO_AIN | GPIO_OUT | 14)
#define PD21_AIN_USBH2_FS	(GPIO_PORTD | GPIO_AIN | GPIO_OUT | 21)
#define PD22_AIN_USBH2_OE	(GPIO_PORTD | GPIO_AIN | GPIO_OUT | 22)
#define PD23_AIN_USBH2_TXDM	(GPIO_PORTD | GPIO_AIN | GPIO_OUT | 23)
#define PD24_AIN_USBH2_TXDP	(GPIO_PORTD | GPIO_AIN | GPIO_OUT | 24)
#define PE8_AIN_IR_TXD		(GPIO_PORTE | GPIO_AIN | GPIO_OUT | 8)
#define PF0_AIN_PC_RST		(GPIO_PORTF | GPIO_AIN | GPIO_OUT | 0)
#define PF1_AIN_PC_CE1		(GPIO_PORTF | GPIO_AIN | GPIO_OUT | 1)
#define PF2_AIN_PC_CE2		(GPIO_PORTF | GPIO_AIN | GPIO_OUT | 2)
#define PF3_AIN_PC_POE		(GPIO_PORTF | GPIO_AIN | GPIO_OUT | 3)
#define PF4_AIN_PC_OE		(GPIO_PORTF | GPIO_AIN | GPIO_OUT | 4)
#define PF5_AIN_PC_RW		(GPIO_PORTF | GPIO_AIN | GPIO_OUT | 5)

/* BIN GPIO pin functions */

#define PC14_BIN_SYS_CLK	(GPIO_PORTC | GPIO_BIN | GPIO_OUT | 14)
#define PD27_BIN_EXT_DMA_GRANT	(GPIO_PORTD | GPIO_BIN | GPIO_OUT | 27)

/* CIN GPIO pin functions */

#define PB26_CIN_USBH1_RXDAT	(GPIO_PORTB | GPIO_CIN | GPIO_OUT | 26)

/* AOUT GPIO pin functions */

#define PA29_AOUT_BMI_WAIT	(GPIO_PORTA | GPIO_AOUT | GPIO_IN | 29)
#define PD19_AOUT_USBH2_RXDM	(GPIO_PORTD | GPIO_AOUT | GPIO_IN | 19)
#define PD20_AOUT_USBH2_RXDP	(GPIO_PORTD | GPIO_AOUT | GPIO_IN | 20)
#define PD25_AOUT_EXT_DMAREQ	(GPIO_PORTD | GPIO_AOUT | GPIO_IN | 25)
#define PD26_AOUT_USBOTG_RXDAT	(GPIO_PORTD | GPIO_AOUT | GPIO_IN | 26)
#define PE9_AOUT_IR_RXD		(GPIO_PORTE | GPIO_AOUT | GPIO_IN | 9)
#define PF6_AOUT_PC_BVD2	(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 6)
#define PF7_AOUT_PC_BVD1	(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 7)
#define PF8_AOUT_PC_VS2		(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 8)
#define PF9_AOUT_PC_VS1		(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 9)
#define PF10_AOUT_PC_WP		(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 10)
#define PF11_AOUT_PC_READY	(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 11)
#define PF12_AOUT_PC_WAIT	(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 12)
#define PF13_AOUT_PC_CD2	(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 13)
#define PF14_AOUT_PC_CD1	(GPIO_PORTF | GPIO_AOUT | GPIO_IN | 14)

#endif /* ifndef __MACH_IOMUX_MX21_H__ */
