|
@@ -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;
|