/*
 * Pinmux configurations for the DA850 SoCs
 *
 * Copyright (C) 2011 OMICRON electronics GmbH
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <common.h>
#include <asm/arch/davinci_misc.h>
#include <asm/arch/hardware.h>
#include <asm/arch/pinmux_defs.h>

/* SPI pin muxer settings */
const struct pinmux_config spi1_pins_base[] = {
	{ pinmux(5), 1, 2 }, /* SPI1_CLK */
	{ pinmux(5), 1, 4 }, /* SPI1_SOMI */
	{ pinmux(5), 1, 5 }, /* SPI1_SIMO */
};

const struct pinmux_config spi1_pins_scs0[] = {
	{ pinmux(5), 1, 1 }, /* SPI1_SCS[0] */
};

/* UART pin muxer settings */
const struct pinmux_config uart0_pins_txrx[] = {
	{ pinmux(3), 2, 4 }, /* UART0_RXD */
	{ pinmux(3), 2, 5 }, /* UART0_TXD */
};

const struct pinmux_config uart1_pins_txrx[] = {
	{ pinmux(4), 2, 6 }, /* UART1_RXD */
	{ pinmux(4), 2, 7 }, /* UART1_TXD */
};

const struct pinmux_config uart2_pins_txrx[] = {
	{ pinmux(4), 2, 4 }, /* UART2_RXD */
	{ pinmux(4), 2, 5 }, /* UART2_TXD */
};

const struct pinmux_config uart2_pins_rtscts[] = {
	{ pinmux(0), 4, 6 }, /* UART2_RTS */
	{ pinmux(0), 4, 7 }, /* UART2_CTS */
};

/* EMAC pin muxer settings*/
const struct pinmux_config emac_pins_rmii[] = {
	{ pinmux(14), 8, 2 }, /* RMII_TXD[1] */
	{ pinmux(14), 8, 3 }, /* RMII_TXD[0] */
	{ pinmux(14), 8, 4 }, /* RMII_TXEN */
	{ pinmux(14), 8, 5 }, /* RMII_RXD[1] */
	{ pinmux(14), 8, 6 }, /* RMII_RXD[0] */
	{ pinmux(14), 8, 7 }, /* RMII_RXER */
	{ pinmux(15), 8, 1 }, /* RMII_CRS_DV */
};

const struct pinmux_config emac_pins_mii[] = {
	{ pinmux(2), 8, 1 }, /* MII_TXEN */
	{ pinmux(2), 8, 2 }, /* MII_TXCLK */
	{ pinmux(2), 8, 3 }, /* MII_COL */
	{ pinmux(2), 8, 4 }, /* MII_TXD[3] */
	{ pinmux(2), 8, 5 }, /* MII_TXD[2] */
	{ pinmux(2), 8, 6 }, /* MII_TXD[1] */
	{ pinmux(2), 8, 7 }, /* MII_TXD[0] */
	{ pinmux(3), 8, 0 }, /* MII_RXCLK */
	{ pinmux(3), 8, 1 }, /* MII_RXDV */
	{ pinmux(3), 8, 2 }, /* MII_RXER */
	{ pinmux(3), 8, 3 }, /* MII_CRS */
	{ pinmux(3), 8, 4 }, /* MII_RXD[3] */
	{ pinmux(3), 8, 5 }, /* MII_RXD[2] */
	{ pinmux(3), 8, 6 }, /* MII_RXD[1] */
	{ pinmux(3), 8, 7 }, /* MII_RXD[0] */
};

const struct pinmux_config emac_pins_mdio[] = {
	{ pinmux(4), 8, 0 }, /* MDIO_CLK */
	{ pinmux(4), 8, 1 }, /* MDIO_D */
};

/* I2C pin muxer settings */
const struct pinmux_config i2c0_pins[] = {
	{ pinmux(4), 2, 2 }, /* I2C0_SCL */
	{ pinmux(4), 2, 3 }, /* I2C0_SDA */
};

const struct pinmux_config i2c1_pins[] = {
	{ pinmux(4), 4, 4 }, /* I2C1_SCL */
	{ pinmux(4), 4, 5 }, /* I2C1_SDA */
};

/* EMIFA pin muxer settings */
const struct pinmux_config emifa_pins_cs2[] = {
	{ pinmux(7), 1, 0 }, /* EMA_CS2 */
};

const struct pinmux_config emifa_pins_cs3[] = {
	{ pinmux(7), 1, 1 }, /* EMA_CS[3] */
};

const struct pinmux_config emifa_pins_cs4[] = {
	{ pinmux(7), 1, 2 }, /* EMA_CS[4] */
};

const struct pinmux_config emifa_pins_nand[] = {
	{ pinmux(7), 1, 4 },  /* EMA_WE */
	{ pinmux(7), 1, 5 },  /* EMA_OE */
	{ pinmux(9), 1, 0 },  /* EMA_D[7] */
	{ pinmux(9), 1, 1 },  /* EMA_D[6] */
	{ pinmux(9), 1, 2 },  /* EMA_D[5] */
	{ pinmux(9), 1, 3 },  /* EMA_D[4] */
	{ pinmux(9), 1, 4 },  /* EMA_D[3] */
	{ pinmux(9), 1, 5 },  /* EMA_D[2] */
	{ pinmux(9), 1, 6 },  /* EMA_D[1] */
	{ pinmux(9), 1, 7 },  /* EMA_D[0] */
	{ pinmux(12), 1, 5 }, /* EMA_A[2] */
	{ pinmux(12), 1, 6 }, /* EMA_A[1] */
};

/* NOR pin muxer settings */
const struct pinmux_config emifa_pins_nor[] = {
	{ pinmux(5), 1, 6 },  /* EMA_BA[1] */
	{ pinmux(6), 1, 6 },  /* EMA_WAIT[1] */
	{ pinmux(7), 1, 4 },  /* EMA_WE */
	{ pinmux(7), 1, 5 },  /* EMA_OE */
	{ pinmux(8), 1, 0 },  /* EMA_D[15] */
	{ pinmux(8), 1, 1 },  /* EMA_D[14] */
	{ pinmux(8), 1, 2 },  /* EMA_D[13] */
	{ pinmux(8), 1, 3 },  /* EMA_D[12] */
	{ pinmux(8), 1, 4 },  /* EMA_D[11] */
	{ pinmux(8), 1, 5 },  /* EMA_D[10] */
	{ pinmux(8), 1, 6 },  /* EMA_D[9] */
	{ pinmux(8), 1, 7 },  /* EMA_D[8] */
	{ pinmux(9), 1, 0 },  /* EMA_D[7] */
	{ pinmux(9), 1, 1 },  /* EMA_D[6] */
	{ pinmux(9), 1, 2 },  /* EMA_D[5] */
	{ pinmux(9), 1, 3 },  /* EMA_D[4] */
	{ pinmux(9), 1, 4 },  /* EMA_D[3] */
	{ pinmux(9), 1, 5 },  /* EMA_D[2] */
	{ pinmux(9), 1, 6 },  /* EMA_D[1] */
	{ pinmux(9), 1, 7 },  /* EMA_D[0] */
	{ pinmux(10), 1, 1 }, /* EMA_A[22] */
	{ pinmux(10), 1, 2 }, /* EMA_A[21] */
	{ pinmux(10), 1, 3 }, /* EMA_A[20] */
	{ pinmux(10), 1, 4 }, /* EMA_A[19] */
	{ pinmux(10), 1, 5 }, /* EMA_A[18] */
	{ pinmux(10), 1, 6 }, /* EMA_A[17] */
	{ pinmux(10), 1, 7 }, /* EMA_A[16] */
	{ pinmux(11), 1, 0 }, /* EMA_A[15] */
	{ pinmux(11), 1, 1 }, /* EMA_A[14] */
	{ pinmux(11), 1, 2 }, /* EMA_A[13] */
	{ pinmux(11), 1, 3 }, /* EMA_A[12] */
	{ pinmux(11), 1, 4 }, /* EMA_A[11] */
	{ pinmux(11), 1, 5 }, /* EMA_A[10] */
	{ pinmux(11), 1, 6 }, /* EMA_A[9] */
	{ pinmux(11), 1, 7 }, /* EMA_A[8] */
	{ pinmux(12), 1, 0 }, /* EMA_A[7] */
	{ pinmux(12), 1, 1 }, /* EMA_A[6] */
	{ pinmux(12), 1, 2 }, /* EMA_A[5] */
	{ pinmux(12), 1, 3 }, /* EMA_A[4] */
	{ pinmux(12), 1, 4 }, /* EMA_A[3] */
	{ pinmux(12), 1, 5 }, /* EMA_A[2] */
	{ pinmux(12), 1, 6 }, /* EMA_A[1] */
	{ pinmux(12), 1, 7 }, /* EMA_A[0] */
};

/* MMC0 pin muxer settings */
const struct pinmux_config mmc0_pins[] = {
	{ pinmux(10), 2, 0 },	/* MMCSD0_CLK */
	{ pinmux(10), 2, 1 },	/* MMCSD0_CMD */
	{ pinmux(10), 2, 2 },	/* MMCSD0_DAT_0 */
	{ pinmux(10), 2, 3 },	/* MMCSD0_DAT_1 */
	{ pinmux(10), 2, 4 },	/* MMCSD0_DAT_2 */
	{ pinmux(10), 2, 5 },	/* MMCSD0_DAT_3 */
	/* DA850 supports only 4-bit mode, remaining pins are not configured */
};
