board: fsl: lx2160aqds: identify SDHC adapter during board init
Add support for SDHC adapter identification and configuration during board init. Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com> Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
parent
39913acedd
commit
e1a31034a6
@ -36,7 +36,12 @@ struct qixis {
|
||||
u8 gdc;
|
||||
u8 gdd; /* DCM Debug Data Register,0x17 */
|
||||
u8 dmack;
|
||||
u8 res1[6];
|
||||
u8 res1;
|
||||
u8 sdhc1;
|
||||
u8 sdhc2;
|
||||
u8 stat_pres3;
|
||||
u8 los_stat;
|
||||
u8 usb_ctl;
|
||||
u8 watch; /* Watchdog Register,0x1F */
|
||||
u8 pwr_ctl[2]; /* Power Control Register,0x20 */
|
||||
u8 res2[2];
|
||||
@ -117,6 +122,7 @@ void qixis_write_i2c(unsigned int reg, u8 value);
|
||||
|
||||
/* Use for SDHC adapter card type identification and operation */
|
||||
#define QIXIS_SDID_MASK 0x07
|
||||
|
||||
#define QIXIS_ESDHC_ADAPTER_TYPE_EMMC45 0x1 /* eMMC Card Rev4.5 */
|
||||
#define QIXIS_ESDHC_ADAPTER_TYPE_SDMMC_LEGACY 0x2 /* SD/MMC Legacy Card */
|
||||
#define QIXIS_ESDHC_ADAPTER_TYPE_EMMC44 0x3 /* eMMC Card Rev4.4 */
|
||||
@ -125,6 +131,9 @@ void qixis_write_i2c(unsigned int reg, u8 value);
|
||||
#define QIXIS_ESDHC_ADAPTER_TYPE_SD 0x6 /* SD Card Rev2.0 3.0 */
|
||||
#define QIXIS_ESDHC_NO_ADAPTER 0x7 /* No Card is Present*/
|
||||
|
||||
#define QIXIS_SDHC1_S1V3 0x80 /* SDHC1: SDHC1 3.3V power control */
|
||||
#define QIXIS_SDHC1_VS 0x30 /* BRDCFG11: route to SDHC1_VS */
|
||||
|
||||
#define QIXIS_SDCLKIN 0x08
|
||||
#define QIXIS_SDCLKOUT 0x02
|
||||
#define QIXIS_DAT5_6_7 0X02
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <fdt_support.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <fsl-mc/fsl_mc.h>
|
||||
#include <env_internal.h>
|
||||
#include <efi_loader.h>
|
||||
@ -379,7 +380,7 @@ int checkboard(void)
|
||||
*/
|
||||
u8 qixis_esdhc_detect_quirk(void)
|
||||
{
|
||||
/* for LX2160AQDS res1[1] @ offset 0x1A is SDHC1 Control/Status (SDHC1)
|
||||
/*
|
||||
* SDHC1 Card ID:
|
||||
* Specifies the type of card installed in the SDHC1 adapter slot.
|
||||
* 000= (reserved)
|
||||
@ -391,10 +392,35 @@ u8 qixis_esdhc_detect_quirk(void)
|
||||
* 110= SDCard V2/V3 adapter installed.
|
||||
* 111= no adapter is installed.
|
||||
*/
|
||||
return ((QIXIS_READ(res1[1]) & QIXIS_SDID_MASK) !=
|
||||
return ((QIXIS_READ(sdhc1) & QIXIS_SDID_MASK) !=
|
||||
QIXIS_ESDHC_NO_ADAPTER);
|
||||
}
|
||||
|
||||
static void esdhc_adapter_card_ident(void)
|
||||
{
|
||||
u8 card_id, val;
|
||||
|
||||
val = QIXIS_READ(sdhc1);
|
||||
card_id = val & QIXIS_SDID_MASK;
|
||||
|
||||
switch (card_id) {
|
||||
case QIXIS_ESDHC_ADAPTER_TYPE_SD:
|
||||
/* Power cycle to card */
|
||||
val &= ~QIXIS_SDHC1_S1V3;
|
||||
QIXIS_WRITE(sdhc1, val);
|
||||
mdelay(1);
|
||||
val |= QIXIS_SDHC1_S1V3;
|
||||
QIXIS_WRITE(sdhc1, val);
|
||||
/* Route to SDHC1_VS */
|
||||
val = QIXIS_READ(brdcfg[11]);
|
||||
val |= QIXIS_SDHC1_VS;
|
||||
QIXIS_WRITE(brdcfg[11], val);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int config_board_mux(void)
|
||||
{
|
||||
u8 reg11, reg5, reg13;
|
||||
@ -501,6 +527,12 @@ int config_board_mux(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
esdhc_adapter_card_ident();
|
||||
return 0;
|
||||
}
|
||||
#elif defined(CONFIG_TARGET_LX2160ARDB)
|
||||
int config_board_mux(void)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user