summaryrefslogtreecommitdiffstats
path: root/drivers/mci/mci-core.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-05-26 15:11:50 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-05-30 12:18:27 +0200
commitc68feb4b4ee5e0b9f8729971ad73215d6317ebee (patch)
tree2c4f9ca9bdc9158979ed7211c6f212039f460b8e /drivers/mci/mci-core.c
parent73b0d228e5b00365e7289e9c258acb8de3f716b3 (diff)
downloadbarebox-c68feb4b4ee5e0b9f8729971ad73215d6317ebee.tar.gz
barebox-c68feb4b4ee5e0b9f8729971ad73215d6317ebee.tar.xz
mci: make mci device a pure device
No need to match and probe the device if all that we want is a logical deivice for the mci. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mci/mci-core.c')
-rw-r--r--drivers/mci/mci-core.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
index 58db827d01..8b1b946030 100644
--- a/drivers/mci/mci-core.c
+++ b/drivers/mci/mci-core.c
@@ -1630,15 +1630,11 @@ on_error:
return rc;
}
-static struct driver_d mci_driver = {
- .name = "mci",
- .probe = mci_probe,
-};
-
static int mci_init(void)
{
sector_buf = xmemalign(32, 512);
- return platform_driver_register(&mci_driver);
+
+ return 0;
}
device_initcall(mci_init);
@@ -1650,12 +1646,28 @@ device_initcall(mci_init);
*/
int mci_register(struct mci_host *host)
{
+ int ret;
struct device_d *mci_dev = xzalloc(sizeof(struct device_d));
+ strcpy(mci_dev->name, "mci");
mci_dev->id = DEVICE_ID_DYNAMIC;
- strcpy(mci_dev->name, mci_driver.name);
mci_dev->platform_data = host;
mci_dev->parent = host->hw_dev;
- return platform_device_register(mci_dev);
+ ret = register_device(mci_dev);
+ if (ret)
+ goto err_free;
+
+ ret = mci_probe(mci_dev);
+ if (ret)
+ goto err_unregister;
+
+ return 0;
+
+err_unregister:
+ unregister_device(mci_dev);
+err_free:
+ free(mci_dev);
+
+ return ret;
}