summaryrefslogtreecommitdiff
path: root/include/asm-arm/arch-at91sam926x/pio.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-arm/arch-at91sam926x/pio.h')
-rw-r--r--include/asm-arm/arch-at91sam926x/pio.h277
1 files changed, 277 insertions, 0 deletions
diff --git a/include/asm-arm/arch-at91sam926x/pio.h b/include/asm-arm/arch-at91sam926x/pio.h
new file mode 100644
index 0000000000..df223f9012
--- /dev/null
+++ b/include/asm-arm/arch-at91sam926x/pio.h
@@ -0,0 +1,277 @@
+/*
+ * (C) Copyright 2005
+ * M Amine SAYA ATEML Rousset, France.
+ * include/asm/arch/pio.h contains pio config and management functions
+ *
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+
+#ifndef __ASM_ARCH_PIO_H
+#define __ASM_ARCH_PIO_H
+
+/*---------------------------------------------------------------------------- */
+/* \fn AT91F_PIO_CfgPeriph */
+/* \brief Enable pins to be drived by peripheral */
+/*---------------------------------------------------------------------------- */
+void __inline__ AT91F_PIO_CfgPeriph(
+ AT91PS_PIO pPio,
+ unsigned int periphAEnable,
+ unsigned int periphBEnable)
+
+{
+ pPio->PIO_ASR = periphAEnable;
+ pPio->PIO_BSR = periphBEnable;
+ pPio->PIO_PDR = (periphAEnable | periphBEnable); /* Set in Periph mode */
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_CfgOutput */
+/* \brief Enable PIO in output mode */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_CfgOutput(
+ AT91PS_PIO pPio,
+ unsigned int pioEnable)
+{
+ pPio->PIO_PER = pioEnable; /* Set in PIO mode */
+ pPio->PIO_OER = pioEnable; /* Configure in Output */
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_CfgInput */
+/* \brief Enable PIO in input mode */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_CfgInput(
+ AT91PS_PIO pPio,
+ unsigned int inputEnable)
+{
+ /* Disable output */
+ pPio->PIO_ODR = inputEnable;
+ pPio->PIO_PER = inputEnable;
+}
+
+/*---------------------------------------------------------------------------- */
+/* \fn AT91F_PIO_GetInput */
+/* \brief Return PIO input value */
+/*----------------------------------------------------------------------------*/
+unsigned int __inline__ AT91F_PIO_GetInput(AT91PS_PIO pPio)
+{
+ return pPio->PIO_PDSR;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_SetOutput */
+/* \brief Set to 1 output PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_SetOutput(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_SODR = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_ClearOutput */
+/* \brief Set to 0 output PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_ClearOutput(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_CODR = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_ForceOutput */
+/* \brief Force output when Direct drive option is enabled */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_ForceOutput(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_ODSR = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_Enable */
+/* \brief Enable PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_Enable(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_PER = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_Disable */
+/* \brief Disable PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_Disable(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_PDR = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_GetStatus */
+/* \brief Return PIO Status */
+/*----------------------------------------------------------------------------*/
+unsigned int __inline__ AT91F_PIO_GetStatus(AT91PS_PIO pPio)
+{
+ return pPio->PIO_PSR;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_OutputEnable */
+/* \brief Output Enable PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_OutputEnable(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_OER = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_OutputDisable */
+/* \brief Output Enable PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_OutputDisable(
+ AT91PS_PIO pPio,
+ unsigned int flag)
+{
+ pPio->PIO_ODR = flag;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_GetOutputStatus */
+/* \brief Return PIO Output Status */
+/*----------------------------------------------------------------------------*/
+unsigned int __inline__ AT91F_PIO_GetOutputStatus(AT91PS_PIO pPio)
+{
+ return pPio->PIO_OSR;
+}
+
+/*----------------------------------------------------------------------------*/
+/* \fn AT91F_PIO_CfgPullup */
+/* \brief Enable pullup on PIO */
+/*----------------------------------------------------------------------------*/
+void __inline__ AT91F_PIO_CfgPullup(
+ AT91PS_PIO pPio,
+ unsigned int pullupEnable)
+{
+ /* Connect or not Pullup */
+ pPio->PIO_PPUDR = ~pullupEnable;
+ pPio->PIO_PPUER = pullupEnable;
+}
+
+#ifdef CONFIG_AT91SAM9261EK
+void __inline__ AT91F_LCDC_TFT_CfgPIO (void)
+{
+ *AT91C_PIOB_PDR = (AT91C_PB1_LCDHSYNC | AT91C_PB2_LCDDOTCK | AT91C_PB3_LCDDEN | AT91C_PB4_LCDCC |
+ AT91C_PB7_LCDD2 | AT91C_PB8_LCDD3 | AT91C_PB9_LCDD4 |
+ AT91C_PB10_LCDD5 | AT91C_PB11_LCDD6 | AT91C_PB12_LCDD7 |
+ AT91C_PB15_LCDD10 | AT91C_PB16_LCDD11 | AT91C_PB17_LCDD12 |
+ AT91C_PB18_LCDD13 | AT91C_PB19_LCDD14 | AT91C_PB20_LCDD15 |
+ AT91C_PB23_LCDD18 | AT91C_PB24_LCDD19 | AT91C_PB25_LCDD20 |
+ AT91C_PB26_LCDD21 | AT91C_PB27_LCDD22 | AT91C_PB28_LCDD23);
+
+ *AT91C_PIOB_BSR = (AT91C_PB23_LCDD18 | AT91C_PB24_LCDD19 | AT91C_PB25_LCDD20 |
+ AT91C_PB26_LCDD21 | AT91C_PB27_LCDD22 | AT91C_PB28_LCDD23);
+
+ /* Configure PA12 in pio to enable LCD */
+ *AT91C_PIOA_PER = AT91C_PIO_PA12;
+
+ *AT91C_PIOA_OER = AT91C_PIO_PA12;
+ *AT91C_PIOA_CODR = AT91C_PIO_PA12;
+}
+#endif
+
+#ifdef CONFIG_AT91SAM9263EK
+void __inline__ AT91F_PIOC_CfgPMC(void){
+ AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOCDE;
+}
+
+void __inline__ AT91F_EMAC_CfgPIO(void)
+{
+ *AT91C_PIOE_PDR = (AT91C_PE21_E_TXCK | AT91C_PE22_E_CRS | AT91C_PE23_E_TX0 |
+ AT91C_PE24_E_TX1 | AT91C_PE25_E_RX0 | AT91C_PE26_E_RX1 |
+ AT91C_PE27_E_RXER | AT91C_PE28_E_TXEN | AT91C_PE29_E_MDC |
+ AT91C_PE30_E_MDIO | AT91C_PE31_E_F100);
+
+ *AT91C_PIOC_PDR = AT91C_PC25_E_RXDV ;
+ *AT91C_PIOC_BSR = AT91C_PC25_E_RXDV ;
+}
+
+void __inline__ AT91F_LCDC_TFT_CfgPIO (void)
+{
+ *AT91C_PIOC_PDR = (AT91C_PC1_LCDHSYNC | AT91C_PC2_LCDDOTCK | AT91C_PC3_LCDEN |
+ AT91C_PC6_LCDD2 | AT91C_PC7_LCDD3 | AT91C_PC8_LCDD4 |
+ AT91C_PC9_LCDD5 | AT91C_PC10_LCDD6 | AT91C_PC11_LCDD7 |
+ AT91C_PC12_LCDD13B | AT91C_PC14_LCDD10 | AT91C_PC15_LCDD11 |
+ AT91C_PC16_LCDD12 | AT91C_PC18_LCDD14 | AT91C_PC19_LCDD15 |
+ AT91C_PC17_LCDD21B | AT91C_PC22_LCDD18 | AT91C_PC23_LCDD19 |
+ AT91C_PC24_LCDD20 | AT91C_PC26_LCDD22 | AT91C_PC27_LCDD23);
+
+ *AT91C_PIOC_BSR = AT91C_PC12_LCDD13B | AT91C_PC17_LCDD21B;
+
+ *AT91C_PIOB_PDR = AT91C_PB9_LCDCC;
+ *AT91C_PIOB_BSR = AT91C_PB9_LCDCC;
+
+ /* Configure PD12 in pio to enable LCD
+ PD12 is set to 1 in pio mode by default
+ after reset. This is just a redo in case
+ something else changes PD12. */
+ *AT91C_PIOD_PER = AT91C_PIO_PD12;
+ *AT91C_PIOD_OER = AT91C_PIO_PD12;
+}
+#endif
+
+#ifdef CONFIG_AT91SAM9RLEK
+void __inline__ AT91F_LCDC_TFT_CfgPIO (void)
+{
+ *AT91C_PIOC_PDR = (AT91C_PC3_LCDCC | AT91C_PC5_LCDHSYNC | AT91C_PC6_LCDDOTCK | AT91C_PC7_LCDDEN |
+ AT91C_PC9_LCDD3 | AT91C_PC10_LCDD4 | AT91C_PC11_LCDD5 |
+ AT91C_PC12_LCDD6 | AT91C_PC13_LCDD7 |
+ AT91C_PC15_LCDD11 | AT91C_PC16_LCDD12 | AT91C_PC17_LCDD13 |
+ AT91C_PC18_LCDD14 | AT91C_PC19_LCDD15 |
+ AT91C_PC20_LCDD18 | AT91C_PC21_LCDD19 | AT91C_PC22_LCDD20 |
+ AT91C_PC23_LCDD21 | AT91C_PC24_LCDD22 | AT91C_PC25_LCDD23
+ );
+
+ *AT91C_PIOC_BSR = (AT91C_PC9_LCDD3 | AT91C_PC10_LCDD4 | AT91C_PC11_LCDD5 |
+ AT91C_PC12_LCDD6 | AT91C_PC13_LCDD7 |
+ AT91C_PC15_LCDD11 | AT91C_PC16_LCDD12 | AT91C_PC17_LCDD13 |
+ AT91C_PC18_LCDD14 | AT91C_PC19_LCDD15 |
+ AT91C_PC20_LCDD18 | AT91C_PC21_LCDD19 | AT91C_PC22_LCDD20 |
+ AT91C_PC23_LCDD21 | AT91C_PC24_LCDD22 | AT91C_PC25_LCDD23
+ );
+
+#if 0
+ /* Configure PD12 in pio to enable LCD
+ PD12 is set to 1 in pio mode by default
+ after reset. This is just a redo in case
+ something else changes PD12. */
+ *AT91C_PIOD_PER = AT91C_PIO_PD12;
+ *AT91C_PIOD_OER = AT91C_PIO_PD12;
+#endif
+}
+#endif
+
+#endif