Merge branch 'fixes' into next
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 16 Jan 2020 11:37:26 +0000 (12:37 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 16 Jan 2020 11:37:26 +0000 (12:37 +0100)
1  2 
drivers/mmc/host/sdhci_am654.c

@@@ -240,6 -240,35 +240,35 @@@ static void sdhci_am654_write_b(struct 
        writeb(val, host->ioaddr + reg);
  }
  
+ static int sdhci_am654_execute_tuning(struct mmc_host *mmc, u32 opcode)
+ {
+       struct sdhci_host *host = mmc_priv(mmc);
+       int err = sdhci_execute_tuning(mmc, opcode);
+       if (err)
+               return err;
+       /*
+        * Tuning data remains in the buffer after tuning.
+        * Do a command and data reset to get rid of it
+        */
+       sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA);
+       return 0;
+ }
+ static u32 sdhci_am654_cqhci_irq(struct sdhci_host *host, u32 intmask)
+ {
+       int cmd_error = 0;
+       int data_error = 0;
+       if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
+               return intmask;
+       cqhci_irq(host->mmc, intmask, cmd_error, data_error);
+       return 0;
+ }
  static struct sdhci_ops sdhci_am654_ops = {
        .get_max_clock = sdhci_pltfm_clk_get_max_clock,
        .get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
        .set_power = sdhci_am654_set_power,
        .set_clock = sdhci_am654_set_clock,
        .write_b = sdhci_am654_write_b,
+       .irq = sdhci_am654_cqhci_irq,
        .reset = sdhci_reset,
  };
  
  static const struct sdhci_pltfm_data sdhci_am654_pdata = {
        .ops = &sdhci_am654_ops,
-       .quirks = SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
-                 SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
+       .quirks = SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
        .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
  };
  
@@@ -263,19 -292,6 +292,6 @@@ static const struct sdhci_am654_driver_
        .flags = IOMUX_PRESENT | FREQSEL_2_BIT | STRBSEL_4_BIT | DLL_PRESENT,
  };
  
- static u32 sdhci_am654_cqhci_irq(struct sdhci_host *host, u32 intmask)
- {
-       int cmd_error = 0;
-       int data_error = 0;
-       if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
-               return intmask;
-       cqhci_irq(host->mmc, intmask, cmd_error, data_error);
-       return 0;
- }
  static struct sdhci_ops sdhci_j721e_8bit_ops = {
        .get_max_clock = sdhci_pltfm_clk_get_max_clock,
        .get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
  
  static const struct sdhci_pltfm_data sdhci_j721e_8bit_pdata = {
        .ops = &sdhci_j721e_8bit_ops,
-       .quirks = SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
-                 SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
+       .quirks = SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
        .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
  };
  
@@@ -314,8 -329,7 +329,7 @@@ static struct sdhci_ops sdhci_j721e_4bi
  
  static const struct sdhci_pltfm_data sdhci_j721e_4bit_pdata = {
        .ops = &sdhci_j721e_4bit_ops,
-       .quirks = SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
-                 SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
+       .quirks = SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
        .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
  };
  
@@@ -491,6 -505,7 +505,6 @@@ static int sdhci_am654_probe(struct pla
        struct sdhci_am654_data *sdhci_am654;
        const struct of_device_id *match;
        struct sdhci_host *host;
 -      struct resource *res;
        struct clk *clk_xin;
        struct device *dev = &pdev->dev;
        void __iomem *base;
                goto pm_runtime_disable;
        }
  
 -      res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
 -      base = devm_ioremap_resource(dev, res);
 +      base = devm_platform_ioremap_resource(pdev, 1);
        if (IS_ERR(base)) {
                ret = PTR_ERR(base);
                goto pm_runtime_put;
                goto pm_runtime_put;
        }
  
+       host->mmc_host_ops.execute_tuning = sdhci_am654_execute_tuning;
        ret = sdhci_am654_init(host);
        if (ret)
                goto pm_runtime_put;