OSDN Git Service

mmc: sdhci-acpi: Add setup_host() callback
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 8 Dec 2017 13:04:58 +0000 (15:04 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 11 Dec 2017 12:15:57 +0000 (13:15 +0100)
Add a ->setup_host() callback so that device-specific changes can be made
to the mmc host controller before it is added.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-acpi.c

index 1b1ce80..f7445cf 100644 (file)
@@ -76,6 +76,7 @@ struct sdhci_acpi_slot {
        size_t          priv_size;
        int (*probe_slot)(struct platform_device *, const char *, const char *);
        int (*remove_slot)(struct platform_device *);
+       int (*setup_host)(struct platform_device *pdev);
 };
 
 struct sdhci_acpi_host {
@@ -688,10 +689,20 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
                }
        }
 
-       err = sdhci_add_host(host);
+       err = sdhci_setup_host(host);
        if (err)
                goto err_free;
 
+       if (c->slot && c->slot->setup_host) {
+               err = c->slot->setup_host(pdev);
+               if (err)
+                       goto err_cleanup;
+       }
+
+       err = __sdhci_add_host(host);
+       if (err)
+               goto err_cleanup;
+
        if (c->use_runtime_pm) {
                pm_runtime_set_active(dev);
                pm_suspend_ignore_children(dev, 1);
@@ -704,6 +715,8 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
 
        return 0;
 
+err_cleanup:
+       sdhci_cleanup_host(c->host);
 err_free:
        sdhci_free_host(c->host);
        return err;