diff --git a/sys/dev/mmc/mmc_fdt_helpers.c b/sys/dev/mmc/mmc_fdt_helpers.c index 7dff3851883b..e544f3c4ac08 100644 --- a/sys/dev/mmc/mmc_fdt_helpers.c +++ b/sys/dev/mmc/mmc_fdt_helpers.c @@ -100,6 +100,7 @@ mmc_fdt_parse(device_t dev, phandle_t node, struct mmc_fdt_helper *helper, struct mmc_host *host) { uint32_t bus_width; + phandle_t pwrseq_xref; if (node <= 0) node = ofw_bus_get_node(dev); @@ -181,6 +182,13 @@ mmc_fdt_parse(device_t dev, phandle_t node, struct mmc_fdt_helper *helper, host->caps |= MMC_CAP_SIGNALING_330; #endif + if (OF_hasprop(node, "mmc-pwrseq")) { + if (OF_getencprop(node, "mmc-pwrseq", &pwrseq_xref, sizeof(pwrseq_xref)) == -1) { + device_printf(dev, "Cannot get the pwrseq_xref property\n"); + return (ENXIO); + } + helper->mmc_pwrseq = OF_device_from_xref(pwrseq_xref); + } return (0); } diff --git a/sys/dev/mmc/mmc_fdt_helpers.h b/sys/dev/mmc/mmc_fdt_helpers.h index 73ec324d6b9f..c6e2175690ee 100644 --- a/sys/dev/mmc/mmc_fdt_helpers.h +++ b/sys/dev/mmc/mmc_fdt_helpers.h @@ -63,6 +63,8 @@ struct mmc_fdt_helper { regulator_t vmmc_supply; regulator_t vqmmc_supply; #endif + + device_t mmc_pwrseq; }; typedef void (*mmc_fdt_cd_handler)(device_t dev, bool present);