void            *clk_of_data;
  };
  
- struct sdhci_arasan_zynqmp_clk_data {
-       const struct zynqmp_eemi_ops *eemi_ops;
- };
- 
  /**
 - * struct sdhci_arasan_data
 + * struct sdhci_arasan_data - Arasan Controller Data
 + *
   * @host:             Pointer to the main SDHCI host structure.
   * @clk_ahb:          Pointer to the AHB clock
   * @phy:              Pointer to the generic phy
        .set_phase = sdhci_zynqmp_sampleclk_set_phase,
  };
  
 +/**
 + * sdhci_versal_sdcardclk_set_phase - Set the SD Output Clock Tap Delays
 + *
 + * @hw:                       Pointer to the hardware clock structure.
 + * @degrees:          The clock phase shift between 0 - 359.
 + *
 + * Set the SD Output Clock Tap Delays for Output path
 + *
 + * Return: 0 on success and error value on error
 + */
 +static int sdhci_versal_sdcardclk_set_phase(struct clk_hw *hw, int degrees)
 +{
 +      struct sdhci_arasan_clk_data *clk_data =
 +              container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw);
 +      struct sdhci_arasan_data *sdhci_arasan =
 +              container_of(clk_data, struct sdhci_arasan_data, clk_data);
 +      struct sdhci_host *host = sdhci_arasan->host;
 +      u8 tap_delay, tap_max = 0;
 +
 +      /*
 +       * This is applicable for SDHCI_SPEC_300 and above
 +       * Versal does not set phase for <=25MHz clock.
 +       * If degrees is zero, no need to do anything.
 +       */
 +      if (host->version < SDHCI_SPEC_300 ||
 +          host->timing == MMC_TIMING_LEGACY ||
 +          host->timing == MMC_TIMING_UHS_SDR12 || !degrees)
 +              return 0;
 +
 +      switch (host->timing) {
 +      case MMC_TIMING_MMC_HS:
 +      case MMC_TIMING_SD_HS:
 +      case MMC_TIMING_UHS_SDR25:
 +      case MMC_TIMING_UHS_DDR50:
 +      case MMC_TIMING_MMC_DDR52:
 +              /* For 50MHz clock, 30 Taps are available */
 +              tap_max = 30;
 +              break;
 +      case MMC_TIMING_UHS_SDR50:
 +              /* For 100MHz clock, 15 Taps are available */
 +              tap_max = 15;
 +              break;
 +      case MMC_TIMING_UHS_SDR104:
 +      case MMC_TIMING_MMC_HS200:
 +              /* For 200MHz clock, 8 Taps are available */
 +              tap_max = 8;
 +      default:
 +              break;
 +      }
 +
 +      tap_delay = (degrees * tap_max) / 360;
 +
 +      /* Set the Clock Phase */
 +      if (tap_delay) {
 +              u32 regval;
 +
 +              regval = sdhci_readl(host, SDHCI_ARASAN_OTAPDLY_REGISTER);
 +              regval |= SDHCI_OTAPDLY_ENABLE;
 +              sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER);
 +              regval |= tap_delay;
 +              sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER);
 +      }
 +
 +      return 0;
 +}
 +
 +static const struct clk_ops versal_sdcardclk_ops = {
 +      .recalc_rate = sdhci_arasan_sdcardclk_recalc_rate,
 +      .set_phase = sdhci_versal_sdcardclk_set_phase,
 +};
 +
 +/**
 + * sdhci_versal_sampleclk_set_phase - Set the SD Input Clock Tap Delays
 + *
 + * @hw:                       Pointer to the hardware clock structure.
 + * @degrees:          The clock phase shift between 0 - 359.
 + *
 + * Set the SD Input Clock Tap Delays for Input path
 + *
 + * Return: 0 on success and error value on error
 + */
 +static int sdhci_versal_sampleclk_set_phase(struct clk_hw *hw, int degrees)
 +{
 +      struct sdhci_arasan_clk_data *clk_data =
 +              container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw);
 +      struct sdhci_arasan_data *sdhci_arasan =
 +              container_of(clk_data, struct sdhci_arasan_data, clk_data);
 +      struct sdhci_host *host = sdhci_arasan->host;
 +      u8 tap_delay, tap_max = 0;
 +
 +      /*
 +       * This is applicable for SDHCI_SPEC_300 and above
 +       * Versal does not set phase for <=25MHz clock.
 +       * If degrees is zero, no need to do anything.
 +       */
 +      if (host->version < SDHCI_SPEC_300 ||
 +          host->timing == MMC_TIMING_LEGACY ||
 +          host->timing == MMC_TIMING_UHS_SDR12 || !degrees)
 +              return 0;
 +
 +      switch (host->timing) {
 +      case MMC_TIMING_MMC_HS:
 +      case MMC_TIMING_SD_HS:
 +      case MMC_TIMING_UHS_SDR25:
 +      case MMC_TIMING_UHS_DDR50:
 +      case MMC_TIMING_MMC_DDR52:
 +              /* For 50MHz clock, 120 Taps are available */
 +              tap_max = 120;
 +              break;
 +      case MMC_TIMING_UHS_SDR50:
 +              /* For 100MHz clock, 60 Taps are available */
 +              tap_max = 60;
 +              break;
 +      case MMC_TIMING_UHS_SDR104:
 +      case MMC_TIMING_MMC_HS200:
 +              /* For 200MHz clock, 30 Taps are available */
 +              tap_max = 30;
 +      default:
 +              break;
 +      }
 +
 +      tap_delay = (degrees * tap_max) / 360;
 +
 +      /* Set the Clock Phase */
 +      if (tap_delay) {
 +              u32 regval;
 +
 +              regval = sdhci_readl(host, SDHCI_ARASAN_ITAPDLY_REGISTER);
 +              regval |= SDHCI_ITAPDLY_CHGWIN;
 +              sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
 +              regval |= SDHCI_ITAPDLY_ENABLE;
 +              sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
 +              regval |= tap_delay;
 +              sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
 +              regval &= ~SDHCI_ITAPDLY_CHGWIN;
 +              sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
 +      }
 +
 +      return 0;
 +}
 +
 +static const struct clk_ops versal_sampleclk_ops = {
 +      .recalc_rate = sdhci_arasan_sampleclk_recalc_rate,
 +      .set_phase = sdhci_versal_sampleclk_set_phase,
 +};
 +
  static void arasan_zynqmp_dll_reset(struct sdhci_host *host, u32 deviceid)
  {
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-       struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
-       struct sdhci_arasan_zynqmp_clk_data *zynqmp_clk_data =
-               sdhci_arasan->clk_data.clk_of_data;
-       const struct zynqmp_eemi_ops *eemi_ops = zynqmp_clk_data->eemi_ops;
        u16 clk;
  
        clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);