提交 e1a31034 编写于 作者: Y Yangbo Lu 提交者: Priyanka Jain

board: fsl: lx2160aqds: identify SDHC adapter during board init

Add support for SDHC adapter identification and configuration
during board init.
Signed-off-by: NYangbo Lu <yangbo.lu@nxp.com>
Reviewed-by: NPriyanka Jain <priyanka.jain@nxp.com>
上级 39913ace
...@@ -36,7 +36,12 @@ struct qixis { ...@@ -36,7 +36,12 @@ struct qixis {
u8 gdc; u8 gdc;
u8 gdd; /* DCM Debug Data Register,0x17 */ u8 gdd; /* DCM Debug Data Register,0x17 */
u8 dmack; 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 watch; /* Watchdog Register,0x1F */
u8 pwr_ctl[2]; /* Power Control Register,0x20 */ u8 pwr_ctl[2]; /* Power Control Register,0x20 */
u8 res2[2]; u8 res2[2];
...@@ -117,6 +122,7 @@ void qixis_write_i2c(unsigned int reg, u8 value); ...@@ -117,6 +122,7 @@ void qixis_write_i2c(unsigned int reg, u8 value);
/* Use for SDHC adapter card type identification and operation */ /* Use for SDHC adapter card type identification and operation */
#define QIXIS_SDID_MASK 0x07 #define QIXIS_SDID_MASK 0x07
#define QIXIS_ESDHC_ADAPTER_TYPE_EMMC45 0x1 /* eMMC Card Rev4.5 */ #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_SDMMC_LEGACY 0x2 /* SD/MMC Legacy Card */
#define QIXIS_ESDHC_ADAPTER_TYPE_EMMC44 0x3 /* eMMC Card Rev4.4 */ #define QIXIS_ESDHC_ADAPTER_TYPE_EMMC44 0x3 /* eMMC Card Rev4.4 */
...@@ -125,6 +131,9 @@ void qixis_write_i2c(unsigned int reg, u8 value); ...@@ -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_ADAPTER_TYPE_SD 0x6 /* SD Card Rev2.0 3.0 */
#define QIXIS_ESDHC_NO_ADAPTER 0x7 /* No Card is Present*/ #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_SDCLKIN 0x08
#define QIXIS_SDCLKOUT 0x02 #define QIXIS_SDCLKOUT 0x02
#define QIXIS_DAT5_6_7 0X02 #define QIXIS_DAT5_6_7 0X02
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <fdt_support.h> #include <fdt_support.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/libfdt.h> #include <linux/libfdt.h>
#include <linux/delay.h>
#include <fsl-mc/fsl_mc.h> #include <fsl-mc/fsl_mc.h>
#include <env_internal.h> #include <env_internal.h>
#include <efi_loader.h> #include <efi_loader.h>
...@@ -379,7 +380,7 @@ int checkboard(void) ...@@ -379,7 +380,7 @@ int checkboard(void)
*/ */
u8 qixis_esdhc_detect_quirk(void) u8 qixis_esdhc_detect_quirk(void)
{ {
/* for LX2160AQDS res1[1] @ offset 0x1A is SDHC1 Control/Status (SDHC1) /*
* SDHC1 Card ID: * SDHC1 Card ID:
* Specifies the type of card installed in the SDHC1 adapter slot. * Specifies the type of card installed in the SDHC1 adapter slot.
* 000= (reserved) * 000= (reserved)
...@@ -391,10 +392,35 @@ u8 qixis_esdhc_detect_quirk(void) ...@@ -391,10 +392,35 @@ u8 qixis_esdhc_detect_quirk(void)
* 110= SDCard V2/V3 adapter installed. * 110= SDCard V2/V3 adapter installed.
* 111= no adapter is 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); 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) int config_board_mux(void)
{ {
u8 reg11, reg5, reg13; u8 reg11, reg5, reg13;
...@@ -501,6 +527,12 @@ int config_board_mux(void) ...@@ -501,6 +527,12 @@ int config_board_mux(void)
return 0; return 0;
} }
int board_early_init_r(void)
{
esdhc_adapter_card_ident();
return 0;
}
#elif defined(CONFIG_TARGET_LX2160ARDB) #elif defined(CONFIG_TARGET_LX2160ARDB)
int config_board_mux(void) int config_board_mux(void)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册