HS400 support when it goes in will add a number of extra calls to mci_set_ios after changing just the timing. We already have two places where we do this, so let's have a helper for it like Linux does.
Signed-off-by: Ahmad Fatoum <a.fat...@pengutronix.de> --- drivers/mci/mci-core.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c index bd538ccb4a79..14d99d01b441 100644 --- a/drivers/mci/mci-core.c +++ b/drivers/mci/mci-core.c @@ -1093,6 +1093,19 @@ static void mci_set_bus_width(struct mci *mci, enum mci_bus_width width) mci_set_ios(mci); } +/** + * Setup host's interface timing + * @param mci MCI instance + * @param width New timing + */ +static void mci_set_timing(struct mci *mci, enum mci_timing timing) +{ + struct mci_host *host = mci->host; + + host->ios.timing = timing; + mci_set_ios(mci); +} + /** * Extract card's version from its CSD * @param mci MCI instance @@ -1709,8 +1722,7 @@ static int mmc_select_hs200(struct mci *mci) old_timing = mci->host->ios.timing; old_clock = mci->host->ios.clock; - mci->host->ios.timing = MMC_TIMING_MMC_HS200; - mci_set_ios(mci); + mci_set_timing(mci, MMC_TIMING_MMC_HS200); mci_set_clock(mci, mci->host->hs_max_dtr); err = mci_switch_status(mci, true); @@ -1721,8 +1733,7 @@ static int mmc_select_hs200(struct mci *mci) */ if (err == -EBADMSG) { mci->host->ios.clock = old_clock; - mci->host->ios.timing = old_timing; - mci_set_ios(mci); + mci_set_timing(mci, old_timing); } } err: -- 2.39.5