void at91_serial0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 0, 1);                /* TXD0 */
-       at91_set_a_periph(AT91_PIO_PORTA, 1, 0);                /* RXD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 0, 1);           /* TXD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 1, 0);           /* RXD0 */
        at91_periph_clk_enable(ATMEL_ID_USART0);
 }
 
 void at91_serial1_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 5, 1);                /* TXD1 */
-       at91_set_a_periph(AT91_PIO_PORTA, 6, 0);                /* RXD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 5, 1);           /* TXD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 6, 0);           /* RXD1 */
        at91_periph_clk_enable(ATMEL_ID_USART1);
 }
 
 void at91_serial2_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 7, 1);                /* TXD2 */
-       at91_set_a_periph(AT91_PIO_PORTA, 8, 0);                /* RXD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 7, 1);           /* TXD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 8, 0);           /* RXD2 */
        at91_periph_clk_enable(ATMEL_ID_USART2);
 }
 
 void at91_serial3_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTC, 22, 1);               /* TXD3 */
-       at91_set_b_periph(AT91_PIO_PORTC, 23, 0);               /* RXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 22, 1);          /* TXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 23, 0);          /* RXD3 */
        at91_periph_clk_enable(ATMEL_ID_USART3);
 }
 
 void at91_seriald_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 10, 1);               /* DTXD */
-       at91_set_a_periph(AT91_PIO_PORTA, 9, 0);                /* DRXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 1);          /* DTXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 9, 0);           /* DRXD */
        at91_periph_clk_enable(ATMEL_ID_SYS);
 }
 
 #ifdef CONFIG_ATMEL_SPI
 void at91_spi0_hw_init(unsigned long cs_mask)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 11, 0);       /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTA, 12, 0);       /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTA, 13, 0);       /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);  /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);  /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);  /* SPI0_SPCK */
 
        at91_periph_clk_enable(ATMEL_ID_SPI0);
 
 
 void at91_spi1_hw_init(unsigned long cs_mask)
 {
-       at91_set_b_periph(AT91_PIO_PORTA, 21, 0);       /* SPI1_MISO */
-       at91_set_b_periph(AT91_PIO_PORTA, 22, 0);       /* SPI1_MOSI */
-       at91_set_b_periph(AT91_PIO_PORTA, 23, 0);       /* SPI1_SPCK */
+       at91_pio3_set_b_periph(AT91_PIO_PORTA, 21, 0);  /* SPI1_MISO */
+       at91_pio3_set_b_periph(AT91_PIO_PORTA, 22, 0);  /* SPI1_MOSI */
+       at91_pio3_set_b_periph(AT91_PIO_PORTA, 23, 0);  /* SPI1_SPCK */
 
        at91_periph_clk_enable(ATMEL_ID_SPI1);
 
 
 void at91_mci_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 17, 0);       /* MCCK */
-       at91_set_a_periph(AT91_PIO_PORTA, 16, 0);       /* MCCDA */
-       at91_set_a_periph(AT91_PIO_PORTA, 15, 0);       /* MCDA0 */
-       at91_set_a_periph(AT91_PIO_PORTA, 18, 0);       /* MCDA1 */
-       at91_set_a_periph(AT91_PIO_PORTA, 19, 0);       /* MCDA2 */
-       at91_set_a_periph(AT91_PIO_PORTA, 20, 0);       /* MCDA3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 17, 0);  /* MCCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 16, 0);  /* MCCDA */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0);  /* MCDA0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 0);  /* MCDA1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 0);  /* MCDA2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 0);  /* MCDA3 */
 
        at91_periph_clk_enable(ATMEL_ID_HSMCI0);
 }
 #ifdef CONFIG_LCD
 void at91_lcd_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTC, 24, 0);       /* LCDDPWR */
-       at91_set_a_periph(AT91_PIO_PORTC, 26, 0);       /* LCDVSYNC */
-       at91_set_a_periph(AT91_PIO_PORTC, 27, 0);       /* LCDHSYNC */
-       at91_set_a_periph(AT91_PIO_PORTC, 28, 0);       /* LCDDOTCK */
-       at91_set_a_periph(AT91_PIO_PORTC, 29, 0);       /* LCDDEN */
-       at91_set_a_periph(AT91_PIO_PORTC, 30, 0);       /* LCDDOTCK */
-
-       at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* LCDD0 */
-       at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* LCDD1 */
-       at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* LCDD2 */
-       at91_set_a_periph(AT91_PIO_PORTC, 3, 0);        /* LCDD3 */
-       at91_set_a_periph(AT91_PIO_PORTC, 4, 0);        /* LCDD4 */
-       at91_set_a_periph(AT91_PIO_PORTC, 5, 0);        /* LCDD5 */
-       at91_set_a_periph(AT91_PIO_PORTC, 6, 0);        /* LCDD6 */
-       at91_set_a_periph(AT91_PIO_PORTC, 7, 0);        /* LCDD7 */
-       at91_set_a_periph(AT91_PIO_PORTC, 8, 0);        /* LCDD8 */
-       at91_set_a_periph(AT91_PIO_PORTC, 9, 0);        /* LCDD9 */
-       at91_set_a_periph(AT91_PIO_PORTC, 10, 0);       /* LCDD10 */
-       at91_set_a_periph(AT91_PIO_PORTC, 11, 0);       /* LCDD11 */
-       at91_set_a_periph(AT91_PIO_PORTC, 12, 0);       /* LCDD12 */
-       at91_set_a_periph(AT91_PIO_PORTC, 13, 0);       /* LCDD13 */
-       at91_set_a_periph(AT91_PIO_PORTC, 14, 0);       /* LCDD14 */
-       at91_set_a_periph(AT91_PIO_PORTC, 15, 0);       /* LCDD15 */
-       at91_set_a_periph(AT91_PIO_PORTC, 16, 0);       /* LCDD16 */
-       at91_set_a_periph(AT91_PIO_PORTC, 17, 0);       /* LCDD17 */
-       at91_set_a_periph(AT91_PIO_PORTC, 18, 0);       /* LCDD18 */
-       at91_set_a_periph(AT91_PIO_PORTC, 19, 0);       /* LCDD19 */
-       at91_set_a_periph(AT91_PIO_PORTC, 20, 0);       /* LCDD20 */
-       at91_set_a_periph(AT91_PIO_PORTC, 21, 0);       /* LCDD21 */
-       at91_set_a_periph(AT91_PIO_PORTC, 22, 0);       /* LCDD22 */
-       at91_set_a_periph(AT91_PIO_PORTC, 23, 0);       /* LCDD23 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 24, 0);  /* LCDDPWR */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 26, 0);  /* LCDVSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 27, 0);  /* LCDHSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 28, 0);  /* LCDDOTCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 29, 0);  /* LCDDEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 30, 0);  /* LCDDOTCK */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* LCDD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* LCDD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* LCDD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 3, 0);   /* LCDD3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 4, 0);   /* LCDD4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0);   /* LCDD5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0);   /* LCDD6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0);   /* LCDD7 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0);   /* LCDD8 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0);   /* LCDD9 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 10, 0);  /* LCDD10 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 11, 0);  /* LCDD11 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 12, 0);  /* LCDD12 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 13, 0);  /* LCDD13 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 14, 0);  /* LCDD14 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 15, 0);  /* LCDD15 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 16, 0);  /* LCDD16 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 17, 0);  /* LCDD17 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 18, 0);  /* LCDD18 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 19, 0);  /* LCDD19 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 20, 0);  /* LCDD20 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 21, 0);  /* LCDD21 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 22, 0);  /* LCDD22 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 23, 0);  /* LCDD23 */
 
        at91_periph_clk_enable(ATMEL_ID_LCDC);
 }
 
 
 void at91_seriald_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 9, 0);        /* DRXD */
-       at91_set_a_periph(AT91_PIO_PORTA, 10, 1);       /* DTXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 9, 0);   /* DRXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 1);  /* DTXD */
 
        at91_periph_clk_enable(ATMEL_ID_SYS);
 }
 
 void at91_serial0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 0, 1);        /* TXD */
-       at91_set_a_periph(AT91_PIO_PORTA, 1, 0);        /* RXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 0, 1);   /* TXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 1, 0);   /* RXD */
 
        at91_periph_clk_enable(ATMEL_ID_USART0);
 }
 
 void at91_serial1_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 5, 1);        /* TXD */
-       at91_set_a_periph(AT91_PIO_PORTA, 6, 0);        /* RXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 5, 1);   /* TXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 6, 0);   /* RXD */
 
        at91_periph_clk_enable(ATMEL_ID_USART1);
 }
 
 void at91_serial2_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 7, 1);        /* TXD */
-       at91_set_a_periph(AT91_PIO_PORTA, 8, 0);        /* RXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 7, 1);   /* TXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 8, 0);   /* RXD */
 
        at91_periph_clk_enable(ATMEL_ID_USART2);
 }
 void at91_mci_hw_init(void)
 {
        /* Initialize the MCI0 */
-       at91_set_a_periph(AT91_PIO_PORTA, 17, 1);       /* MCCK */
-       at91_set_a_periph(AT91_PIO_PORTA, 16, 1);       /* MCCDA */
-       at91_set_a_periph(AT91_PIO_PORTA, 15, 1);       /* MCDA0 */
-       at91_set_a_periph(AT91_PIO_PORTA, 18, 1);       /* MCDA1 */
-       at91_set_a_periph(AT91_PIO_PORTA, 19, 1);       /* MCDA2 */
-       at91_set_a_periph(AT91_PIO_PORTA, 20, 1);       /* MCDA3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 17, 1);  /* MCCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 16, 1);  /* MCCDA */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 1);  /* MCDA0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 1);  /* MCDA1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 1);  /* MCDA2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 1);  /* MCDA3 */
 
        at91_periph_clk_enable(ATMEL_ID_HSMCI0);
 }
 #ifdef CONFIG_ATMEL_SPI
 void at91_spi0_hw_init(unsigned long cs_mask)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 11, 0);       /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTA, 12, 0);       /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTA, 13, 0);       /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);  /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);  /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);  /* SPI0_SPCK */
 
        at91_periph_clk_enable(ATMEL_ID_SPI0);
 
        if (cs_mask & (1 << 0))
-               at91_set_a_periph(AT91_PIO_PORTA, 14, 0);
+               at91_pio3_set_a_periph(AT91_PIO_PORTA, 14, 0);
        if (cs_mask & (1 << 1))
-               at91_set_b_periph(AT91_PIO_PORTA, 7, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTA, 7, 0);
        if (cs_mask & (1 << 2))
-               at91_set_b_periph(AT91_PIO_PORTA, 1, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTA, 1, 0);
        if (cs_mask & (1 << 3))
-               at91_set_b_periph(AT91_PIO_PORTB, 3, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTB, 3, 0);
        if (cs_mask & (1 << 4))
                at91_set_pio_output(AT91_PIO_PORTA, 14, 0);
        if (cs_mask & (1 << 5))
 
 void at91_spi1_hw_init(unsigned long cs_mask)
 {
-       at91_set_b_periph(AT91_PIO_PORTA, 21, 0);       /* SPI1_MISO */
-       at91_set_b_periph(AT91_PIO_PORTA, 22, 0);       /* SPI1_MOSI */
-       at91_set_b_periph(AT91_PIO_PORTA, 23, 0);       /* SPI1_SPCK */
+       at91_pio3_set_b_periph(AT91_PIO_PORTA, 21, 0);  /* SPI1_MISO */
+       at91_pio3_set_b_periph(AT91_PIO_PORTA, 22, 0);  /* SPI1_MOSI */
+       at91_pio3_set_b_periph(AT91_PIO_PORTA, 23, 0);  /* SPI1_SPCK */
 
        at91_periph_clk_enable(ATMEL_ID_SPI1);
 
        if (cs_mask & (1 << 0))
-               at91_set_b_periph(AT91_PIO_PORTA, 8, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTA, 8, 0);
        if (cs_mask & (1 << 1))
-               at91_set_b_periph(AT91_PIO_PORTA, 0, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTA, 0, 0);
        if (cs_mask & (1 << 2))
-               at91_set_b_periph(AT91_PIO_PORTA, 31, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTA, 31, 0);
        if (cs_mask & (1 << 3))
-               at91_set_b_periph(AT91_PIO_PORTA, 30, 0);
+               at91_pio3_set_b_periph(AT91_PIO_PORTA, 30, 0);
        if (cs_mask & (1 << 4))
                at91_set_pio_output(AT91_PIO_PORTA, 8, 0);
        if (cs_mask & (1 << 5))
                /* Enable EMAC0 clock */
                at91_periph_clk_enable(ATMEL_ID_EMAC0);
                /* EMAC0 pins setup */
-               at91_set_a_periph(AT91_PIO_PORTB, 4, 0);        /* ETXCK */
-               at91_set_a_periph(AT91_PIO_PORTB, 3, 0);        /* ERXDV */
-               at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* ERX0 */
-               at91_set_a_periph(AT91_PIO_PORTB, 1, 0);        /* ERX1 */
-               at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* ERXER */
-               at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* ETXEN */
-               at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* ETX0 */
-               at91_set_a_periph(AT91_PIO_PORTB, 10, 0);       /* ETX1 */
-               at91_set_a_periph(AT91_PIO_PORTB, 5, 0);        /* EMDIO */
-               at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* EMDC */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 4, 0);   /* ETXCK */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 3, 0);   /* ERXDV */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 0, 0);   /* ERX0 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 1, 0);   /* ERX1 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 2, 0);   /* ERXER */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 7, 0);   /* ETXEN */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 9, 0);   /* ETX0 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 10, 0);  /* ETX1 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 5, 0);   /* EMDIO */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 6, 0);   /* EMDC */
        }
 
        if (has_emac1()) {
                /* Enable EMAC1 clock */
                at91_periph_clk_enable(ATMEL_ID_EMAC1);
                /* EMAC1 pins setup */
-               at91_set_b_periph(AT91_PIO_PORTC, 29, 0);       /* ETXCK */
-               at91_set_b_periph(AT91_PIO_PORTC, 28, 0);       /* ECRSDV */
-               at91_set_b_periph(AT91_PIO_PORTC, 20, 0);       /* ERXO */
-               at91_set_b_periph(AT91_PIO_PORTC, 21, 0);       /* ERX1 */
-               at91_set_b_periph(AT91_PIO_PORTC, 16, 0);       /* ERXER */
-               at91_set_b_periph(AT91_PIO_PORTC, 27, 0);       /* ETXEN */
-               at91_set_b_periph(AT91_PIO_PORTC, 18, 0);       /* ETX0 */
-               at91_set_b_periph(AT91_PIO_PORTC, 19, 0);       /* ETX1 */
-               at91_set_b_periph(AT91_PIO_PORTC, 31, 0);       /* EMDIO */
-               at91_set_b_periph(AT91_PIO_PORTC, 30, 0);       /* EMDC */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 29, 0);  /* ETXCK */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 28, 0);  /* ECRSDV */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 20, 0);  /* ERXO */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 21, 0);  /* ERX1 */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 16, 0);  /* ERXER */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 27, 0);  /* ETXEN */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 18, 0);  /* ETX0 */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 19, 0);  /* ETX1 */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 31, 0);  /* EMDIO */
+               at91_pio3_set_b_periph(AT91_PIO_PORTC, 30, 0);  /* EMDC */
        }
 
 #ifndef CONFIG_RMII
        /* Only emac0 support MII */
        if (has_emac0()) {
-               at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* ECRS */
-               at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* ECOL */
-               at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* ERX2 */
-               at91_set_a_periph(AT91_PIO_PORTB, 14, 0);       /* ERX3 */
-               at91_set_a_periph(AT91_PIO_PORTB, 15, 0);       /* ERXCK */
-               at91_set_a_periph(AT91_PIO_PORTB, 11, 0);       /* ETX2 */
-               at91_set_a_periph(AT91_PIO_PORTB, 12, 0);       /* ETX3 */
-               at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* ETXER */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 16, 0);  /* ECRS */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 17, 0);  /* ECOL */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 13, 0);  /* ERX2 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 14, 0);  /* ERX3 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 15, 0);  /* ERXCK */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 11, 0);  /* ETX2 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 12, 0);  /* ETX3 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTB, 8, 0);   /* ETXER */
        }
 #endif
 }
 
 
 void at91_serial0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTD, 18, 1);       /* TXD0 */
-       at91_set_a_periph(AT91_PIO_PORTD, 17, 0);       /* RXD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 18, 1);  /* TXD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 17, 0);  /* RXD0 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_USART0);
 
 void at91_serial1_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 29, 1);       /* TXD1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 28, 0);       /* RXD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 29, 1);  /* TXD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 28, 0);  /* RXD1 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_USART1);
 
 void at91_serial2_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTE, 26, 1);       /* TXD2 */
-       at91_set_b_periph(AT91_PIO_PORTE, 25, 0);       /* RXD2 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 26, 1);  /* TXD2 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 25, 0);  /* RXD2 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_USART2);
 
 void at91_seriald_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 31, 1);       /* DTXD */
-       at91_set_a_periph(AT91_PIO_PORTB, 30, 0);       /* DRXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 31, 1);  /* DTXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 30, 0);  /* DRXD */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_DBGU);
 #if defined(CONFIG_ATMEL_SPI)
 void at91_spi0_hw_init(unsigned long cs_mask)
 {
-       at91_set_a_periph(AT91_PIO_PORTD, 10, 0);       /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTD, 11, 0);       /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTD, 12, 0);       /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 10, 0);       /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 11, 0);       /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 12, 0);       /* SPI0_SPCK */
 
        if (cs_mask & (1 << 0))
                at91_set_pio_output(AT91_PIO_PORTD, 13, 1);
 #ifdef CONFIG_GENERIC_ATMEL_MCI
 void at91_mci_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTD, 0, 0);        /* MCI0 CMD */
-       at91_set_a_periph(AT91_PIO_PORTD, 1, 0);        /* MCI0 DA0 */
-       at91_set_a_periph(AT91_PIO_PORTD, 2, 0);        /* MCI0 DA1 */
-       at91_set_a_periph(AT91_PIO_PORTD, 3, 0);        /* MCI0 DA2 */
-       at91_set_a_periph(AT91_PIO_PORTD, 4, 0);        /* MCI0 DA3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 0, 0);   /* MCI0 CMD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 1, 0);   /* MCI0 DA0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 2, 0);   /* MCI0 DA1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 3, 0);        /* MCI0 DA2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 4, 0);        /* MCI0 DA3 */
 #ifdef CONFIG_ATMEL_MCI_8BIT
-       at91_set_a_periph(AT91_PIO_PORTD, 5, 0);        /* MCI0 DA4 */
-       at91_set_a_periph(AT91_PIO_PORTD, 6, 0);        /* MCI0 DA5 */
-       at91_set_a_periph(AT91_PIO_PORTD, 7, 0);        /* MCI0 DA6 */
-       at91_set_a_periph(AT91_PIO_PORTD, 8, 0);        /* MCI0 DA7 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 5, 0);        /* MCI0 DA4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 6, 0);        /* MCI0 DA5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 7, 0);        /* MCI0 DA6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 8, 0);        /* MCI0 DA7 */
 #endif
-       at91_set_a_periph(AT91_PIO_PORTD, 9, 0);        /* MCI0 CLK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 9, 0);        /* MCI0 CLK */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_MCI0);
 #ifdef CONFIG_MACB
 void at91_macb_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTC, 7, 0);        /* ETXCK_EREFCK */
-       at91_set_a_periph(AT91_PIO_PORTC, 5, 0);        /* ERXDV */
-       at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* ERX0 */
-       at91_set_a_periph(AT91_PIO_PORTC, 3, 0);        /* ERX1 */
-       at91_set_a_periph(AT91_PIO_PORTC, 6, 0);        /* ERXER */
-       at91_set_a_periph(AT91_PIO_PORTC, 4, 0);        /* ETXEN */
-       at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* ETX0 */
-       at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* ETX1 */
-       at91_set_a_periph(AT91_PIO_PORTC, 9, 0);        /* EMDIO */
-       at91_set_a_periph(AT91_PIO_PORTC, 8, 0);        /* EMDC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0);   /* ETXCK_EREFCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0);   /* ERXDV */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* ERX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 3, 0);   /* ERX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0);   /* ERXER */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 4, 0);   /* ETXEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* ETX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* ETX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0);   /* EMDIO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0);   /* EMDC */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_EMAC);
 
 void at91_gmac_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* GTX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 1, 0);        /* GTX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* GTX2 */
-       at91_set_a_periph(AT91_PIO_PORTB, 3, 0);        /* GTX3 */
-       at91_set_a_periph(AT91_PIO_PORTB, 4, 0);        /* GRX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 5, 0);        /* GRX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* GRX2 */
-       at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* GRX3 */
-       at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* GTXCK */
-       at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* GTXEN */
-
-       at91_set_a_periph(AT91_PIO_PORTB, 11, 0);       /* GRXCK */
-       at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* GRXER */
-
-       at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* GMDC */
-       at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* GMDIO */
-       at91_set_a_periph(AT91_PIO_PORTB, 18, 0);       /* G125CK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 0, 0);   /* GTX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 1, 0);   /* GTX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 2, 0);   /* GTX2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 3, 0);   /* GTX3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 4, 0);   /* GRX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 5, 0);   /* GRX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 6, 0);   /* GRX2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 7, 0);   /* GRX3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 8, 0);   /* GTXCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 9, 0);   /* GTXEN */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 11, 0);  /* GRXCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 13, 0);  /* GRXER */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 16, 0);  /* GMDC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 17, 0);  /* GMDIO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 18, 0);  /* G125CK */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_GMAC);
 #ifdef CONFIG_LCD
 void at91_lcd_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 24, 0);       /* LCDPWM */
-       at91_set_a_periph(AT91_PIO_PORTA, 25, 0);       /* LCDDISP */
-       at91_set_a_periph(AT91_PIO_PORTA, 26, 0);       /* LCDVSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 27, 0);       /* LCDHSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 28, 0);       /* LCDDOTCK */
-       at91_set_a_periph(AT91_PIO_PORTA, 29, 0);       /* LCDDEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 24, 0);  /* LCDPWM */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 25, 0);  /* LCDDISP */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 26, 0);  /* LCDVSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 27, 0);  /* LCDHSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 28, 0);  /* LCDDOTCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 29, 0);  /* LCDDEN */
 
        /* The lower 16-bit of LCD only available on Port A */
-       at91_set_a_periph(AT91_PIO_PORTA,  0, 0);       /* LCDD0 */
-       at91_set_a_periph(AT91_PIO_PORTA,  1, 0);       /* LCDD1 */
-       at91_set_a_periph(AT91_PIO_PORTA,  2, 0);       /* LCDD2 */
-       at91_set_a_periph(AT91_PIO_PORTA,  3, 0);       /* LCDD3 */
-       at91_set_a_periph(AT91_PIO_PORTA,  4, 0);       /* LCDD4 */
-       at91_set_a_periph(AT91_PIO_PORTA,  5, 0);       /* LCDD5 */
-       at91_set_a_periph(AT91_PIO_PORTA,  6, 0);       /* LCDD6 */
-       at91_set_a_periph(AT91_PIO_PORTA,  7, 0);       /* LCDD7 */
-       at91_set_a_periph(AT91_PIO_PORTA,  8, 0);       /* LCDD8 */
-       at91_set_a_periph(AT91_PIO_PORTA,  9, 0);       /* LCDD9 */
-       at91_set_a_periph(AT91_PIO_PORTA, 10, 0);       /* LCDD10 */
-       at91_set_a_periph(AT91_PIO_PORTA, 11, 0);       /* LCDD11 */
-       at91_set_a_periph(AT91_PIO_PORTA, 12, 0);       /* LCDD12 */
-       at91_set_a_periph(AT91_PIO_PORTA, 13, 0);       /* LCDD13 */
-       at91_set_a_periph(AT91_PIO_PORTA, 14, 0);       /* LCDD14 */
-       at91_set_a_periph(AT91_PIO_PORTA, 15, 0);       /* LCDD15 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  0, 0);  /* LCDD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  1, 0);  /* LCDD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  2, 0);  /* LCDD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  3, 0);  /* LCDD3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  4, 0);  /* LCDD4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  5, 0);  /* LCDD5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  6, 0);  /* LCDD6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  7, 0);  /* LCDD7 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  8, 0);  /* LCDD8 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  9, 0);  /* LCDD9 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 0);  /* LCDD10 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);  /* LCDD11 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);  /* LCDD12 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);  /* LCDD13 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 14, 0);  /* LCDD14 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0);  /* LCDD15 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_LCDC);
 
 #define AT91_ASM_PIOD_ASR      \
        (ATMEL_BASE_PIO + AT91_PIO_PORTD * AT91_ASM_PIO_RANGE + 0x70)
 
+#define PIO_SCDR_DIV           0x3fff  /* Slow Clock Divider Selection for Debouncing Mask */
+
 #ifndef __ASSEMBLY__
 
 typedef struct at91_port {
        u32     puer;           /* 0x64 Pull-up Enable Register */
        u32     pusr;           /* 0x68 Pad Pull-up Status Register */
        u32     reserved4;
-#if defined(CPU_HAS_PIO3)
-       u32     abcdsr1;        /* 0x70 Peripheral ABCD Select Register 1 */
-       u32     abcdsr2;        /* 0x74 Peripheral ABCD Select Register 2 */
-       u32     reserved5[2];
-       u32     ifscdr;         /* 0x80 Input Filter SCLK Disable Register */
-       u32     ifscer;         /* 0x84 Input Filter SCLK Enable Register */
-       u32     ifscsr;         /* 0x88 Input Filter SCLK Status Register */
-       u32     scdr;           /* 0x8C SCLK Divider Debouncing Register */
-       u32     ppddr;          /* 0x90 Pad Pull-down Disable Register */
-       u32     ppder;          /* 0x94 Pad Pull-down Enable Register */
-       u32     ppdsr;          /* 0x98 Pad Pull-down Status Register */
-       u32     reserved6;      /*  */
-#else
-       u32     asr;            /* 0x70 Select A Register */
-       u32     bsr;            /* 0x74 Select B Register */
-       u32     absr;           /* 0x78 AB Select Status Register */
-       u32     reserved5[9];   /*  */
-#endif
+       union {
+               struct {
+                       u32     abcdsr1;        /* 0x70 Peripheral ABCD Select Register 1 */
+                       u32     abcdsr2;        /* 0x74 Peripheral ABCD Select Register 2 */
+                       u32     reserved5[2];
+                       u32     ifscdr;         /* 0x80 Input Filter SCLK Disable Register */
+                       u32     ifscer;         /* 0x84 Input Filter SCLK Enable Register */
+                       u32     ifscsr;         /* 0x88 Input Filter SCLK Status Register */
+                       u32     scdr;           /* 0x8C SCLK Divider Debouncing Register */
+                       u32     ppddr;          /* 0x90 Pad Pull-down Disable Register */
+                       u32     ppder;          /* 0x94 Pad Pull-down Enable Register */
+                       u32     ppdsr;          /* 0x98 Pad Pull-down Status Register */
+                       u32     reserved6;      /*  */
+               } pio3;
+
+               struct {
+                       u32     asr;            /* 0x70 Select A Register */
+                       u32     bsr;            /* 0x74 Select B Register */
+                       u32     absr;           /* 0x78 AB Select Status Register */
+                       u32     reserved5[9];   /*  */
+               } pio2;
+       } mux;
+
        u32     ower;           /* 0xA0 Output Write Enable Register */
        u32     owdr;           /* 0xA4 Output Write Disable Register */
        u32     owsr;           /* OxA8 Output Write Status Register */
-#if defined(CPU_HAS_PIO3)
        u32     reserved7;      /*  */
        u32     aimer;          /* 0xB0 Additional INT Modes Enable Register */
        u32     aimdr;          /* 0xB4 Additional INT Modes Disable Register */
        u32     reserved11[5];  /* */
        u32     schmitt;        /* 0x100 Schmitt Trigger Register */
        u32     reserved12[63];
-#else
-       u32     reserved6[85];
-#endif
 } at91_port_t;
 
 typedef union at91_pio {
 #ifdef CONFIG_AT91_GPIO
 int at91_set_a_periph(unsigned port, unsigned pin, int use_pullup);
 int at91_set_b_periph(unsigned port, unsigned pin, int use_pullup);
-#if defined(CPU_HAS_PIO3)
-int at91_set_c_periph(unsigned port, unsigned pin, int use_pullup);
-int at91_set_d_periph(unsigned port, unsigned pin, int use_pullup);
-int at91_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div);
-int at91_set_pio_pulldown(unsigned port, unsigned pin, int is_on);
-int at91_set_pio_disable_schmitt_trig(unsigned port, unsigned pin);
-#endif
 int at91_set_pio_input(unsigned port, unsigned pin, int use_pullup);
 int at91_set_pio_multi_drive(unsigned port, unsigned pin, int is_on);
 int at91_set_pio_output(unsigned port, unsigned pin, int value);
 int at91_set_pio_deglitch(unsigned port, unsigned pin, int is_on);
 int at91_set_pio_value(unsigned port, unsigned pin, int value);
 int at91_get_pio_value(unsigned port, unsigned pin);
+
+int at91_pio3_set_a_periph(unsigned port, unsigned pin, int use_pullup);
+int at91_pio3_set_b_periph(unsigned port, unsigned pin, int use_pullup);
+int at91_pio3_set_c_periph(unsigned port, unsigned pin, int use_pullup);
+int at91_pio3_set_d_periph(unsigned port, unsigned pin, int use_pullup);
+int at91_pio3_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div);
+int at91_pio3_set_pio_pullup(unsigned port, unsigned pin, int use_pullup);
+int at91_pio3_set_pio_pulldown(unsigned port, unsigned pin, int is_on);
+int at91_pio3_set_pio_disable_schmitt_trig(unsigned port, unsigned pin);
 #endif
 #endif
 
 
  * Other misc defines
  */
 #define ATMEL_PIO_PORTS         4
-#define CPU_HAS_PIO3
-#define PIO_SCDR_DIV            (0x3fff <<  0)  /* Slow Clock Divider Mask */
 #define ATMEL_PMC_UHP          AT91SAM926x_PMC_UHP
 #define ATMEL_ID_UHP           ATMEL_ID_UHPHS
 
 
  * Other misc defines
  */
 #define ATMEL_PIO_PORTS                5
-#define CPU_HAS_PIO3
-#define PIO_SCDR_DIV           0x3fff
 #define CPU_HAS_PCR
 
 /* Timer */
 
  * Other misc defines
  */
 #define ATMEL_PIO_PORTS                5
-#define CPU_HAS_PIO3
-#define PIO_SCDR_DIV           0x3fff
 #define CPU_HAS_PCR
 #define CPU_HAS_H32MXDIV
 
 
        /* Configure ENABLE pin for NandFlash */
        at91_set_pio_output(AT91_PIO_PORTD, 4, 1);
 
-       at91_set_a_periph(AT91_PIO_PORTD, 0, 1);    /* NAND OE */
-       at91_set_a_periph(AT91_PIO_PORTD, 1, 1);    /* NAND WE */
-       at91_set_a_periph(AT91_PIO_PORTD, 2, 1);    /* ALE */
-       at91_set_a_periph(AT91_PIO_PORTD, 3, 1);    /* CLE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 0, 1);    /* NAND OE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 1, 1);    /* NAND WE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 2, 1);    /* ALE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 3, 1);    /* CLE */
 }
 #endif
 
               &smc->cs[2].mode);
 
        /* Configure NCS2 PIN */
-       at91_set_b_periph(AT91_PIO_PORTD, 19, 0);
+       at91_pio3_set_b_periph(AT91_PIO_PORTD, 19, 0);
 }
 #endif
 
 
        /* Enable NandFlash */
        at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
 
-       at91_set_a_periph(AT91_PIO_PORTD, 0, 1);        /* NAND OE */
-       at91_set_a_periph(AT91_PIO_PORTD, 1, 1);        /* NAND WE */
-       at91_set_a_periph(AT91_PIO_PORTD, 2, 1);        /* NAND ALE */
-       at91_set_a_periph(AT91_PIO_PORTD, 3, 1);        /* NAND CLE */
-       at91_set_a_periph(AT91_PIO_PORTD, 6, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 7, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 8, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 9, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 10, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 11, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 12, 1);
-       at91_set_a_periph(AT91_PIO_PORTD, 13, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 0, 1);   /* NAND OE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 1, 1);   /* NAND WE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 2, 1);   /* NAND ALE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 3, 1);   /* NAND CLE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 6, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 7, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 8, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 9, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 10, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 11, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 12, 1);
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 13, 1);
 }
 #endif
 
 void lcd_enable(void)
 {
        if (has_lcdc())
-               at91_set_a_periph(AT91_PIO_PORTC, 29, 1);       /* power up */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 29, 1);  /* power up */
 }
 
 void lcd_disable(void)
 {
        if (has_lcdc())
-               at91_set_a_periph(AT91_PIO_PORTC, 29, 0);       /* power down */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 29, 0);  /* power down */
 }
 
 static void at91sam9x5ek_lcd_hw_init(void)
 {
        if (has_lcdc()) {
-               at91_set_a_periph(AT91_PIO_PORTC, 26, 0);       /* LCDPWM */
-               at91_set_a_periph(AT91_PIO_PORTC, 27, 0);       /* LCDVSYNC */
-               at91_set_a_periph(AT91_PIO_PORTC, 28, 0);       /* LCDHSYNC */
-               at91_set_a_periph(AT91_PIO_PORTC, 24, 0);       /* LCDDISP */
-               at91_set_a_periph(AT91_PIO_PORTC, 29, 0);       /* LCDDEN */
-               at91_set_a_periph(AT91_PIO_PORTC, 30, 0);       /* LCDPCK */
-
-               at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* LCDD0 */
-               at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* LCDD1 */
-               at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* LCDD2 */
-               at91_set_a_periph(AT91_PIO_PORTC, 3, 0);        /* LCDD3 */
-               at91_set_a_periph(AT91_PIO_PORTC, 4, 0);        /* LCDD4 */
-               at91_set_a_periph(AT91_PIO_PORTC, 5, 0);        /* LCDD5 */
-               at91_set_a_periph(AT91_PIO_PORTC, 6, 0);        /* LCDD6 */
-               at91_set_a_periph(AT91_PIO_PORTC, 7, 0);        /* LCDD7 */
-               at91_set_a_periph(AT91_PIO_PORTC, 8, 0);        /* LCDD8 */
-               at91_set_a_periph(AT91_PIO_PORTC, 9, 0);        /* LCDD9 */
-               at91_set_a_periph(AT91_PIO_PORTC, 10, 0);       /* LCDD10 */
-               at91_set_a_periph(AT91_PIO_PORTC, 11, 0);       /* LCDD11 */
-               at91_set_a_periph(AT91_PIO_PORTC, 12, 0);       /* LCDD12 */
-               at91_set_a_periph(AT91_PIO_PORTC, 13, 0);       /* LCDD13 */
-               at91_set_a_periph(AT91_PIO_PORTC, 14, 0);       /* LCDD14 */
-               at91_set_a_periph(AT91_PIO_PORTC, 15, 0);       /* LCDD15 */
-               at91_set_a_periph(AT91_PIO_PORTC, 16, 0);       /* LCDD16 */
-               at91_set_a_periph(AT91_PIO_PORTC, 17, 0);       /* LCDD17 */
-               at91_set_a_periph(AT91_PIO_PORTC, 18, 0);       /* LCDD18 */
-               at91_set_a_periph(AT91_PIO_PORTC, 19, 0);       /* LCDD19 */
-               at91_set_a_periph(AT91_PIO_PORTC, 20, 0);       /* LCDD20 */
-               at91_set_a_periph(AT91_PIO_PORTC, 21, 0);       /* LCDD21 */
-               at91_set_a_periph(AT91_PIO_PORTC, 22, 0);       /* LCDD22 */
-               at91_set_a_periph(AT91_PIO_PORTC, 23, 0);       /* LCDD23 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 26, 0);  /* LCDPWM */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 27, 0);  /* LCDVSYNC */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 28, 0);  /* LCDHSYNC */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 24, 0);  /* LCDDISP */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 29, 0);  /* LCDDEN */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 30, 0);  /* LCDPCK */
+
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* LCDD0 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* LCDD1 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* LCDD2 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 3, 0);   /* LCDD3 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 4, 0);   /* LCDD4 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0);   /* LCDD5 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0);   /* LCDD6 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0);   /* LCDD7 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0);   /* LCDD8 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0);   /* LCDD9 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 10, 0);  /* LCDD10 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 11, 0);  /* LCDD11 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 12, 0);  /* LCDD12 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 13, 0);  /* LCDD13 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 14, 0);  /* LCDD14 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 15, 0);  /* LCDD15 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 16, 0);  /* LCDD16 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 17, 0);  /* LCDD17 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 18, 0);  /* LCDD18 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 19, 0);  /* LCDD19 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 20, 0);  /* LCDD20 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 21, 0);  /* LCDD21 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 22, 0);  /* LCDD22 */
+               at91_pio3_set_a_periph(AT91_PIO_PORTC, 23, 0);  /* LCDD23 */
 
                at91_periph_clk_enable(ATMEL_ID_LCDC);
        }
 
               &smc->cs[0].mode);
 
        /* Address pin (A1 ~ A23) configuration */
-       at91_set_a_periph(AT91_PIO_PORTE, 1, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 2, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 3, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 4, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 5, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 6, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 7, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 8, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 9, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 10, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 11, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 12, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 13, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 14, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 15, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 16, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 17, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 18, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 19, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 20, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 21, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 22, 0);
-       at91_set_a_periph(AT91_PIO_PORTE, 23, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 1, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 2, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 3, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 4, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 5, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 6, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 7, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 8, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 9, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 10, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 11, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 12, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 13, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 14, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 15, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 16, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 17, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 18, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 19, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 20, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 21, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 22, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 23, 0);
        /* CS0 pin configuration */
-       at91_set_a_periph(AT91_PIO_PORTE, 26, 0);
+       at91_pio3_set_a_periph(AT91_PIO_PORTE, 26, 0);
 }
 #endif
 
        gd->fb_base = CONFIG_SAMA5D3_LCD_BASE;
 
        /* The higher 8 bit of LCD is board related */
-       at91_set_c_periph(AT91_PIO_PORTC, 14, 0);       /* LCDD16 */
-       at91_set_c_periph(AT91_PIO_PORTC, 13, 0);       /* LCDD17 */
-       at91_set_c_periph(AT91_PIO_PORTC, 12, 0);       /* LCDD18 */
-       at91_set_c_periph(AT91_PIO_PORTC, 11, 0);       /* LCDD19 */
-       at91_set_c_periph(AT91_PIO_PORTC, 10, 0);       /* LCDD20 */
-       at91_set_c_periph(AT91_PIO_PORTC, 15, 0);       /* LCDD21 */
-       at91_set_c_periph(AT91_PIO_PORTE, 27, 0);       /* LCDD22 */
-       at91_set_c_periph(AT91_PIO_PORTE, 28, 0);       /* LCDD23 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTC, 14, 0);  /* LCDD16 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTC, 13, 0);  /* LCDD17 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTC, 12, 0);  /* LCDD18 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTC, 11, 0);  /* LCDD19 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTC, 10, 0);  /* LCDD20 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTC, 15, 0);  /* LCDD21 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 27, 0);  /* LCDD22 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 28, 0);  /* LCDD23 */
 
        /* Configure lower 16 bit of LCD and enable clock */
        at91_lcd_hw_init();
 
 
 static void sama5d4_xplained_spi0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* SPI0_SPCK */
 
        at91_set_pio_output(AT91_PIO_PORTC, 3, 1);      /* SPI0_CS0 */
 
               AT91_SMC_MODE_TDF_CYCLE(3),
               &smc->cs[3].mode);
 
-       at91_set_a_periph(AT91_PIO_PORTC, 5, 0);        /* D0 */
-       at91_set_a_periph(AT91_PIO_PORTC, 6, 0);        /* D1 */
-       at91_set_a_periph(AT91_PIO_PORTC, 7, 0);        /* D2 */
-       at91_set_a_periph(AT91_PIO_PORTC, 8, 0);        /* D3 */
-       at91_set_a_periph(AT91_PIO_PORTC, 9, 0);        /* D4 */
-       at91_set_a_periph(AT91_PIO_PORTC, 10, 0);       /* D5 */
-       at91_set_a_periph(AT91_PIO_PORTC, 11, 0);       /* D6 */
-       at91_set_a_periph(AT91_PIO_PORTC, 12, 0);       /* D7 */
-       at91_set_a_periph(AT91_PIO_PORTC, 13, 0);       /* RE */
-       at91_set_a_periph(AT91_PIO_PORTC, 14, 0);       /* WE */
-       at91_set_a_periph(AT91_PIO_PORTC, 15, 1);       /* NCS */
-       at91_set_a_periph(AT91_PIO_PORTC, 16, 1);       /* RDY */
-       at91_set_a_periph(AT91_PIO_PORTC, 17, 1);       /* ALE */
-       at91_set_a_periph(AT91_PIO_PORTC, 18, 1);       /* CLE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0);   /* D0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0);   /* D1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0);   /* D2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0);   /* D3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0);   /* D4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 10, 0);  /* D5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 11, 0);  /* D6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 12, 0);  /* D7 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 13, 0);  /* RE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 14, 0);  /* WE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 15, 1);  /* NCS */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 16, 1);  /* RDY */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 17, 1);  /* ALE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 18, 1);  /* CLE */
 }
 #endif
 
 
 static void sama5d4_xplained_lcd_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 24, 0);       /* LCDPWM */
-       at91_set_a_periph(AT91_PIO_PORTA, 25, 0);       /* LCDDISP */
-       at91_set_a_periph(AT91_PIO_PORTA, 26, 0);       /* LCDVSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 27, 0);       /* LCDHSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 28, 0);       /* LCDDOTCK */
-       at91_set_a_periph(AT91_PIO_PORTA, 29, 0);       /* LCDDEN */
-
-       at91_set_a_periph(AT91_PIO_PORTA,  0, 0);       /* LCDD0 */
-       at91_set_a_periph(AT91_PIO_PORTA,  1, 0);       /* LCDD1 */
-       at91_set_a_periph(AT91_PIO_PORTA,  2, 0);       /* LCDD2 */
-       at91_set_a_periph(AT91_PIO_PORTA,  3, 0);       /* LCDD3 */
-       at91_set_a_periph(AT91_PIO_PORTA,  4, 0);       /* LCDD4 */
-       at91_set_a_periph(AT91_PIO_PORTA,  5, 0);       /* LCDD5 */
-       at91_set_a_periph(AT91_PIO_PORTA,  6, 0);       /* LCDD6 */
-       at91_set_a_periph(AT91_PIO_PORTA,  7, 0);       /* LCDD7 */
-
-       at91_set_a_periph(AT91_PIO_PORTA,  8, 0);       /* LCDD9 */
-       at91_set_a_periph(AT91_PIO_PORTA,  9, 0);       /* LCDD8 */
-       at91_set_a_periph(AT91_PIO_PORTA, 10, 0);       /* LCDD10 */
-       at91_set_a_periph(AT91_PIO_PORTA, 11, 0);       /* LCDD11 */
-       at91_set_a_periph(AT91_PIO_PORTA, 12, 0);       /* LCDD12 */
-       at91_set_a_periph(AT91_PIO_PORTA, 13, 0);       /* LCDD13 */
-       at91_set_a_periph(AT91_PIO_PORTA, 14, 0);       /* LCDD14 */
-       at91_set_a_periph(AT91_PIO_PORTA, 15, 0);       /* LCDD15 */
-
-       at91_set_a_periph(AT91_PIO_PORTA, 16, 0);       /* LCDD16 */
-       at91_set_a_periph(AT91_PIO_PORTA, 17, 0);       /* LCDD17 */
-       at91_set_a_periph(AT91_PIO_PORTA, 18, 0);       /* LCDD18 */
-       at91_set_a_periph(AT91_PIO_PORTA, 19, 0);       /* LCDD19 */
-       at91_set_a_periph(AT91_PIO_PORTA, 20, 0);       /* LCDD20 */
-       at91_set_a_periph(AT91_PIO_PORTA, 21, 0);       /* LCDD21 */
-       at91_set_a_periph(AT91_PIO_PORTA, 22, 0);       /* LCDD22 */
-       at91_set_a_periph(AT91_PIO_PORTA, 23, 0);       /* LCDD23 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 24, 0);  /* LCDPWM */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 25, 0);  /* LCDDISP */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 26, 0);  /* LCDVSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 27, 0);  /* LCDHSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 28, 0);  /* LCDDOTCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 29, 0);  /* LCDDEN */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  0, 0);  /* LCDD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  1, 0);  /* LCDD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  2, 0);  /* LCDD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  3, 0);  /* LCDD3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  4, 0);  /* LCDD4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  5, 0);  /* LCDD5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  6, 0);  /* LCDD6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  7, 0);  /* LCDD7 */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  8, 0);  /* LCDD9 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  9, 0);  /* LCDD8 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 0);  /* LCDD10 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);  /* LCDD11 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);  /* LCDD12 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);  /* LCDD13 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 14, 0);  /* LCDD14 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0);  /* LCDD15 */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 16, 0);  /* LCDD16 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 17, 0);  /* LCDD17 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 0);  /* LCDD18 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 0);  /* LCDD19 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 0);  /* LCDD20 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 21, 0);  /* LCDD21 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 22, 0);  /* LCDD22 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 23, 0);  /* LCDD23 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_LCDC);
 #ifdef CONFIG_GENERIC_ATMEL_MCI
 void sama5d4_xplained_mci1_hw_init(void)
 {
-       at91_set_c_periph(AT91_PIO_PORTE, 19, 1);       /* MCI1 CDA */
-       at91_set_c_periph(AT91_PIO_PORTE, 20, 1);       /* MCI1 DA0 */
-       at91_set_c_periph(AT91_PIO_PORTE, 21, 1);       /* MCI1 DA1 */
-       at91_set_c_periph(AT91_PIO_PORTE, 22, 1);       /* MCI1 DA2 */
-       at91_set_c_periph(AT91_PIO_PORTE, 23, 1);       /* MCI1 DA3 */
-       at91_set_c_periph(AT91_PIO_PORTE, 18, 0);       /* MCI1 CLK */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 19, 1);  /* MCI1 CDA */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 20, 1);  /* MCI1 DA0 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 21, 1);  /* MCI1 DA1 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 22, 1);  /* MCI1 DA2 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 23, 1);  /* MCI1 DA3 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 18, 0);  /* MCI1 CLK */
 
        /*
         * As the mci io internal pull down is too strong, so if the io needs
         * the power consumption will increase, so disable the interanl pull
         * down to save the power.
         */
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 18, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 19, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 20, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 21, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 22, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 23, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 18, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 19, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 20, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 21, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 22, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 23, 0);
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_MCI1);
 #ifdef CONFIG_MACB
 void sama5d4_xplained_macb0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* ETXCK_EREFCK */
-       at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* ERXDV */
-       at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* ERX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* ERX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* ERXER */
-       at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* ETXEN */
-       at91_set_a_periph(AT91_PIO_PORTB, 12, 0);       /* ETX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* ETX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* EMDIO */
-       at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* EMDC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 0, 0);   /* ETXCK_EREFCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 6, 0);   /* ERXDV */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 8, 0);   /* ERX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 9, 0);   /* ERX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 7, 0);   /* ERXER */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 2, 0);   /* ETXEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 12, 0);  /* ETX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 13, 0);  /* ETX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 17, 0);  /* EMDIO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 16, 0);  /* EMDC */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_GMAC0);
 
 static void sama5d4_xplained_serial3_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTE, 17, 1);       /* TXD3 */
-       at91_set_b_periph(AT91_PIO_PORTE, 16, 0);       /* RXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 17, 1);  /* TXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 16, 0);  /* RXD3 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_USART3);
 
 
 static void sama5d4ek_spi0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* SPI0_SPCK */
 
        at91_set_pio_output(AT91_PIO_PORTC, 3, 1);      /* SPI0_CS0 */
 
               AT91_SMC_MODE_TDF_CYCLE(3),
               &smc->cs[3].mode);
 
-       at91_set_a_periph(AT91_PIO_PORTC, 5, 0);        /* D0 */
-       at91_set_a_periph(AT91_PIO_PORTC, 6, 0);        /* D1 */
-       at91_set_a_periph(AT91_PIO_PORTC, 7, 0);        /* D2 */
-       at91_set_a_periph(AT91_PIO_PORTC, 8, 0);        /* D3 */
-       at91_set_a_periph(AT91_PIO_PORTC, 9, 0);        /* D4 */
-       at91_set_a_periph(AT91_PIO_PORTC, 10, 0);       /* D5 */
-       at91_set_a_periph(AT91_PIO_PORTC, 11, 0);       /* D6 */
-       at91_set_a_periph(AT91_PIO_PORTC, 12, 0);       /* D7 */
-       at91_set_a_periph(AT91_PIO_PORTC, 13, 0);       /* RE */
-       at91_set_a_periph(AT91_PIO_PORTC, 14, 0);       /* WE */
-       at91_set_a_periph(AT91_PIO_PORTC, 15, 1);       /* NCS */
-       at91_set_a_periph(AT91_PIO_PORTC, 16, 1);       /* RDY */
-       at91_set_a_periph(AT91_PIO_PORTC, 17, 1);       /* ALE */
-       at91_set_a_periph(AT91_PIO_PORTC, 18, 1);       /* CLE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0);   /* D0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0);   /* D1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0);   /* D2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0);   /* D3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0);   /* D4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 10, 0);  /* D5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 11, 0);  /* D6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 12, 0);  /* D7 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 13, 0);  /* RE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 14, 0);  /* WE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 15, 1);  /* NCS */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 16, 1);  /* RDY */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 17, 1);  /* ALE */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 18, 1);  /* CLE */
 }
 #endif
 
 
 static void sama5d4ek_lcd_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 24, 0);       /* LCDPWM */
-       at91_set_a_periph(AT91_PIO_PORTA, 25, 0);       /* LCDDISP */
-       at91_set_a_periph(AT91_PIO_PORTA, 26, 0);       /* LCDVSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 27, 0);       /* LCDHSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 28, 0);       /* LCDDOTCK */
-       at91_set_a_periph(AT91_PIO_PORTA, 29, 0);       /* LCDDEN */
-
-       at91_set_a_periph(AT91_PIO_PORTA,  2, 0);       /* LCDD2 */
-       at91_set_a_periph(AT91_PIO_PORTA,  3, 0);       /* LCDD3 */
-       at91_set_a_periph(AT91_PIO_PORTA,  4, 0);       /* LCDD4 */
-       at91_set_a_periph(AT91_PIO_PORTA,  5, 0);       /* LCDD5 */
-       at91_set_a_periph(AT91_PIO_PORTA,  6, 0);       /* LCDD6 */
-       at91_set_a_periph(AT91_PIO_PORTA,  7, 0);       /* LCDD7 */
-
-       at91_set_a_periph(AT91_PIO_PORTA, 10, 0);       /* LCDD10 */
-       at91_set_a_periph(AT91_PIO_PORTA, 11, 0);       /* LCDD11 */
-       at91_set_a_periph(AT91_PIO_PORTA, 12, 0);       /* LCDD12 */
-       at91_set_a_periph(AT91_PIO_PORTA, 13, 0);       /* LCDD13 */
-       at91_set_a_periph(AT91_PIO_PORTA, 14, 0);       /* LCDD14 */
-       at91_set_a_periph(AT91_PIO_PORTA, 15, 0);       /* LCDD15 */
-
-       at91_set_a_periph(AT91_PIO_PORTA, 18, 0);       /* LCDD18 */
-       at91_set_a_periph(AT91_PIO_PORTA, 19, 0);       /* LCDD19 */
-       at91_set_a_periph(AT91_PIO_PORTA, 20, 0);       /* LCDD20 */
-       at91_set_a_periph(AT91_PIO_PORTA, 21, 0);       /* LCDD21 */
-       at91_set_a_periph(AT91_PIO_PORTA, 22, 0);       /* LCDD22 */
-       at91_set_a_periph(AT91_PIO_PORTA, 23, 0);       /* LCDD23 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 24, 0);  /* LCDPWM */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 25, 0);  /* LCDDISP */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 26, 0);  /* LCDVSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 27, 0);  /* LCDHSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 28, 0);  /* LCDDOTCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 29, 0);  /* LCDDEN */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  2, 0);  /* LCDD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  3, 0);  /* LCDD3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  4, 0);  /* LCDD4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  5, 0);  /* LCDD5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  6, 0);  /* LCDD6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  7, 0);  /* LCDD7 */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 0);  /* LCDD10 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);  /* LCDD11 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);  /* LCDD12 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);  /* LCDD13 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 14, 0);  /* LCDD14 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0);  /* LCDD15 */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 0);  /* LCDD18 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 0);  /* LCDD19 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 0);  /* LCDD20 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 21, 0);  /* LCDD21 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 22, 0);  /* LCDD22 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 23, 0);  /* LCDD23 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_LCDC);
 #ifdef CONFIG_GENERIC_ATMEL_MCI
 void sama5d4ek_mci1_hw_init(void)
 {
-       at91_set_c_periph(AT91_PIO_PORTE, 19, 1);       /* MCI1 CDA */
-       at91_set_c_periph(AT91_PIO_PORTE, 20, 1);       /* MCI1 DA0 */
-       at91_set_c_periph(AT91_PIO_PORTE, 21, 1);       /* MCI1 DA1 */
-       at91_set_c_periph(AT91_PIO_PORTE, 22, 1);       /* MCI1 DA2 */
-       at91_set_c_periph(AT91_PIO_PORTE, 23, 1);       /* MCI1 DA3 */
-       at91_set_c_periph(AT91_PIO_PORTE, 18, 0);       /* MCI1 CLK */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 19, 1);  /* MCI1 CDA */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 20, 1);  /* MCI1 DA0 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 21, 1);  /* MCI1 DA1 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 22, 1);  /* MCI1 DA2 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 23, 1);  /* MCI1 DA3 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 18, 0);  /* MCI1 CLK */
 
        /*
         * As the mci io internal pull down is too strong, so if the io needs
         * the power consumption will increase, so disable the interanl pull
         * down to save the power.
         */
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 18, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 19, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 20, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 21, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 22, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 23, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 18, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 19, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 20, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 21, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 22, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 23, 0);
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_MCI1);
 #ifdef CONFIG_MACB
 void sama5d4ek_macb0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* ETXCK_EREFCK */
-       at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* ERXDV */
-       at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* ERX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* ERX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* ERXER */
-       at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* ETXEN */
-       at91_set_a_periph(AT91_PIO_PORTB, 12, 0);       /* ETX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* ETX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* EMDIO */
-       at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* EMDC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 0, 0);   /* ETXCK_EREFCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 6, 0);   /* ERXDV */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 8, 0);   /* ERX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 9, 0);   /* ERX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 7, 0);   /* ERXER */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 2, 0);   /* ETXEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 12, 0);  /* ETX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 13, 0);  /* ETX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 17, 0);  /* EMDIO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 16, 0);  /* EMDC */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_GMAC0);
 
 static void sama5d4ek_serial3_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTE, 17, 1);       /* TXD3 */
-       at91_set_b_periph(AT91_PIO_PORTE, 16, 0);       /* RXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 17, 1);  /* TXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 16, 0);  /* RXD3 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_USART3);
 
 
 static void ma5d4evk_spi0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* SPI0_SPCK */
 
        at91_set_pio_output(AT91_PIO_PORTC, 3, 1);      /* SPI0_CS0 */
 
 
 static void ma5d4evk_lcd_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTA, 24, 1);       /* LCDPWM */
-       at91_set_a_periph(AT91_PIO_PORTA, 25, 0);       /* LCDDISP */
-       at91_set_a_periph(AT91_PIO_PORTA, 26, 0);       /* LCDVSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 27, 0);       /* LCDHSYNC */
-       at91_set_a_periph(AT91_PIO_PORTA, 28, 0);       /* LCDDOTCK */
-       at91_set_a_periph(AT91_PIO_PORTA, 29, 1);       /* LCDDEN */
-
-       at91_set_a_periph(AT91_PIO_PORTA,  0, 0);       /* LCDD0 */
-       at91_set_a_periph(AT91_PIO_PORTA,  1, 0);       /* LCDD1 */
-       at91_set_a_periph(AT91_PIO_PORTA,  2, 0);       /* LCDD2 */
-       at91_set_a_periph(AT91_PIO_PORTA,  3, 0);       /* LCDD3 */
-       at91_set_a_periph(AT91_PIO_PORTA,  4, 0);       /* LCDD4 */
-       at91_set_a_periph(AT91_PIO_PORTA,  5, 0);       /* LCDD5 */
-       at91_set_a_periph(AT91_PIO_PORTA,  6, 0);       /* LCDD6 */
-       at91_set_a_periph(AT91_PIO_PORTA,  7, 0);       /* LCDD7 */
-
-       at91_set_a_periph(AT91_PIO_PORTA,  8, 0);       /* LCDD9 */
-       at91_set_a_periph(AT91_PIO_PORTA,  9, 0);       /* LCDD8 */
-       at91_set_a_periph(AT91_PIO_PORTA, 10, 0);       /* LCDD10 */
-       at91_set_a_periph(AT91_PIO_PORTA, 11, 0);       /* LCDD11 */
-       at91_set_a_periph(AT91_PIO_PORTA, 12, 0);       /* LCDD12 */
-       at91_set_a_periph(AT91_PIO_PORTA, 13, 0);       /* LCDD13 */
-       at91_set_a_periph(AT91_PIO_PORTA, 14, 0);       /* LCDD14 */
-       at91_set_a_periph(AT91_PIO_PORTA, 15, 0);       /* LCDD15 */
-
-       at91_set_a_periph(AT91_PIO_PORTA, 16, 0);       /* LCDD16 */
-       at91_set_a_periph(AT91_PIO_PORTA, 17, 0);       /* LCDD17 */
-       at91_set_a_periph(AT91_PIO_PORTA, 18, 0);       /* LCDD18 */
-       at91_set_a_periph(AT91_PIO_PORTA, 19, 0);       /* LCDD19 */
-       at91_set_a_periph(AT91_PIO_PORTA, 20, 0);       /* LCDD20 */
-       at91_set_a_periph(AT91_PIO_PORTA, 21, 0);       /* LCDD21 */
-       at91_set_a_periph(AT91_PIO_PORTA, 22, 0);       /* LCDD22 */
-       at91_set_a_periph(AT91_PIO_PORTA, 23, 0);       /* LCDD23 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 24, 1);  /* LCDPWM */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 25, 0);  /* LCDDISP */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 26, 0);  /* LCDVSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 27, 0);  /* LCDHSYNC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 28, 0);  /* LCDDOTCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 29, 1);  /* LCDDEN */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  0, 0);  /* LCDD0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  1, 0);  /* LCDD1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  2, 0);  /* LCDD2 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  3, 0);  /* LCDD3 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  4, 0);  /* LCDD4 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  5, 0);  /* LCDD5 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  6, 0);  /* LCDD6 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  7, 0);  /* LCDD7 */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  8, 0);  /* LCDD9 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA,  9, 0);  /* LCDD8 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 0);  /* LCDD10 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);  /* LCDD11 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);  /* LCDD12 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);  /* LCDD13 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 14, 0);  /* LCDD14 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0);  /* LCDD15 */
+
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 16, 0);  /* LCDD16 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 17, 0);  /* LCDD17 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 0);  /* LCDD18 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 0);  /* LCDD19 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 0);  /* LCDD20 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 21, 0);  /* LCDD21 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 22, 0);  /* LCDD22 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTA, 23, 0);  /* LCDD23 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_LCDC);
 /* On-SoM eMMC */
 void ma5d4evk_mci0_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTC, 5, 1);        /* MCI1 CDA */
-       at91_set_b_periph(AT91_PIO_PORTC, 6, 1);        /* MCI1 DA0 */
-       at91_set_b_periph(AT91_PIO_PORTC, 7, 1);        /* MCI1 DA1 */
-       at91_set_b_periph(AT91_PIO_PORTC, 8, 1);        /* MCI1 DA2 */
-       at91_set_b_periph(AT91_PIO_PORTC, 9, 1);        /* MCI1 DA3 */
-       at91_set_b_periph(AT91_PIO_PORTC, 10, 1);       /* MCI1 DA4 */
-       at91_set_b_periph(AT91_PIO_PORTC, 11, 1);       /* MCI1 DA5 */
-       at91_set_b_periph(AT91_PIO_PORTC, 12, 1);       /* MCI1 DA6 */
-       at91_set_b_periph(AT91_PIO_PORTC, 13, 1);       /* MCI1 DA7 */
-       at91_set_b_periph(AT91_PIO_PORTC, 4, 0);        /* MCI1 CLK */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 5, 1);   /* MCI1 CDA */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 6, 1);   /* MCI1 DA0 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 7, 1);   /* MCI1 DA1 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 8, 1);   /* MCI1 DA2 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 9, 1);   /* MCI1 DA3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 10, 1);  /* MCI1 DA4 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 11, 1);  /* MCI1 DA5 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 12, 1);  /* MCI1 DA6 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 13, 1);  /* MCI1 DA7 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 4, 0);   /* MCI1 CLK */
 
        /*
         * As the mci io internal pull down is too strong, so if the io needs
         * the power consumption will increase, so disable the internal pull
         * down to save the power.
         */
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 5, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 6, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 7, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 8, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 9, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 10, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 11, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 12, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 13, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 4, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 5, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 6, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 7, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 8, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 9, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 10, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 11, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 12, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 13, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 4, 0);
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_MCI0);
 /* On-board MicroSD slot */
 void ma5d4evk_mci1_hw_init(void)
 {
-       at91_set_c_periph(AT91_PIO_PORTE, 19, 1);       /* MCI1 CDA */
-       at91_set_c_periph(AT91_PIO_PORTE, 20, 1);       /* MCI1 DA0 */
-       at91_set_c_periph(AT91_PIO_PORTE, 21, 1);       /* MCI1 DA1 */
-       at91_set_c_periph(AT91_PIO_PORTE, 22, 1);       /* MCI1 DA2 */
-       at91_set_c_periph(AT91_PIO_PORTE, 23, 1);       /* MCI1 DA3 */
-       at91_set_c_periph(AT91_PIO_PORTE, 18, 0);       /* MCI1 CLK */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 19, 1);  /* MCI1 CDA */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 20, 1);  /* MCI1 DA0 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 21, 1);  /* MCI1 DA1 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 22, 1);  /* MCI1 DA2 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 23, 1);  /* MCI1 DA3 */
+       at91_pio3_set_c_periph(AT91_PIO_PORTE, 18, 0);  /* MCI1 CLK */
 
        /*
         * As the mci io internal pull down is too strong, so if the io needs
         * the power consumption will increase, so disable the internal pull
         * down to save the power.
         */
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 18, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 19, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 20, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 21, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 22, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 23, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 18, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 19, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 20, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 21, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 22, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 23, 0);
 
        /* Deal with WP pin on the microSD slot. */
        at91_set_pio_output(AT91_PIO_PORTE, 16, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 16, 1);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 16, 1);
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_MCI1);
 
        /* De-assert reset on On-SoM eMMC */
        at91_set_pio_output(AT91_PIO_PORTE, 15, 1);
-       at91_set_pio_pulldown(AT91_PIO_PORTE, 15, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTE, 15, 0);
 
        ret = atmel_mci_init((void *)ATMEL_BASE_MCI0);
        if (ret)        /* eMMC init failed, skip it. */
 #ifdef CONFIG_MACB
 void ma5d4evk_macb0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* ETXCK_EREFCK */
-       at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* ERXDV */
-       at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* ERX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* ERX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* ERXER */
-       at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* ETXEN */
-       at91_set_a_periph(AT91_PIO_PORTB, 12, 0);       /* ETX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* ETX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* EMDIO */
-       at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* EMDC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 0, 0);   /* ETXCK_EREFCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 6, 0);   /* ERXDV */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 8, 0);   /* ERX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 9, 0);   /* ERX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 7, 0);   /* ERXER */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 2, 0);   /* ETXEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 12, 0);  /* ETX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 13, 0);  /* ETX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 17, 0);  /* EMDIO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 16, 0);  /* EMDC */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_GMAC0);
 static void ma5d4evk_serial_hw_init(void)
 {
        /* USART0 */
-       at91_set_a_periph(AT91_PIO_PORTD, 13, 1);       /* TXD */
-       at91_set_a_periph(AT91_PIO_PORTD, 12, 0);       /* RXD */
-       at91_set_a_periph(AT91_PIO_PORTD, 11, 0);       /* RTS */
-       at91_set_a_periph(AT91_PIO_PORTD, 10, 0);       /* CTS */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 13, 1);  /* TXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 12, 0);  /* RXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 11, 0);  /* RTS */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 10, 0);  /* CTS */
        at91_periph_clk_enable(ATMEL_ID_USART0);
 
        /* USART1 */
-       at91_set_a_periph(AT91_PIO_PORTD, 17, 1);       /* TXD */
-       at91_set_a_periph(AT91_PIO_PORTD, 16, 0);       /* RXD */
-       at91_set_a_periph(AT91_PIO_PORTD, 15, 0);       /* RTS */
-       at91_set_a_periph(AT91_PIO_PORTD, 14, 0);       /* CTS */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 17, 1);  /* TXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 16, 0);  /* RXD */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 15, 0);  /* RTS */
+       at91_pio3_set_a_periph(AT91_PIO_PORTD, 14, 0);  /* CTS */
        at91_periph_clk_enable(ATMEL_ID_USART1);
 }
 
        at91_set_pio_output(AT91_PIO_PORTB, 21, 0);
        udelay(100);
        at91_set_pio_output(AT91_PIO_PORTB, 21, 1);
-       at91_set_pio_pulldown(AT91_PIO_PORTB, 21, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTB, 21, 0);
 
        ma5d4evk_serial_hw_init();
 
 
 
 static void vinco_spi0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTC, 0, 0);        /* SPI0_MISO */
-       at91_set_a_periph(AT91_PIO_PORTC, 1, 0);        /* SPI0_MOSI */
-       at91_set_a_periph(AT91_PIO_PORTC, 2, 0);        /* SPI0_SPCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0);   /* SPI0_MISO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0);   /* SPI0_MOSI */
+       at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0);   /* SPI0_SPCK */
 
        at91_set_pio_output(AT91_PIO_PORTC, 3, 1);      /* SPI0_CS0 */
 
 #ifdef CONFIG_GENERIC_ATMEL_MCI
 void vinco_mci0_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTC, 5, 1);        /* MCI0 CDA */
-       at91_set_b_periph(AT91_PIO_PORTC, 6, 1);        /* MCI0 DA0 */
-       at91_set_b_periph(AT91_PIO_PORTC, 7, 1);        /* MCI0 DA1 */
-       at91_set_b_periph(AT91_PIO_PORTC, 8, 1);        /* MCI0 DA2 */
-       at91_set_b_periph(AT91_PIO_PORTC, 9, 1);        /* MCI0 DA3 */
-       at91_set_b_periph(AT91_PIO_PORTC, 10, 1);       /* MCI0 DA4 */
-       at91_set_b_periph(AT91_PIO_PORTC, 11, 1);       /* MCI0 DA5 */
-       at91_set_b_periph(AT91_PIO_PORTC, 12, 1);       /* MCI0 DA6 */
-       at91_set_b_periph(AT91_PIO_PORTC, 13, 1);       /* MCI0 DA7 */
-       at91_set_b_periph(AT91_PIO_PORTC, 4, 0);        /* MCI0 CLK */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 5, 1);   /* MCI0 CDA */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 6, 1);   /* MCI0 DA0 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 7, 1);   /* MCI0 DA1 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 8, 1);   /* MCI0 DA2 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 9, 1);   /* MCI0 DA3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 10, 1);  /* MCI0 DA4 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 11, 1);  /* MCI0 DA5 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 12, 1);  /* MCI0 DA6 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 13, 1);  /* MCI0 DA7 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTC, 4, 0);   /* MCI0 CLK */
 
        /*
         * As the mci io internal pull down is too strong, so if the io needs
         * the power consumption will increase, so disable the interanl pull
         * down to save the power.
         */
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 4, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 5, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 6, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 7, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 8, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 9, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 10, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 11, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 12, 0);
-       at91_set_pio_pulldown(AT91_PIO_PORTC, 13, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 4, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 5, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 6, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 7, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 8, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 9, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 10, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 11, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 12, 0);
+       at91_pio3_set_pio_pulldown(AT91_PIO_PORTC, 13, 0);
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_MCI0);
 #ifdef CONFIG_MACB
 void vinco_macb0_hw_init(void)
 {
-       at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* ETXCK_EREFCK */
-       at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* ERXDV */
-       at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* ERX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* ERX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* ERXER */
-       at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* ETXEN */
-       at91_set_a_periph(AT91_PIO_PORTB, 12, 0);       /* ETX0 */
-       at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* ETX1 */
-       at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* EMDIO */
-       at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* EMDC */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 0, 0);   /* ETXCK_EREFCK */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 6, 0);   /* ERXDV */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 8, 0);   /* ERX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 9, 0);   /* ERX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 7, 0);   /* ERXER */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 2, 0);   /* ETXEN */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 12, 0);  /* ETX0 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 13, 0);  /* ETX1 */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 17, 0);  /* EMDIO */
+       at91_pio3_set_a_periph(AT91_PIO_PORTB, 16, 0);  /* EMDC */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_GMAC0);
 
 static void vinco_serial3_hw_init(void)
 {
-       at91_set_b_periph(AT91_PIO_PORTE, 17, 1);       /* TXD3 */
-       at91_set_b_periph(AT91_PIO_PORTE, 16, 0);       /* RXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 17, 1);  /* TXD3 */
+       at91_pio3_set_b_periph(AT91_PIO_PORTE, 16, 0);  /* RXD3 */
 
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_USART3);
 
 {
        struct at91_port *at91_port = at91_pio_get_port(port);
 
-#if defined(CPU_HAS_PIO3)
-       if (use_pullup)
-               at91_set_pio_pulldown(port, pin, 0);
-#endif
-
        if (at91_port && (pin < GPIO_PER_BANK))
                at91_set_port_pullup(at91_port, pin, use_pullup);
 
                mask = 1 << pin;
                writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-#if defined(CPU_HAS_PIO3)
-               writel(readl(&at91_port->abcdsr1) & ~mask,
-                      &at91_port->abcdsr1);
-               writel(readl(&at91_port->abcdsr2) & ~mask,
-                      &at91_port->abcdsr2);
-#else
-               writel(mask, &at91_port->asr);
-#endif
+               writel(mask, &at91_port->mux.pio2.asr);
                writel(mask, &at91_port->pdr);
        }
 
                mask = 1 << pin;
                writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-#if defined(CPU_HAS_PIO3)
-               writel(readl(&at91_port->abcdsr1) | mask,
-                      &at91_port->abcdsr1);
-               writel(readl(&at91_port->abcdsr2) & ~mask,
-                      &at91_port->abcdsr2);
-#else
-               writel(mask, &at91_port->bsr);
-#endif
+               writel(mask, &at91_port->mux.pio2.bsr);
+               writel(mask, &at91_port->pdr);
+       }
+
+       return 0;
+}
+
+/*
+ * mux the pin to the "A" internal peripheral role.
+ */
+int at91_pio3_set_a_periph(unsigned port, unsigned pin, int use_pullup)
+{
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
+
+       if (at91_port && (pin < GPIO_PER_BANK)) {
+               mask = 1 << pin;
+               writel(mask, &at91_port->idr);
+               at91_set_pio_pullup(port, pin, use_pullup);
+               writel(readl(&at91_port->mux.pio3.abcdsr1) & ~mask,
+                      &at91_port->mux.pio3.abcdsr1);
+               writel(readl(&at91_port->mux.pio3.abcdsr2) & ~mask,
+                      &at91_port->mux.pio3.abcdsr2);
+
                writel(mask, &at91_port->pdr);
        }
 
        return 0;
 }
 
-#if defined(CPU_HAS_PIO3)
+/*
+ * mux the pin to the "B" internal peripheral role.
+ */
+int at91_pio3_set_b_periph(unsigned port, unsigned pin, int use_pullup)
+{
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
+
+       if (at91_port && (pin < GPIO_PER_BANK)) {
+               mask = 1 << pin;
+               writel(mask, &at91_port->idr);
+               at91_set_pio_pullup(port, pin, use_pullup);
+               writel(readl(&at91_port->mux.pio3.abcdsr1) | mask,
+                      &at91_port->mux.pio3.abcdsr1);
+               writel(readl(&at91_port->mux.pio3.abcdsr2) & ~mask,
+                      &at91_port->mux.pio3.abcdsr2);
+
+               writel(mask, &at91_port->pdr);
+       }
+
+       return 0;
+}
 /*
  * mux the pin to the "C" internal peripheral role.
  */
-int at91_set_c_periph(unsigned port, unsigned pin, int use_pullup)
+int at91_pio3_set_c_periph(unsigned port, unsigned pin, int use_pullup)
 {
        struct at91_port *at91_port = at91_pio_get_port(port);
        u32 mask;
                mask = 1 << pin;
                writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-               writel(readl(&at91_port->abcdsr1) & ~mask,
-                      &at91_port->abcdsr1);
-               writel(readl(&at91_port->abcdsr2) | mask,
-                      &at91_port->abcdsr2);
+               writel(readl(&at91_port->mux.pio3.abcdsr1) & ~mask,
+                      &at91_port->mux.pio3.abcdsr1);
+               writel(readl(&at91_port->mux.pio3.abcdsr2) | mask,
+                      &at91_port->mux.pio3.abcdsr2);
                writel(mask, &at91_port->pdr);
        }
 
 /*
  * mux the pin to the "D" internal peripheral role.
  */
-int at91_set_d_periph(unsigned port, unsigned pin, int use_pullup)
+int at91_pio3_set_d_periph(unsigned port, unsigned pin, int use_pullup)
 {
        struct at91_port *at91_port = at91_pio_get_port(port);
        u32 mask;
                mask = 1 << pin;
                writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-               writel(readl(&at91_port->abcdsr1) | mask,
-                      &at91_port->abcdsr1);
-               writel(readl(&at91_port->abcdsr2) | mask,
-                      &at91_port->abcdsr2);
+               writel(readl(&at91_port->mux.pio3.abcdsr1) | mask,
+                      &at91_port->mux.pio3.abcdsr1);
+               writel(readl(&at91_port->mux.pio3.abcdsr2) | mask,
+                      &at91_port->mux.pio3.abcdsr2);
                writel(mask, &at91_port->pdr);
        }
 
        return 0;
 }
-#endif
 
 #ifdef CONFIG_DM_GPIO
 static bool at91_get_port_output(struct at91_port *at91_port, int offset)
        struct at91_port *at91_port = at91_pio_get_port(port);
        u32 mask;
 
+       if (at91_port && (pin < GPIO_PER_BANK)) {
+               mask = 1 << pin;
+               if (is_on)
+                       writel(mask, &at91_port->ifer);
+               else
+                       writel(mask, &at91_port->ifdr);
+       }
+
+       return 0;
+}
+
+/*
+ * enable/disable the glitch filter. mostly used with IRQ handling.
+ */
+int at91_pio3_set_pio_deglitch(unsigned port, unsigned pin, int is_on)
+{
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
+
        if (at91_port && (pin < GPIO_PER_BANK)) {
                mask = 1 << pin;
                if (is_on) {
-#if defined(CPU_HAS_PIO3)
-                       writel(mask, &at91_port->ifscdr);
-#endif
+                       writel(mask, &at91_port->mux.pio3.ifscdr);
                        writel(mask, &at91_port->ifer);
                } else {
                        writel(mask, &at91_port->ifdr);
        return 0;
 }
 
-#if defined(CPU_HAS_PIO3)
 /*
  * enable/disable the debounce filter.
  */
-int at91_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div)
+int at91_pio3_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div)
 {
        struct at91_port *at91_port = at91_pio_get_port(port);
        u32 mask;
        if (at91_port && (pin < GPIO_PER_BANK)) {
                mask = 1 << pin;
                if (is_on) {
-                       writel(mask, &at91_port->ifscer);
-                       writel(div & PIO_SCDR_DIV, &at91_port->scdr);
+                       writel(mask, &at91_port->mux.pio3.ifscer);
+                       writel(div & PIO_SCDR_DIV, &at91_port->mux.pio3.scdr);
                        writel(mask, &at91_port->ifer);
                } else {
                        writel(mask, &at91_port->ifdr);
  * enable/disable the pull-down.
  * If pull-up already enabled while calling the function, we disable it.
  */
-int at91_set_pio_pulldown(unsigned port, unsigned pin, int is_on)
+int at91_pio3_set_pio_pulldown(unsigned port, unsigned pin, int is_on)
 {
        struct at91_port *at91_port = at91_pio_get_port(port);
        u32 mask;
                mask = 1 << pin;
                if (is_on) {
                        at91_set_pio_pullup(port, pin, 0);
-                       writel(mask, &at91_port->ppder);
+                       writel(mask, &at91_port->mux.pio3.ppder);
                } else
-                       writel(mask, &at91_port->ppddr);
+                       writel(mask, &at91_port->mux.pio3.ppddr);
        }
 
        return 0;
 }
 
+int at91_pio3_set_pio_pullup(unsigned port, unsigned pin, int use_pullup)
+{
+       struct at91_port *at91_port = at91_pio_get_port(port);
+
+       if (use_pullup)
+               at91_pio3_set_pio_pulldown(port, pin, 0);
+
+       if (at91_port && (pin < GPIO_PER_BANK))
+               at91_set_port_pullup(at91_port, pin, use_pullup);
+
+       return 0;
+}
+
 /*
  * disable Schmitt trigger
  */
-int at91_set_pio_disable_schmitt_trig(unsigned port, unsigned pin)
+int at91_pio3_set_pio_disable_schmitt_trig(unsigned port, unsigned pin)
 {
        struct at91_port *at91_port = at91_pio_get_port(port);
        u32 mask;
 
        return 0;
 }
-#endif
 
 /*
  * enable/disable the multi-driver. This is only valid for output and
 
                ATMEL_PMX_AA_ETXEN |    ATMEL_PMX_AA_EREFCK;
 
        writel(value, &pio->pioa.pdr);
-       writel(value, &pio->pioa.asr);
+       writel(value, &pio->pioa.mux.pio2.asr);
 
 #ifdef CONFIG_RMII
        value = ATMEL_PMX_BA_ERXCK;
                ATMEL_PMX_BA_ETX3 |     ATMEL_PMX_BA_ETX2;
 #endif
        writel(value, &pio->piob.pdr);
-       writel(value, &pio->piob.bsr);
+       writel(value, &pio->piob.mux.pio2.bsr);
 
        at91_periph_clk_enable(ATMEL_ID_EMAC);