2011-02-07 11:10:53 +03:00
/*
* arch / arm / mach - tegra / board - trimslice - pinmux . c
*
* Copyright ( C ) 2011 CompuLab , Ltd .
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* 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 .
*
*/
# include <linux/kernel.h>
# include <linux/init.h>
2011-03-07 17:29:24 +03:00
2011-02-07 11:10:53 +03:00
# include <mach/pinmux.h>
2011-03-07 17:29:24 +03:00
# include <mach/gpio.h>
2011-02-07 11:10:53 +03:00
2011-03-07 17:29:24 +03:00
# include "gpio-names.h"
2011-02-07 11:10:53 +03:00
# include "board-trimslice.h"
static __initdata struct tegra_pingroup_config trimslice_pinmux [ ] = {
{ TEGRA_PINGROUP_ATA , TEGRA_MUX_IDE , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_ATB , TEGRA_MUX_SDIO4 , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_ATC , TEGRA_MUX_NAND , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_ATD , TEGRA_MUX_GMI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_ATE , TEGRA_MUX_GMI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
2011-04-17 12:10:35 +04:00
{ TEGRA_PINGROUP_CDEV1 , TEGRA_MUX_PLLA_OUT , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
2011-02-07 11:10:53 +03:00
{ TEGRA_PINGROUP_CDEV2 , TEGRA_MUX_PLLP_OUT4 , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_CRTP , TEGRA_MUX_CRT , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_CSUS , TEGRA_MUX_VI_SENSOR_CLK , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DAP1 , TEGRA_MUX_DAP1 , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_DAP2 , TEGRA_MUX_DAP2 , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
2011-07-14 02:42:47 +04:00
{ TEGRA_PINGROUP_DAP3 , TEGRA_MUX_DAP3 , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
2011-02-07 11:10:53 +03:00
{ TEGRA_PINGROUP_DAP4 , TEGRA_MUX_DAP4 , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DDC , TEGRA_MUX_I2C2 , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_DTA , TEGRA_MUX_VI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DTB , TEGRA_MUX_VI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DTC , TEGRA_MUX_VI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DTD , TEGRA_MUX_VI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DTE , TEGRA_MUX_VI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_DTF , TEGRA_MUX_I2C3 , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_GMA , TEGRA_MUX_SDIO4 , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_GMB , TEGRA_MUX_NAND , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_GMC , TEGRA_MUX_SFLASH , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_GMD , TEGRA_MUX_SFLASH , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_GME , TEGRA_MUX_GMI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_GPU , TEGRA_MUX_UARTA , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_GPU7 , TEGRA_MUX_RTCK , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_GPV , TEGRA_MUX_PCIE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_HDINT , TEGRA_MUX_HDMI , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_I2CP , TEGRA_MUX_I2C , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_IRRX , TEGRA_MUX_UARTB , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_IRTX , TEGRA_MUX_UARTB , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_KBCA , TEGRA_MUX_KBC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_KBCB , TEGRA_MUX_KBC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_KBCC , TEGRA_MUX_KBC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_KBCD , TEGRA_MUX_KBC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_KBCE , TEGRA_MUX_KBC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_KBCF , TEGRA_MUX_KBC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LCSN , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LD0 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD1 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD2 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD3 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD4 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD5 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD6 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD7 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD8 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD9 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD10 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD11 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD12 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD13 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD14 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD15 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD16 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LD17 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LDC , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LDI , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LHP0 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LHP1 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LHP2 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LHS , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LM0 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LM1 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LPP , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LPW0 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LPW1 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LPW2 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LSC0 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LSC1 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LSCK , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LSDA , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LSDI , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LSPI , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LVP0 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_LVP1 , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_LVS , TEGRA_MUX_DISPLAYA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_OWC , TEGRA_MUX_RSVD2 , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_PMC , TEGRA_MUX_PWR_ON , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_PTA , TEGRA_MUX_RSVD3 , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_RM , TEGRA_MUX_I2C , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SDB , TEGRA_MUX_PWM , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SDC , TEGRA_MUX_PWM , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SDD , TEGRA_MUX_PWM , TEGRA_PUPD_PULL_UP , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SDIO1 , TEGRA_MUX_SDIO1 , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SLXA , TEGRA_MUX_PCIE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SLXC , TEGRA_MUX_SDIO3 , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SLXD , TEGRA_MUX_SDIO3 , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SLXK , TEGRA_MUX_PCIE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_SPDI , TEGRA_MUX_SPDIF , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPDO , TEGRA_MUX_SPDIF , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIA , TEGRA_MUX_SPI2 , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIB , TEGRA_MUX_SPI2 , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIC , TEGRA_MUX_SPI2 , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPID , TEGRA_MUX_SPI1 , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIE , TEGRA_MUX_SPI1 , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIF , TEGRA_MUX_SPI1 , TEGRA_PUPD_PULL_DOWN , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIG , TEGRA_MUX_SPI2_ALT , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_SPIH , TEGRA_MUX_SPI2_ALT , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_UAA , TEGRA_MUX_ULPI , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_UAB , TEGRA_MUX_ULPI , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
2011-04-17 12:59:32 +04:00
{ TEGRA_PINGROUP_UAC , TEGRA_MUX_RSVD2 , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
2011-02-07 11:10:53 +03:00
{ TEGRA_PINGROUP_UAD , TEGRA_MUX_IRDA , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_UCA , TEGRA_MUX_UARTC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_UCB , TEGRA_MUX_UARTC , TEGRA_PUPD_PULL_UP , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_UDA , TEGRA_MUX_ULPI , TEGRA_PUPD_NORMAL , TEGRA_TRI_TRISTATE } ,
{ TEGRA_PINGROUP_CK32 , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_DDRC , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_PMCA , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_PMCB , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_PMCC , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_PMCD , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_PMCE , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_XM2C , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
{ TEGRA_PINGROUP_XM2D , TEGRA_MUX_NONE , TEGRA_PUPD_NORMAL , TEGRA_TRI_NORMAL } ,
} ;
2011-03-07 17:29:24 +03:00
static struct tegra_gpio_table gpio_table [ ] = {
{ . gpio = TRIMSLICE_GPIO_SD4_CD , . enable = true } , /* mmc4 cd */
{ . gpio = TRIMSLICE_GPIO_SD4_WP , . enable = true } , /* mmc4 wp */
2011-04-17 12:59:32 +04:00
{ . gpio = TRIMSLICE_GPIO_USB1_MODE , . enable = true } , /* USB1 mode */
{ . gpio = TRIMSLICE_GPIO_USB2_RST , . enable = true } , /* USB2 PHY rst */
2011-03-07 17:29:24 +03:00
} ;
2011-02-07 11:10:53 +03:00
void __init trimslice_pinmux_init ( void )
{
tegra_pinmux_config_table ( trimslice_pinmux , ARRAY_SIZE ( trimslice_pinmux ) ) ;
2011-03-07 17:29:24 +03:00
tegra_gpio_config ( gpio_table , ARRAY_SIZE ( gpio_table ) ) ;
2011-02-07 11:10:53 +03:00
}