greybus: Greybus SD/MMC host driver

Need to add specifics, but this should be enough to hook up to the mmc
framework.
diff --git a/drivers/staging/greybus/sdio-gb.c b/drivers/staging/greybus/sdio-gb.c
new file mode 100644
index 0000000..f92ab1b
--- /dev/null
+++ b/drivers/staging/greybus/sdio-gb.c
@@ -0,0 +1,88 @@
+/*
+ * SD/MMC Greybus driver.
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * Released under the GPLv2 only.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/mmc/host.h>
+#include "greybus.h"
+
+struct sd_gb_host {
+	struct mmc_host	*mmc;
+	struct mmc_request *mrq;
+	// FIXME - some lock?
+};
+
+static const struct greybus_device_id id_table[] = {
+	{ GREYBUS_DEVICE(0x43, 0x43) },	/* make shit up */
+	{ },	/* terminating NULL entry */
+};
+
+static void gb_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	// FIXME - do something here...
+}
+
+static void gb_sd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
+{
+	// FIXME - do something here...
+}
+
+static int gb_sd_get_ro(struct mmc_host *mmc)
+{
+	// FIXME - do something here...
+	return 0;
+}
+
+static const struct mmc_host_ops gb_sd_ops = {
+	.request	= gb_sd_request,
+	.set_ios	= gb_sd_set_ios,
+	.get_ro		= gb_sd_get_ro,
+};
+
+static int sd_gb_probe(struct greybus_device *gdev, const struct greybus_device_id *id)
+{
+	struct mmc_host *mmc;
+	struct sd_gb_host *host;
+
+	mmc = mmc_alloc_host(sizeof(struct sd_gb_host), &gdev->dev);
+	if (!mmc)
+		return -ENOMEM;
+
+	host = mmc_priv(mmc);
+	host->mmc = mmc;
+
+	mmc->ops = &gb_sd_ops;
+	// FIXME - set up size limits we can handle.
+
+	greybus_set_drvdata(gdev, host);
+	return 0;
+}
+
+static void sd_gb_disconnect(struct greybus_device *gdev)
+{
+	struct mmc_host *mmc;
+	struct sd_gb_host *host;
+
+	host = greybus_get_drvdata(gdev);
+	mmc = host->mmc;
+
+	mmc_remove_host(mmc);
+	mmc_free_host(mmc);
+}
+
+static struct greybus_driver sd_gb_driver = {
+	.probe =	sd_gb_probe,
+	.disconnect =	sd_gb_disconnect,
+	.id_table =	id_table,
+};
+
+module_greybus_driver(sd_gb_driver);
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Greybus SD/MMC Host driver");
+MODULE_AUTHOR("Greg Kroah-Hartman <gregkh@linuxfoundation.org>");