1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
262011840SMasahiro Yamada /*
362011840SMasahiro Yamada * (C) Copyright 2013 Atmel Corporation
462011840SMasahiro Yamada * Josh Wu <josh.wu@atmel.com>
562011840SMasahiro Yamada */
662011840SMasahiro Yamada
762011840SMasahiro Yamada #include <common.h>
862011840SMasahiro Yamada #include <asm/io.h>
962011840SMasahiro Yamada #include <asm/arch/at91_common.h>
1062011840SMasahiro Yamada #include <asm/arch/at91_pio.h>
11eced5a7eSWenyou Yang #include <asm/arch/clk.h>
1262011840SMasahiro Yamada
has_lcdc()1362011840SMasahiro Yamada unsigned int has_lcdc()
1462011840SMasahiro Yamada {
1562011840SMasahiro Yamada return 1;
1662011840SMasahiro Yamada }
1762011840SMasahiro Yamada
at91_serial0_hw_init(void)1862011840SMasahiro Yamada void at91_serial0_hw_init(void)
1962011840SMasahiro Yamada {
202dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 0, 1); /* TXD0 */
212dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 1, 0); /* RXD0 */
22eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_USART0);
2362011840SMasahiro Yamada }
2462011840SMasahiro Yamada
at91_serial1_hw_init(void)2562011840SMasahiro Yamada void at91_serial1_hw_init(void)
2662011840SMasahiro Yamada {
272dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 5, 1); /* TXD1 */
282dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 6, 0); /* RXD1 */
29eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_USART1);
3062011840SMasahiro Yamada }
3162011840SMasahiro Yamada
at91_serial2_hw_init(void)3262011840SMasahiro Yamada void at91_serial2_hw_init(void)
3362011840SMasahiro Yamada {
342dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 7, 1); /* TXD2 */
352dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 8, 0); /* RXD2 */
36eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_USART2);
3762011840SMasahiro Yamada }
3862011840SMasahiro Yamada
at91_serial3_hw_init(void)3962011840SMasahiro Yamada void at91_serial3_hw_init(void)
4062011840SMasahiro Yamada {
412dc63f73SWenyou Yang at91_pio3_set_b_periph(AT91_PIO_PORTC, 22, 1); /* TXD3 */
422dc63f73SWenyou Yang at91_pio3_set_b_periph(AT91_PIO_PORTC, 23, 0); /* RXD3 */
43eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_USART3);
4462011840SMasahiro Yamada }
4562011840SMasahiro Yamada
at91_seriald_hw_init(void)4662011840SMasahiro Yamada void at91_seriald_hw_init(void)
4762011840SMasahiro Yamada {
482dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 1); /* DTXD */
492dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 9, 0); /* DRXD */
50eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_SYS);
5162011840SMasahiro Yamada }
5262011840SMasahiro Yamada
5362011840SMasahiro Yamada #ifdef CONFIG_ATMEL_SPI
at91_spi0_hw_init(unsigned long cs_mask)5462011840SMasahiro Yamada void at91_spi0_hw_init(unsigned long cs_mask)
5562011840SMasahiro Yamada {
562dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0); /* SPI0_MISO */
572dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0); /* SPI0_MOSI */
582dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0); /* SPI0_SPCK */
5962011840SMasahiro Yamada
60eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_SPI0);
6162011840SMasahiro Yamada
6262011840SMasahiro Yamada if (cs_mask & (1 << 0))
6362011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 14, 1);
6462011840SMasahiro Yamada if (cs_mask & (1 << 1))
6562011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 7, 1);
6662011840SMasahiro Yamada if (cs_mask & (1 << 2))
6762011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 1, 1);
6862011840SMasahiro Yamada if (cs_mask & (1 << 3))
6962011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTB, 3, 1);
7062011840SMasahiro Yamada }
7162011840SMasahiro Yamada
at91_spi1_hw_init(unsigned long cs_mask)7262011840SMasahiro Yamada void at91_spi1_hw_init(unsigned long cs_mask)
7362011840SMasahiro Yamada {
742dc63f73SWenyou Yang at91_pio3_set_b_periph(AT91_PIO_PORTA, 21, 0); /* SPI1_MISO */
752dc63f73SWenyou Yang at91_pio3_set_b_periph(AT91_PIO_PORTA, 22, 0); /* SPI1_MOSI */
762dc63f73SWenyou Yang at91_pio3_set_b_periph(AT91_PIO_PORTA, 23, 0); /* SPI1_SPCK */
7762011840SMasahiro Yamada
78eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_SPI1);
7962011840SMasahiro Yamada
8062011840SMasahiro Yamada if (cs_mask & (1 << 0))
8162011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 8, 1);
8262011840SMasahiro Yamada if (cs_mask & (1 << 1))
8362011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 0, 1);
8462011840SMasahiro Yamada if (cs_mask & (1 << 2))
8562011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 31, 1);
8662011840SMasahiro Yamada if (cs_mask & (1 << 3))
8762011840SMasahiro Yamada at91_set_pio_output(AT91_PIO_PORTA, 30, 1);
8862011840SMasahiro Yamada }
8962011840SMasahiro Yamada #endif
9062011840SMasahiro Yamada
at91_mci_hw_init(void)9162011840SMasahiro Yamada void at91_mci_hw_init(void)
9262011840SMasahiro Yamada {
932dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 17, 0); /* MCCK */
942dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 16, 0); /* MCCDA */
952dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0); /* MCDA0 */
962dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 0); /* MCDA1 */
972dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 0); /* MCDA2 */
982dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 0); /* MCDA3 */
9962011840SMasahiro Yamada
100eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_HSMCI0);
10162011840SMasahiro Yamada }
10262011840SMasahiro Yamada
10362011840SMasahiro Yamada #ifdef CONFIG_LCD
at91_lcd_hw_init(void)10462011840SMasahiro Yamada void at91_lcd_hw_init(void)
10562011840SMasahiro Yamada {
1062dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 24, 0); /* LCDDPWR */
1072dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 26, 0); /* LCDVSYNC */
1082dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 27, 0); /* LCDHSYNC */
1092dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 28, 0); /* LCDDOTCK */
1102dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 29, 0); /* LCDDEN */
1112dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 30, 0); /* LCDDOTCK */
11262011840SMasahiro Yamada
1132dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 0, 0); /* LCDD0 */
1142dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 1, 0); /* LCDD1 */
1152dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 2, 0); /* LCDD2 */
1162dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 3, 0); /* LCDD3 */
1172dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 4, 0); /* LCDD4 */
1182dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0); /* LCDD5 */
1192dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0); /* LCDD6 */
1202dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0); /* LCDD7 */
1212dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0); /* LCDD8 */
1222dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0); /* LCDD9 */
1232dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 10, 0); /* LCDD10 */
1242dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 11, 0); /* LCDD11 */
1252dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 12, 0); /* LCDD12 */
1262dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 13, 0); /* LCDD13 */
1272dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 14, 0); /* LCDD14 */
1282dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 15, 0); /* LCDD15 */
1292dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 16, 0); /* LCDD16 */
1302dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 17, 0); /* LCDD17 */
1312dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 18, 0); /* LCDD18 */
1322dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 19, 0); /* LCDD19 */
1332dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 20, 0); /* LCDD20 */
1342dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 21, 0); /* LCDD21 */
1352dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 22, 0); /* LCDD22 */
1362dc63f73SWenyou Yang at91_pio3_set_a_periph(AT91_PIO_PORTC, 23, 0); /* LCDD23 */
13762011840SMasahiro Yamada
138eced5a7eSWenyou Yang at91_periph_clk_enable(ATMEL_ID_LCDC);
13962011840SMasahiro Yamada }
14062011840SMasahiro Yamada #endif
141