xref: /rk3399_rockchip-uboot/board/ti/beagle/beagle.c (revision ee8485fd84418eff0caa89ea1c9fa7a6701868cc)
10a0e4badSJean-Christophe PLAGNIOL-VILLARD /*
20a0e4badSJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2004-2008
30a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Texas Instruments, <www.ti.com>
40a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
50a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Author :
60a0e4badSJean-Christophe PLAGNIOL-VILLARD  *	Sunil Kumar <sunilsaini05@gmail.com>
70a0e4badSJean-Christophe PLAGNIOL-VILLARD  *	Shashi Ranjan <shashiranjanmca05@gmail.com>
80a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
90a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Derived from Beagle Board and 3430 SDP code by
100a0e4badSJean-Christophe PLAGNIOL-VILLARD  *	Richard Woodruff <r-woodruff2@ti.com>
110a0e4badSJean-Christophe PLAGNIOL-VILLARD  *	Syed Mohammed Khasim <khasim@ti.com>
120a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
130a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
140a0e4badSJean-Christophe PLAGNIOL-VILLARD  * See file CREDITS for list of people who contributed to this
150a0e4badSJean-Christophe PLAGNIOL-VILLARD  * project.
160a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
170a0e4badSJean-Christophe PLAGNIOL-VILLARD  * This program is free software; you can redistribute it and/or
180a0e4badSJean-Christophe PLAGNIOL-VILLARD  * modify it under the terms of the GNU General Public License as
190a0e4badSJean-Christophe PLAGNIOL-VILLARD  * published by the Free Software Foundation; either version 2 of
200a0e4badSJean-Christophe PLAGNIOL-VILLARD  * the License, or (at your option) any later version.
210a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
220a0e4badSJean-Christophe PLAGNIOL-VILLARD  * This program is distributed in the hope that it will be useful,
230a0e4badSJean-Christophe PLAGNIOL-VILLARD  * but WITHOUT ANY WARRANTY; without even the implied warranty of
240a0e4badSJean-Christophe PLAGNIOL-VILLARD  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
250a0e4badSJean-Christophe PLAGNIOL-VILLARD  * GNU General Public License for more details.
260a0e4badSJean-Christophe PLAGNIOL-VILLARD  *
270a0e4badSJean-Christophe PLAGNIOL-VILLARD  * You should have received a copy of the GNU General Public License
280a0e4badSJean-Christophe PLAGNIOL-VILLARD  * along with this program; if not, write to the Free Software
290a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
300a0e4badSJean-Christophe PLAGNIOL-VILLARD  * MA 02111-1307 USA
310a0e4badSJean-Christophe PLAGNIOL-VILLARD  */
320a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <common.h>
3370d8c944SJason Kridner #ifdef CONFIG_STATUS_LED
3470d8c944SJason Kridner #include <status_led.h>
3570d8c944SJason Kridner #endif
360a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <twl4030.h>
370a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/io.h>
380cd31144SSteve Sakoman #include <asm/arch/mmc_host_def.h>
390a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/mux.h>
400a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/sys_proto.h>
410a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/gpio.h>
420a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/mach-types.h>
430a0e4badSJean-Christophe PLAGNIOL-VILLARD #include "beagle.h"
440a0e4badSJean-Christophe PLAGNIOL-VILLARD 
45ca5f80aeSKoen Kooi #define TWL4030_I2C_BUS			0
46ca5f80aeSKoen Kooi #define EXPANSION_EEPROM_I2C_BUS	1
47ca5f80aeSKoen Kooi #define EXPANSION_EEPROM_I2C_ADDRESS	0x50
48ca5f80aeSKoen Kooi 
49ca5f80aeSKoen Kooi #define TINCANTOOLS_ZIPPY		0x01000100
50ca5f80aeSKoen Kooi #define TINCANTOOLS_ZIPPY2		0x02000100
51ca5f80aeSKoen Kooi #define TINCANTOOLS_TRAINER		0x04000100
52ca5f80aeSKoen Kooi #define TINCANTOOLS_SHOWDOG		0x03000100
53ca5f80aeSKoen Kooi #define KBADC_BEAGLEFPGA		0x01000600
54*ee8485fdSKoen Kooi #define LW_BEAGLETOUCH			0x01000700
55*ee8485fdSKoen Kooi #define BRAINMUX_LCDOG			0x01000800
56*ee8485fdSKoen Kooi #define BRAINMUX_LCDOGTOUCH		0x02000800
57*ee8485fdSKoen Kooi #define BBTOYS_WIFI			0x01000B00
58*ee8485fdSKoen Kooi #define BBTOYS_VGA			0x02000B00
59*ee8485fdSKoen Kooi #define BBTOYS_LCD			0x03000B00
60ca5f80aeSKoen Kooi #define BEAGLE_NO_EEPROM		0xffffffff
61ca5f80aeSKoen Kooi 
6229565326SJohn Rigby DECLARE_GLOBAL_DATA_PTR;
6329565326SJohn Rigby 
64ca5f80aeSKoen Kooi static struct {
65ca5f80aeSKoen Kooi 	unsigned int device_vendor;
66ca5f80aeSKoen Kooi 	unsigned char revision;
67ca5f80aeSKoen Kooi 	unsigned char content;
68ca5f80aeSKoen Kooi 	char fab_revision[8];
69ca5f80aeSKoen Kooi 	char env_var[16];
70ca5f80aeSKoen Kooi 	char env_setting[64];
71ca5f80aeSKoen Kooi } expansion_config;
72ca5f80aeSKoen Kooi 
730a0e4badSJean-Christophe PLAGNIOL-VILLARD /*
740a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Routine: board_init
750a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Description: Early hardware init.
760a0e4badSJean-Christophe PLAGNIOL-VILLARD  */
770a0e4badSJean-Christophe PLAGNIOL-VILLARD int board_init(void)
780a0e4badSJean-Christophe PLAGNIOL-VILLARD {
790a0e4badSJean-Christophe PLAGNIOL-VILLARD 	gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
800a0e4badSJean-Christophe PLAGNIOL-VILLARD 	/* board id for Linux */
810a0e4badSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_arch_number = MACH_TYPE_OMAP3_BEAGLE;
820a0e4badSJean-Christophe PLAGNIOL-VILLARD 	/* boot param addr */
830a0e4badSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
840a0e4badSJean-Christophe PLAGNIOL-VILLARD 
8570d8c944SJason Kridner #if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
8670d8c944SJason Kridner 	status_led_set (STATUS_LED_BOOT, STATUS_LED_ON);
8770d8c944SJason Kridner #endif
8870d8c944SJason Kridner 
890a0e4badSJean-Christophe PLAGNIOL-VILLARD 	return 0;
900a0e4badSJean-Christophe PLAGNIOL-VILLARD }
910a0e4badSJean-Christophe PLAGNIOL-VILLARD 
920a0e4badSJean-Christophe PLAGNIOL-VILLARD /*
9306b95bd5SSteve Sakoman  * Routine: get_board_revision
9406b95bd5SSteve Sakoman  * Description: Detect if we are running on a Beagle revision Ax/Bx,
9508cbba2aSSteve Sakoman  *		C1/2/3, C4 or xM. This can be done by reading
9606b95bd5SSteve Sakoman  *		the level of GPIO173, GPIO172 and GPIO171. This should
9706b95bd5SSteve Sakoman  *		result in
9806b95bd5SSteve Sakoman  *		GPIO173, GPIO172, GPIO171: 1 1 1 => Ax/Bx
9906b95bd5SSteve Sakoman  *		GPIO173, GPIO172, GPIO171: 1 1 0 => C1/2/3
10006b95bd5SSteve Sakoman  *		GPIO173, GPIO172, GPIO171: 1 0 1 => C4
10108cbba2aSSteve Sakoman  *		GPIO173, GPIO172, GPIO171: 0 0 0 => xM
1020a0e4badSJean-Christophe PLAGNIOL-VILLARD  */
10306b95bd5SSteve Sakoman int get_board_revision(void)
1040a0e4badSJean-Christophe PLAGNIOL-VILLARD {
10506b95bd5SSteve Sakoman 	int revision;
1060a0e4badSJean-Christophe PLAGNIOL-VILLARD 
10706b95bd5SSteve Sakoman 	if (!omap_request_gpio(171) &&
10806b95bd5SSteve Sakoman 	    !omap_request_gpio(172) &&
10906b95bd5SSteve Sakoman 	    !omap_request_gpio(173)) {
1100a0e4badSJean-Christophe PLAGNIOL-VILLARD 
1110a0e4badSJean-Christophe PLAGNIOL-VILLARD 		omap_set_gpio_direction(171, 1);
11206b95bd5SSteve Sakoman 		omap_set_gpio_direction(172, 1);
11306b95bd5SSteve Sakoman 		omap_set_gpio_direction(173, 1);
1140a0e4badSJean-Christophe PLAGNIOL-VILLARD 
11506b95bd5SSteve Sakoman 		revision = omap_get_gpio_datain(173) << 2 |
11606b95bd5SSteve Sakoman 			   omap_get_gpio_datain(172) << 1 |
11706b95bd5SSteve Sakoman 			   omap_get_gpio_datain(171);
11806b95bd5SSteve Sakoman 
11906b95bd5SSteve Sakoman 		omap_free_gpio(171);
12006b95bd5SSteve Sakoman 		omap_free_gpio(172);
12106b95bd5SSteve Sakoman 		omap_free_gpio(173);
12206b95bd5SSteve Sakoman 	} else {
12306b95bd5SSteve Sakoman 		printf("Error: unable to acquire board revision GPIOs\n");
12406b95bd5SSteve Sakoman 		revision = -1;
1250a0e4badSJean-Christophe PLAGNIOL-VILLARD 	}
1260a0e4badSJean-Christophe PLAGNIOL-VILLARD 
12706b95bd5SSteve Sakoman 	return revision;
1280a0e4badSJean-Christophe PLAGNIOL-VILLARD }
1290a0e4badSJean-Christophe PLAGNIOL-VILLARD 
1300a0e4badSJean-Christophe PLAGNIOL-VILLARD /*
131ca5f80aeSKoen Kooi  * Routine: get_expansion_id
132ca5f80aeSKoen Kooi  * Description: This function checks for expansion board by checking I2C
133ca5f80aeSKoen Kooi  *		bus 1 for the availability of an AT24C01B serial EEPROM.
134ca5f80aeSKoen Kooi  *		returns the device_vendor field from the EEPROM
135ca5f80aeSKoen Kooi  */
136ca5f80aeSKoen Kooi unsigned int get_expansion_id(void)
137ca5f80aeSKoen Kooi {
138ca5f80aeSKoen Kooi 	i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
139ca5f80aeSKoen Kooi 
140ca5f80aeSKoen Kooi 	/* return BEAGLE_NO_EEPROM if eeprom doesn't respond */
141ca5f80aeSKoen Kooi 	if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1) {
142ca5f80aeSKoen Kooi 		i2c_set_bus_num(TWL4030_I2C_BUS);
143ca5f80aeSKoen Kooi 		return BEAGLE_NO_EEPROM;
144ca5f80aeSKoen Kooi 	}
145ca5f80aeSKoen Kooi 
146ca5f80aeSKoen Kooi 	/* read configuration data */
147ca5f80aeSKoen Kooi 	i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config,
148ca5f80aeSKoen Kooi 		 sizeof(expansion_config));
149ca5f80aeSKoen Kooi 
150ca5f80aeSKoen Kooi 	i2c_set_bus_num(TWL4030_I2C_BUS);
151ca5f80aeSKoen Kooi 
152ca5f80aeSKoen Kooi 	return expansion_config.device_vendor;
153ca5f80aeSKoen Kooi }
154ca5f80aeSKoen Kooi 
155ca5f80aeSKoen Kooi /*
1560a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Routine: misc_init_r
1570a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Description: Configure board specific parts
1580a0e4badSJean-Christophe PLAGNIOL-VILLARD  */
1590a0e4badSJean-Christophe PLAGNIOL-VILLARD int misc_init_r(void)
1600a0e4badSJean-Christophe PLAGNIOL-VILLARD {
1610a0e4badSJean-Christophe PLAGNIOL-VILLARD 	struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE;
1620a0e4badSJean-Christophe PLAGNIOL-VILLARD 	struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
163d4e53f06SSteve Kipisz 	struct control_prog_io *prog_io_base = (struct gpio *)OMAP34XX_CTRL_BASE;
164d4e53f06SSteve Kipisz 
165d4e53f06SSteve Kipisz 	/* Enable i2c2 pullup resisters */
166d4e53f06SSteve Kipisz 	writel(~(PRG_I2C2_PULLUPRESX), &prog_io_base->io1);
1670a0e4badSJean-Christophe PLAGNIOL-VILLARD 
16806b95bd5SSteve Sakoman 	switch (get_board_revision()) {
16906b95bd5SSteve Sakoman 	case REVISION_AXBX:
17006b95bd5SSteve Sakoman 		printf("Beagle Rev Ax/Bx\n");
17106b95bd5SSteve Sakoman 		setenv("beaglerev", "AxBx");
17206b95bd5SSteve Sakoman 		break;
17306b95bd5SSteve Sakoman 	case REVISION_CX:
17406b95bd5SSteve Sakoman 		printf("Beagle Rev C1/C2/C3\n");
17506b95bd5SSteve Sakoman 		setenv("beaglerev", "Cx");
17606b95bd5SSteve Sakoman 		MUX_BEAGLE_C();
17706b95bd5SSteve Sakoman 		break;
17806b95bd5SSteve Sakoman 	case REVISION_C4:
17906b95bd5SSteve Sakoman 		printf("Beagle Rev C4\n");
18008cbba2aSSteve Sakoman 		setenv("beaglerev", "C4");
18106b95bd5SSteve Sakoman 		MUX_BEAGLE_C();
18206b95bd5SSteve Sakoman 		/* Set VAUX2 to 1.8V for EHCI PHY */
18306b95bd5SSteve Sakoman 		twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
18406b95bd5SSteve Sakoman 					TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
18506b95bd5SSteve Sakoman 					TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
18606b95bd5SSteve Sakoman 					TWL4030_PM_RECEIVER_DEV_GRP_P1);
18706b95bd5SSteve Sakoman 		break;
188f6e593bbSKoen Kooi 	case REVISION_XM_A:
18908cbba2aSSteve Sakoman 		printf("Beagle xM Rev A\n");
19008cbba2aSSteve Sakoman 		setenv("beaglerev", "xMA");
191f6e593bbSKoen Kooi 		MUX_BEAGLE_XM();
192f6e593bbSKoen Kooi 		/* Set VAUX2 to 1.8V for EHCI PHY */
193f6e593bbSKoen Kooi 		twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
194f6e593bbSKoen Kooi 					TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
195f6e593bbSKoen Kooi 					TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
196f6e593bbSKoen Kooi 					TWL4030_PM_RECEIVER_DEV_GRP_P1);
197f6e593bbSKoen Kooi 		break;
198f6e593bbSKoen Kooi 	case REVISION_XM_B:
199f6e593bbSKoen Kooi 		printf("Beagle xM Rev B\n");
200f6e593bbSKoen Kooi 		setenv("beaglerev", "xMB");
20108cbba2aSSteve Sakoman 		MUX_BEAGLE_XM();
20208cbba2aSSteve Sakoman 		/* Set VAUX2 to 1.8V for EHCI PHY */
20308cbba2aSSteve Sakoman 		twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
20408cbba2aSSteve Sakoman 					TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
20508cbba2aSSteve Sakoman 					TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
20608cbba2aSSteve Sakoman 					TWL4030_PM_RECEIVER_DEV_GRP_P1);
20708cbba2aSSteve Sakoman 		break;
20806b95bd5SSteve Sakoman 	default:
20906b95bd5SSteve Sakoman 		printf("Beagle unknown 0x%02x\n", get_board_revision());
210f6e593bbSKoen Kooi 		MUX_BEAGLE_XM();
211f6e593bbSKoen Kooi 		/* Set VAUX2 to 1.8V for EHCI PHY */
212f6e593bbSKoen Kooi 		twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
213f6e593bbSKoen Kooi 					TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
214f6e593bbSKoen Kooi 					TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
215f6e593bbSKoen Kooi 					TWL4030_PM_RECEIVER_DEV_GRP_P1);
21606b95bd5SSteve Sakoman 	}
21706b95bd5SSteve Sakoman 
218ca5f80aeSKoen Kooi 	switch (get_expansion_id()) {
219ca5f80aeSKoen Kooi 	case TINCANTOOLS_ZIPPY:
220ca5f80aeSKoen Kooi 		printf("Recognized Tincantools Zippy board (rev %d %s)\n",
221ca5f80aeSKoen Kooi 			expansion_config.revision,
222ca5f80aeSKoen Kooi 			expansion_config.fab_revision);
223ca5f80aeSKoen Kooi 		MUX_TINCANTOOLS_ZIPPY();
224ca5f80aeSKoen Kooi 		setenv("buddy", "zippy");
225ca5f80aeSKoen Kooi 		break;
226ca5f80aeSKoen Kooi 	case TINCANTOOLS_ZIPPY2:
227ca5f80aeSKoen Kooi 		printf("Recognized Tincantools Zippy2 board (rev %d %s)\n",
228ca5f80aeSKoen Kooi 			expansion_config.revision,
229ca5f80aeSKoen Kooi 			expansion_config.fab_revision);
230ca5f80aeSKoen Kooi 		MUX_TINCANTOOLS_ZIPPY();
231ca5f80aeSKoen Kooi 		setenv("buddy", "zippy2");
232ca5f80aeSKoen Kooi 		break;
233ca5f80aeSKoen Kooi 	case TINCANTOOLS_TRAINER:
234ca5f80aeSKoen Kooi 		printf("Recognized Tincantools Trainer board (rev %d %s)\n",
235ca5f80aeSKoen Kooi 			expansion_config.revision,
236ca5f80aeSKoen Kooi 			expansion_config.fab_revision);
237ca5f80aeSKoen Kooi 		MUX_TINCANTOOLS_ZIPPY();
238ca5f80aeSKoen Kooi 		MUX_TINCANTOOLS_TRAINER();
239ca5f80aeSKoen Kooi 		setenv("buddy", "trainer");
240ca5f80aeSKoen Kooi 		break;
241ca5f80aeSKoen Kooi 	case TINCANTOOLS_SHOWDOG:
242ca5f80aeSKoen Kooi 		printf("Recognized Tincantools Showdow board (rev %d %s)\n",
243ca5f80aeSKoen Kooi 			expansion_config.revision,
244ca5f80aeSKoen Kooi 			expansion_config.fab_revision);
245ca5f80aeSKoen Kooi 		/* Place holder for DSS2 definition for showdog lcd */
246ca5f80aeSKoen Kooi 		setenv("defaultdisplay", "showdoglcd");
247ca5f80aeSKoen Kooi 		setenv("buddy", "showdog");
248ca5f80aeSKoen Kooi 		break;
249ca5f80aeSKoen Kooi 	case KBADC_BEAGLEFPGA:
250ca5f80aeSKoen Kooi 		printf("Recognized KBADC Beagle FPGA board\n");
251ca5f80aeSKoen Kooi 		MUX_KBADC_BEAGLEFPGA();
252ca5f80aeSKoen Kooi 		setenv("buddy", "beaglefpga");
253ca5f80aeSKoen Kooi 		break;
254*ee8485fdSKoen Kooi 	case LW_BEAGLETOUCH:
255*ee8485fdSKoen Kooi 		printf("Recognized Liquidware BeagleTouch board\n");
256*ee8485fdSKoen Kooi 		setenv("buddy", "beagletouch");
257*ee8485fdSKoen Kooi 		break;
258*ee8485fdSKoen Kooi 	case BRAINMUX_LCDOG:
259*ee8485fdSKoen Kooi 		printf("Recognized Brainmux LCDog board\n");
260*ee8485fdSKoen Kooi 		setenv("buddy", "lcdog");
261*ee8485fdSKoen Kooi 		break;
262*ee8485fdSKoen Kooi 	case BRAINMUX_LCDOGTOUCH:
263*ee8485fdSKoen Kooi 		printf("Recognized Brainmux LCDog Touch board\n");
264*ee8485fdSKoen Kooi 		setenv("buddy", "lcdogtouch");
265*ee8485fdSKoen Kooi 		break;
266*ee8485fdSKoen Kooi 	case BBTOYS_WIFI:
267*ee8485fdSKoen Kooi 		printf("Recognized BeagleBoardToys WiFi board\n");
268*ee8485fdSKoen Kooi 		MUX_BBTOYS_WIFI()
269*ee8485fdSKoen Kooi 		setenv("buddy", "bbtoys-wifi");
270*ee8485fdSKoen Kooi 		break;;
271*ee8485fdSKoen Kooi 	case BBTOYS_VGA:
272*ee8485fdSKoen Kooi 		printf("Recognized BeagleBoardToys VGA board\n");
273*ee8485fdSKoen Kooi 		break;;
274*ee8485fdSKoen Kooi 	case BBTOYS_LCD:
275*ee8485fdSKoen Kooi 		printf("Recognized BeagleBoardToys LCD board\n");
276*ee8485fdSKoen Kooi 		break;;
277ca5f80aeSKoen Kooi 	case BEAGLE_NO_EEPROM:
278ca5f80aeSKoen Kooi 		printf("No EEPROM on expansion board\n");
279ca5f80aeSKoen Kooi 		setenv("buddy", "none");
280ca5f80aeSKoen Kooi 		break;
281ca5f80aeSKoen Kooi 	default:
282ca5f80aeSKoen Kooi 		printf("Unrecognized expansion board: %x\n",
283ca5f80aeSKoen Kooi 			expansion_config.device_vendor);
284ca5f80aeSKoen Kooi 		setenv("buddy", "unknown");
285ca5f80aeSKoen Kooi 	}
286ca5f80aeSKoen Kooi 
287ca5f80aeSKoen Kooi 	if (expansion_config.content == 1)
288ca5f80aeSKoen Kooi 		setenv(expansion_config.env_var, expansion_config.env_setting);
289ca5f80aeSKoen Kooi 
2900a0e4badSJean-Christophe PLAGNIOL-VILLARD 	twl4030_power_init();
291ead39d7aSGrazvydas Ignotas 	twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
2920a0e4badSJean-Christophe PLAGNIOL-VILLARD 
2930a0e4badSJean-Christophe PLAGNIOL-VILLARD 	/* Configure GPIOs to output */
2940a0e4badSJean-Christophe PLAGNIOL-VILLARD 	writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe);
2950a0e4badSJean-Christophe PLAGNIOL-VILLARD 	writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 |
2960a0e4badSJean-Christophe PLAGNIOL-VILLARD 		GPIO15 | GPIO14 | GPIO13 | GPIO12), &gpio5_base->oe);
2970a0e4badSJean-Christophe PLAGNIOL-VILLARD 
2980a0e4badSJean-Christophe PLAGNIOL-VILLARD 	/* Set GPIOs */
2990a0e4badSJean-Christophe PLAGNIOL-VILLARD 	writel(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1,
3000a0e4badSJean-Christophe PLAGNIOL-VILLARD 		&gpio6_base->setdataout);
3010a0e4badSJean-Christophe PLAGNIOL-VILLARD 	writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 |
3020a0e4badSJean-Christophe PLAGNIOL-VILLARD 		GPIO15 | GPIO14 | GPIO13 | GPIO12, &gpio5_base->setdataout);
3030a0e4badSJean-Christophe PLAGNIOL-VILLARD 
3040a0e4badSJean-Christophe PLAGNIOL-VILLARD 	dieid_num_r();
3050a0e4badSJean-Christophe PLAGNIOL-VILLARD 
3060a0e4badSJean-Christophe PLAGNIOL-VILLARD 	return 0;
3070a0e4badSJean-Christophe PLAGNIOL-VILLARD }
3080a0e4badSJean-Christophe PLAGNIOL-VILLARD 
3090a0e4badSJean-Christophe PLAGNIOL-VILLARD /*
3100a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Routine: set_muxconf_regs
3110a0e4badSJean-Christophe PLAGNIOL-VILLARD  * Description: Setting up the configuration Mux registers specific to the
3120a0e4badSJean-Christophe PLAGNIOL-VILLARD  *		hardware. Many pins need to be moved from protect to primary
3130a0e4badSJean-Christophe PLAGNIOL-VILLARD  *		mode.
3140a0e4badSJean-Christophe PLAGNIOL-VILLARD  */
3150a0e4badSJean-Christophe PLAGNIOL-VILLARD void set_muxconf_regs(void)
3160a0e4badSJean-Christophe PLAGNIOL-VILLARD {
3170a0e4badSJean-Christophe PLAGNIOL-VILLARD 	MUX_BEAGLE();
3180a0e4badSJean-Christophe PLAGNIOL-VILLARD }
3190cd31144SSteve Sakoman 
3200cd31144SSteve Sakoman #ifdef CONFIG_GENERIC_MMC
3210cd31144SSteve Sakoman int board_mmc_init(bd_t *bis)
3220cd31144SSteve Sakoman {
3230cd31144SSteve Sakoman 	omap_mmc_init(0);
3240cd31144SSteve Sakoman 	return 0;
3250cd31144SSteve Sakoman }
3260cd31144SSteve Sakoman #endif
327