xref: /openbmc/u-boot/arch/arm/mach-at91/arm926ejs/at91sam9n12_devices.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
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