Loading drivers/staging/greybus/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ greybus-y := core.o obj-m += greybus.o obj-m += i2c-gb.o obj-m += sdio-gb.o KERNELVER ?= $(shell uname -r) KERNELDIR ?= /lib/modules/$(KERNELVER)/build Loading drivers/staging/greybus/sdio-gb.c 0 → 100644 +88 −0 Original line number Diff line number Diff line /* * 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>"); Loading
drivers/staging/greybus/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ greybus-y := core.o obj-m += greybus.o obj-m += i2c-gb.o obj-m += sdio-gb.o KERNELVER ?= $(shell uname -r) KERNELDIR ?= /lib/modules/$(KERNELVER)/build Loading
drivers/staging/greybus/sdio-gb.c 0 → 100644 +88 −0 Original line number Diff line number Diff line /* * 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>");