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


Reply via email to