mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
Add lv support back and fix its change logic
This commit is contained in:
parent
5363029e60
commit
724970f795
2 changed files with 13 additions and 6 deletions
|
@ -520,7 +520,7 @@ static int _sd_storage_get_op_cond(sdmmc_storage_t *storage, int is_version_1, i
|
||||||
storage->has_sector_access = 1;
|
storage->has_sector_access = 1;
|
||||||
// TODO: Some SD Card incorrectly report low voltage support
|
// TODO: Some SD Card incorrectly report low voltage support
|
||||||
// Disable it for now
|
// Disable it for now
|
||||||
if (cond & 0x1000000 && supports_low_voltage && 0)
|
if (cond & 0x1000000 && supports_low_voltage)
|
||||||
{
|
{
|
||||||
//The low voltage regulator configuration is valid for SDMMC1 only.
|
//The low voltage regulator configuration is valid for SDMMC1 only.
|
||||||
if (storage->sdmmc->id == SDMMC_1 &&
|
if (storage->sdmmc->id == SDMMC_1 &&
|
||||||
|
@ -794,7 +794,8 @@ int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 id, u32
|
||||||
memcpy(storage->scr, buf, 8);
|
memcpy(storage->scr, buf, 8);
|
||||||
DPRINTF("[sd] got scr\n");
|
DPRINTF("[sd] got scr\n");
|
||||||
|
|
||||||
if (bus_width == SDMMC_BUS_WIDTH_4 && storage->scr[1] & 4)
|
// Check if card supports a wider bus and if it's not SD Version 1.0
|
||||||
|
if (bus_width == SDMMC_BUS_WIDTH_4 && storage->scr[1] & 4 && (storage->scr[0] & 0xF))
|
||||||
{
|
{
|
||||||
if (!_sd_storage_execute_app_cmd_type1(storage, &tmp, SD_APP_SET_BUS_WIDTH, SD_BUS_WIDTH_4, 0, R1_STATE_TRAN))
|
if (!_sd_storage_execute_app_cmd_type1(storage, &tmp, SD_APP_SET_BUS_WIDTH, SD_BUS_WIDTH_4, 0, R1_STATE_TRAN))
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,24 +54,30 @@ int sdmmc_get_voltage(sdmmc_t *sdmmc)
|
||||||
|
|
||||||
static int _sdmmc_set_voltage(sdmmc_t *sdmmc, u32 power)
|
static int _sdmmc_set_voltage(sdmmc_t *sdmmc, u32 power)
|
||||||
{
|
{
|
||||||
|
u8 pwr = 0;
|
||||||
|
|
||||||
switch (power)
|
switch (power)
|
||||||
{
|
{
|
||||||
case SDMMC_POWER_OFF:
|
case SDMMC_POWER_OFF:
|
||||||
sdmmc->regs->pwrcon &= ~TEGRA_MMC_PWRCTL_SD_BUS_POWER;
|
sdmmc->regs->pwrcon &= ~TEGRA_MMC_PWRCTL_SD_BUS_POWER;
|
||||||
break;
|
break;
|
||||||
case SDMMC_POWER_1_8:
|
case SDMMC_POWER_1_8:
|
||||||
sdmmc->regs->pwrcon =
|
sdmmc->regs->pwrcon = TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V1_8;
|
||||||
(sdmmc->regs->pwrcon & TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_MASK) |
|
pwr = TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V1_8;
|
||||||
TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V1_8;
|
|
||||||
break;
|
break;
|
||||||
case SDMMC_POWER_3_3:
|
case SDMMC_POWER_3_3:
|
||||||
sdmmc->regs->pwrcon = TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V3_3;
|
sdmmc->regs->pwrcon = TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V3_3;
|
||||||
|
pwr = TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V3_3;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdmmc->regs->pwrcon |= TEGRA_MMC_PWRCTL_SD_BUS_POWER;
|
if (power != SDMMC_POWER_OFF)
|
||||||
|
{
|
||||||
|
pwr |= TEGRA_MMC_PWRCTL_SD_BUS_POWER;
|
||||||
|
sdmmc->regs->pwrcon = pwr;
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue