sd: add sd power cycle for sd3.0 [1/1]

PD#SWPL-14953

Problem:
SD card 3.0 mode requires power cycle.
if not, the initialization of SD card will be affected.

Solution:
add SD power cycle supported.

Verify:
sm1_ac200

Change-Id: Ic8aecadf3b63660adb74ff4ecf0a5d38037b579f
Signed-off-by: Nan Li <nan.li@amlogic.com>
This commit is contained in:
Nan Li
2019-10-10 15:31:59 +08:00
committed by Luke Go
parent 21288ca37d
commit 1a249d948b
3 changed files with 38 additions and 2 deletions

View File

@@ -1511,7 +1511,8 @@
"sd_to_ao_uart_pins",
"ao_to_sd_uart_pins",
"sd_to_ao_jtag_pins",
"ao_to_sd_jtag_pins";
"ao_to_sd_jtag_pins",
"sd_all_pd_pins";
pinctrl-0 = <&sd_all_pins>;
pinctrl-1 = <&sd_clk_cmd_pins>;
@@ -1526,6 +1527,7 @@
pinctrl-7 = <&sd_all_pins &sd_to_ao_uart_pins>;
pinctrl-8 = <&sd_to_ao_uart_clr_pins
&ao_to_sd_uart_pins>;
pinctrl-9 = <&sd_all_pd_pins>;
clocks = <&clkc CLKID_SD_EMMC_B>,
<&clkc CLKID_SD_EMMC_B_P0_COMP>,
@@ -2047,6 +2049,20 @@
};
};
sd_all_pd_pins:sd_all_pd_pins {
mux {
groups = "GPIOC_0",
"GPIOC_1",
"GPIOC_2",
"GPIOC_3",
"GPIOC_4",
"GPIOC_5";
function = "gpio_periphs";
bias-pull-down;
output-low;
};
};
sd_1bit_pins:sd_1bit_pins {
mux {
groups = "sdcard_d0_c",

View File

@@ -1510,7 +1510,8 @@
"sd_to_ao_uart_pins",
"ao_to_sd_uart_pins",
"sd_to_ao_jtag_pins",
"ao_to_sd_jtag_pins";
"ao_to_sd_jtag_pins",
"sd_all_pd_pins";
pinctrl-0 = <&sd_all_pins>;
pinctrl-1 = <&sd_clk_cmd_pins>;
@@ -1525,6 +1526,7 @@
pinctrl-7 = <&sd_all_pins &sd_to_ao_uart_pins>;
pinctrl-8 = <&sd_to_ao_uart_clr_pins
&ao_to_sd_uart_pins>;
pinctrl-8 = <&sd_all_pd_pins>;
clocks = <&clkc CLKID_SD_EMMC_B>,
<&clkc CLKID_SD_EMMC_B_P0_COMP>,
@@ -2007,6 +2009,20 @@
};
};
sd_all_pd_pins:sd_all_pd_pins {
mux {
groups = "GPIOC_0",
"GPIOC_1",
"GPIOC_2",
"GPIOC_3",
"GPIOC_4",
"GPIOC_5";
function = "gpio_periphs";
bias-pull-down;
output-low;
};
};
sd_1bit_pins:sd_1bit_pins {
mux {
groups = "sdcard_d0_c",

View File

@@ -470,6 +470,10 @@ static void aml_sd_emmc_set_power_v3(struct amlsd_platform *pdata,
pdata->pwr_on(pdata);
break;
case MMC_POWER_UP:
if (aml_card_type_non_sdio(pdata)) {
of_amlsd_pwr_off(pdata);
of_amlsd_pwr_on(pdata);
}
break;
case MMC_POWER_OFF:
writel(0, host->base + SD_EMMC_DELAY1_V3);