1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
281ca8409SOtavio Salvador /*
381ca8409SOtavio Salvador  * Freescale MX23EVK board
481ca8409SOtavio Salvador  *
581ca8409SOtavio Salvador  * (C) Copyright 2013 O.S. Systems Software LTDA.
681ca8409SOtavio Salvador  *
781ca8409SOtavio Salvador  * Author: Otavio Salvador <otavio@ossystems.com.br>
881ca8409SOtavio Salvador  *
981ca8409SOtavio Salvador  * Based on m28evk.c:
1081ca8409SOtavio Salvador  * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
1181ca8409SOtavio Salvador  * on behalf of DENX Software Engineering GmbH
1281ca8409SOtavio Salvador  */
1381ca8409SOtavio Salvador 
1481ca8409SOtavio Salvador #include <common.h>
1581ca8409SOtavio Salvador #include <asm/gpio.h>
1681ca8409SOtavio Salvador #include <asm/arch/imx-regs.h>
1781ca8409SOtavio Salvador #include <asm/arch/clock.h>
1881ca8409SOtavio Salvador #include <asm/arch/iomux-mx23.h>
1981ca8409SOtavio Salvador #include <asm/arch/sys_proto.h>
2081ca8409SOtavio Salvador 
2181ca8409SOtavio Salvador DECLARE_GLOBAL_DATA_PTR;
2281ca8409SOtavio Salvador 
2381ca8409SOtavio Salvador /*
2481ca8409SOtavio Salvador  * Functions
2581ca8409SOtavio Salvador  */
board_early_init_f(void)2681ca8409SOtavio Salvador int board_early_init_f(void)
2781ca8409SOtavio Salvador {
2881ca8409SOtavio Salvador 	/* IO0 clock at 480MHz */
2981ca8409SOtavio Salvador 	mxs_set_ioclk(MXC_IOCLK0, 480000);
3081ca8409SOtavio Salvador 
3181ca8409SOtavio Salvador 	/* SSP0 clock at 96MHz */
3281ca8409SOtavio Salvador 	mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
3381ca8409SOtavio Salvador 
34eadfc135SFabio Estevam 	/* Power on LCD */
35eadfc135SFabio Estevam 	gpio_direction_output(MX23_PAD_LCD_RESET__GPIO_1_18, 1);
36eadfc135SFabio Estevam 
37eadfc135SFabio Estevam 	/* Set contrast to maximum */
38eadfc135SFabio Estevam 	gpio_direction_output(MX23_PAD_PWM2__GPIO_1_28, 1);
39eadfc135SFabio Estevam 
4081ca8409SOtavio Salvador 	return 0;
4181ca8409SOtavio Salvador }
4281ca8409SOtavio Salvador 
dram_init(void)4381ca8409SOtavio Salvador int dram_init(void)
4481ca8409SOtavio Salvador {
4581ca8409SOtavio Salvador 	return mxs_dram_init();
4681ca8409SOtavio Salvador }
4781ca8409SOtavio Salvador 
board_init(void)4881ca8409SOtavio Salvador int board_init(void)
4981ca8409SOtavio Salvador {
5081ca8409SOtavio Salvador 	/* Adress of boot parameters */
5181ca8409SOtavio Salvador 	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
5281ca8409SOtavio Salvador 
5381ca8409SOtavio Salvador 	return 0;
5481ca8409SOtavio Salvador }
5581ca8409SOtavio Salvador 
5681ca8409SOtavio Salvador #ifdef	CONFIG_CMD_MMC
mx23evk_mmc_wp(int id)5781ca8409SOtavio Salvador static int mx23evk_mmc_wp(int id)
5881ca8409SOtavio Salvador {
5981ca8409SOtavio Salvador 	if (id != 0) {
6081ca8409SOtavio Salvador 		printf("MXS MMC: Invalid card selected (card id = %d)\n", id);
6181ca8409SOtavio Salvador 		return 1;
6281ca8409SOtavio Salvador 	}
6381ca8409SOtavio Salvador 
6481ca8409SOtavio Salvador 	return gpio_get_value(MX23_PAD_PWM4__GPIO_1_30);
6581ca8409SOtavio Salvador }
6681ca8409SOtavio Salvador 
board_mmc_init(bd_t * bis)6781ca8409SOtavio Salvador int board_mmc_init(bd_t *bis)
6881ca8409SOtavio Salvador {
6981ca8409SOtavio Salvador 	/* Configure WP as input */
7081ca8409SOtavio Salvador 	gpio_direction_input(MX23_PAD_PWM4__GPIO_1_30);
7181ca8409SOtavio Salvador 
7281ca8409SOtavio Salvador 	/* Configure MMC0 Power Enable */
7381ca8409SOtavio Salvador 	gpio_direction_output(MX23_PAD_PWM3__GPIO_1_29, 0);
7481ca8409SOtavio Salvador 
7581ca8409SOtavio Salvador 	return mxsmmc_initialize(bis, 0, mx23evk_mmc_wp, NULL);
7681ca8409SOtavio Salvador }
7781ca8409SOtavio Salvador #endif
78