@ -152,34 +152,49 @@ int board_init(void)
int esdhc_status_fixup ( void * blob , const char * compat )
{
char esdhc0_path [ ] = " /soc/esdhc@1560000 " ;
char esdhc1_path [ ] = " /soc/esdhc@1580000 " ;
u8 io = 0 ;
bool sdhc2_en = false ;
u8 mux_sdhc2 ;
do_fixup_by_path ( blob , esdhc0_path , " status " , " okay " ,
sizeof ( " okay " ) , 1 ) ;
u8 io = 0 ;
i2c_set_bus_num ( 0 ) ;
/*
* The I2C IO - expander for mux select is used to control the muxing
* of various onboard interfaces .
*
* IO1 [ 3 : 2 ] indicates SDHC2 interface demultiplexer select lines .
* 00 - SDIO wifi
* 01 - GPIO ( to Arduino )
* 10 - eMMC Memory
* 11 - SPI
*/
if ( i2c_read ( I2C_MUX_IO_ADDR , I2C_MUX_IO_0 , 1 , & io , 1 ) < 0 ) {
/* IO1[7:3] is the field of board revision info. */
if ( i2c_read ( I2C_MUX_IO_ADDR , I2C_MUX_IO_1 , 1 , & io , 1 ) < 0 ) {
printf ( " Error reading i2c boot information! \n " ) ;
return 0 ; /* Don't want to hang() on this error */
return 0 ;
}
/* hwconfig method is used for RevD and later versions. */
if ( ( io & SW_REV_MASK ) < = SW_REV_D ) {
# ifdef CONFIG_HWCONFIG
if ( hwconfig ( " esdhc1 " ) )
sdhc2_en = true ;
# endif
} else {
/*
* The I2C IO - expander for mux select is used to control
* the muxing of various onboard interfaces .
*
* IO0 [ 3 : 2 ] indicates SDHC2 interface demultiplexer
* select lines .
* 00 - SDIO wifi
* 01 - GPIO ( to Arduino )
* 10 - eMMC Memory
* 11 - SPI
*/
if ( i2c_read ( I2C_MUX_IO_ADDR , I2C_MUX_IO_0 , 1 , & io , 1 ) < 0 ) {
printf ( " Error reading i2c boot information! \n " ) ;
return 0 ;
}
mux_sdhc2 = ( io & 0x0c ) > > 2 ;
/* Enable SDHC2 only when use SDIO wifi and eMMC */
if ( mux_sdhc2 = = 2 | | mux_sdhc2 = = 0 )
sdhc2_en = true ;
}
mux_sdhc2 = ( io & 0x0c ) > > 2 ;
/* Enable SDHC2 only when use SDIO wifi and eMMC */
if ( mux_sdhc2 = = 2 | | mux_sdhc2 = = 0 )
if ( sdhc2_en )
do_fixup_by_path ( blob , esdhc1_path , " status " , " okay " ,
sizeof ( " okay " ) , 1 ) ;
else