mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-20 04:19:41 +00:00
greybus: Greybus SD/MMC host driver
Need to add specifics, but this should be enough to hook up to the mmc framework.
This commit is contained in:
parent
776f136c75
commit
83ddaaab01
@ -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
|
||||
|
88
drivers/staging/greybus/sdio-gb.c
Normal file
88
drivers/staging/greybus/sdio-gb.c
Normal file
@ -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>");
|
Loading…
x
Reference in New Issue
Block a user