hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/mmc/host/dw_mmc.c
....@@ -1468,7 +1468,7 @@
14681468 {
14691469 struct dw_mci_slot *slot = mmc_priv(mmc);
14701470 const struct dw_mci_drv_data *drv_data = slot->host->drv_data;
1471
- u32 regs;
1471
+ u32 regs, power_off_delay;
14721472 int ret;
14731473
14741474 switch (ios->bus_width) {
....@@ -1507,8 +1507,14 @@
15071507
15081508 switch (ios->power_mode) {
15091509 case MMC_POWER_UP:
1510
- if (!IS_ERR_OR_NULL(slot->host->pinctrl))
1511
- pinctrl_select_state(slot->host->pinctrl, slot->host->idle_state);
1510
+ if (dw_mci_get_cd(mmc) && !IS_ERR_OR_NULL(slot->host->pinctrl)) {
1511
+ if (!pinctrl_select_state(slot->host->pinctrl, slot->host->idle_state)) {
1512
+ if (device_property_read_u32(slot->host->dev, "power-off-delay-ms",
1513
+ &power_off_delay))
1514
+ power_off_delay = 200;
1515
+ msleep(power_off_delay);
1516
+ }
1517
+ }
15121518
15131519 if (!IS_ERR(mmc->supply.vmmc)) {
15141520 ret = mmc_regulator_set_ocr(mmc, mmc->supply.vmmc,