![Ulf Hansson](/assets/img/avatar_default.png)
To add the core part for the MMC power sequence, let's start by adding initial support for the simple MMC power sequence provider. In this initial step, the MMC power sequence node are fetched and the compatible string for the simple MMC power sequence provider are verified. At this point we don't parse the node for any properties, but instead that will be handled from following patches. Since there are no properties supported yet, let's just implement the ->alloc() and the ->free() callbacks. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> Reviewed-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
49 lines
1,005 B
C
49 lines
1,005 B
C
/*
|
|
* Copyright (C) 2014 Linaro Ltd
|
|
*
|
|
* Author: Ulf Hansson <ulf.hansson@linaro.org>
|
|
*
|
|
* License terms: GNU General Public License (GPL) version 2
|
|
*
|
|
* Simple MMC power sequence management
|
|
*/
|
|
#include <linux/kernel.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/device.h>
|
|
#include <linux/err.h>
|
|
|
|
#include <linux/mmc/host.h>
|
|
|
|
#include "pwrseq.h"
|
|
|
|
struct mmc_pwrseq_simple {
|
|
struct mmc_pwrseq pwrseq;
|
|
};
|
|
|
|
static void mmc_pwrseq_simple_free(struct mmc_host *host)
|
|
{
|
|
struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq,
|
|
struct mmc_pwrseq_simple, pwrseq);
|
|
|
|
kfree(pwrseq);
|
|
host->pwrseq = NULL;
|
|
}
|
|
|
|
static struct mmc_pwrseq_ops mmc_pwrseq_simple_ops = {
|
|
.free = mmc_pwrseq_simple_free,
|
|
};
|
|
|
|
int mmc_pwrseq_simple_alloc(struct mmc_host *host, struct device *dev)
|
|
{
|
|
struct mmc_pwrseq_simple *pwrseq;
|
|
|
|
pwrseq = kzalloc(sizeof(struct mmc_pwrseq_simple), GFP_KERNEL);
|
|
if (!pwrseq)
|
|
return -ENOMEM;
|
|
|
|
pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops;
|
|
host->pwrseq = &pwrseq->pwrseq;
|
|
|
|
return 0;
|
|
}
|