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