xref: /rk3399_rockchip-uboot/board/htkw/mcx/mcx.c (revision bbbc1ae9219ae8c8098c0af14060da5cb0d37e53)
14ab779cbSIlya Yanok /*
24ab779cbSIlya Yanok  * Copyright (C) 2011 Ilya Yanok, Emcraft Systems
34ab779cbSIlya Yanok  *
44ab779cbSIlya Yanok  * Based on ti/evm/evm.c
54ab779cbSIlya Yanok  *
64ab779cbSIlya Yanok  * This program is free software; you can redistribute it and/or modify
74ab779cbSIlya Yanok  * it under the terms of the GNU General Public License as published by
84ab779cbSIlya Yanok  * the Free Software Foundation; either version 2 of the License, or
94ab779cbSIlya Yanok  * (at your option) any later version.
104ab779cbSIlya Yanok  *
114ab779cbSIlya Yanok  * This program is distributed in the hope that it will be useful,
124ab779cbSIlya Yanok  * but WITHOUT ANY WARRANTY; without even the implied warranty of
134ab779cbSIlya Yanok  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
144ab779cbSIlya Yanok  * GNU General Public License for more details.
154ab779cbSIlya Yanok  *
164ab779cbSIlya Yanok  * You should have received a copy of the GNU General Public License
174ab779cbSIlya Yanok  * along with this program; if not, write to the Free Software
184ab779cbSIlya Yanok  * Foundation, Inc.
194ab779cbSIlya Yanok  */
204ab779cbSIlya Yanok 
214ab779cbSIlya Yanok #include <common.h>
224ab779cbSIlya Yanok #include <asm/io.h>
234ab779cbSIlya Yanok #include <asm/arch/mem.h>
244ab779cbSIlya Yanok #include <asm/arch/mmc_host_def.h>
254ab779cbSIlya Yanok #include <asm/arch/mux.h>
264ab779cbSIlya Yanok #include <asm/arch/sys_proto.h>
274ab779cbSIlya Yanok #include <asm/mach-types.h>
284ab779cbSIlya Yanok #include <asm/gpio.h>
294ab779cbSIlya Yanok #include <asm/omap_gpio.h>
304ab779cbSIlya Yanok #include "errno.h"
314ab779cbSIlya Yanok #include <i2c.h>
324ab779cbSIlya Yanok #ifdef CONFIG_USB_EHCI
334ab779cbSIlya Yanok #include <usb.h>
344ab779cbSIlya Yanok #include <asm/ehci-omap.h>
354ab779cbSIlya Yanok #endif
364ab779cbSIlya Yanok #include "mcx.h"
374ab779cbSIlya Yanok 
384ab779cbSIlya Yanok DECLARE_GLOBAL_DATA_PTR;
394ab779cbSIlya Yanok 
404ab779cbSIlya Yanok #ifdef CONFIG_USB_EHCI
414ab779cbSIlya Yanok static struct omap_usbhs_board_data usbhs_bdata = {
424ab779cbSIlya Yanok 	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
434ab779cbSIlya Yanok 	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
444ab779cbSIlya Yanok 	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
454ab779cbSIlya Yanok };
464ab779cbSIlya Yanok 
474ab779cbSIlya Yanok int ehci_hcd_init(void)
484ab779cbSIlya Yanok {
494ab779cbSIlya Yanok 	return omap_ehci_hcd_init(&usbhs_bdata);
504ab779cbSIlya Yanok }
514ab779cbSIlya Yanok 
524ab779cbSIlya Yanok int ehci_hcd_stop(void)
534ab779cbSIlya Yanok {
544ab779cbSIlya Yanok 	return omap_ehci_hcd_stop();
554ab779cbSIlya Yanok }
564ab779cbSIlya Yanok #endif
574ab779cbSIlya Yanok 
584ab779cbSIlya Yanok /*
594ab779cbSIlya Yanok  * Routine: board_init
604ab779cbSIlya Yanok  * Description: Early hardware init.
614ab779cbSIlya Yanok  */
624ab779cbSIlya Yanok int board_init(void)
634ab779cbSIlya Yanok {
644ab779cbSIlya Yanok 	gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
654ab779cbSIlya Yanok 	/* boot param addr */
664ab779cbSIlya Yanok 	gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
674ab779cbSIlya Yanok 
684ab779cbSIlya Yanok 	return 0;
694ab779cbSIlya Yanok }
704ab779cbSIlya Yanok 
714ab779cbSIlya Yanok /*
724ab779cbSIlya Yanok  * Routine: misc_init_r
734ab779cbSIlya Yanok  * Description: late init.
744ab779cbSIlya Yanok  */
754ab779cbSIlya Yanok int misc_init_r(void)
764ab779cbSIlya Yanok {
774ab779cbSIlya Yanok 	dieid_num_r();
784ab779cbSIlya Yanok 
794ab779cbSIlya Yanok 	return 0;
804ab779cbSIlya Yanok }
814ab779cbSIlya Yanok 
824ab779cbSIlya Yanok /*
834ab779cbSIlya Yanok  * Routine: set_muxconf_regs
844ab779cbSIlya Yanok  * Description: Setting up the configuration Mux registers specific to the
854ab779cbSIlya Yanok  *		hardware. Many pins need to be moved from protect to primary
864ab779cbSIlya Yanok  *		mode.
874ab779cbSIlya Yanok  */
884ab779cbSIlya Yanok void set_muxconf_regs(void)
894ab779cbSIlya Yanok {
904ab779cbSIlya Yanok 	MUX_MCX();
914ab779cbSIlya Yanok }
924ab779cbSIlya Yanok 
934ab779cbSIlya Yanok #if defined(CONFIG_OMAP_HSMMC) && !defined(CONFIG_SPL_BUILD)
944ab779cbSIlya Yanok int board_mmc_init(bd_t *bis)
954ab779cbSIlya Yanok {
96*bbbc1ae9SJonathan Solnit 	return omap_mmc_init(0, 0, 0);
974ab779cbSIlya Yanok }
984ab779cbSIlya Yanok #endif
994ab779cbSIlya Yanok 
1004ab779cbSIlya Yanok #ifdef CONFIG_USB_EHCI_OMAP
1014ab779cbSIlya Yanok #define USB_HOST_PWR_EN		132
1024ab779cbSIlya Yanok int board_usb_init(void)
1034ab779cbSIlya Yanok {
1044ab779cbSIlya Yanok 	if (gpio_request(USB_HOST_PWR_EN, "USB_HOST_PWR_EN") < 0) {
1054ab779cbSIlya Yanok 		puts("Failed to get USB_HOST_PWR_EN pin\n");
1064ab779cbSIlya Yanok 		return -ENODEV;
1074ab779cbSIlya Yanok 	}
1084ab779cbSIlya Yanok 	gpio_direction_output(USB_HOST_PWR_EN, 1);
1094ab779cbSIlya Yanok 
1104ab779cbSIlya Yanok 	return 0;
1114ab779cbSIlya Yanok }
1124ab779cbSIlya Yanok #endif
113