mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-14 04:46:01 +01:00
This construct is quite long-winded. In earlier days it made some sense since auto-allocation was a strange concept. But with driver model now used pretty universally, we can shorten this to 'auto'. This reduces verbosity and makes it easier to read. Coincidentally it also ensures that every declaration is on one line, thus making dtoc's job easier. Signed-off-by: Simon Glass <sjg@chromium.org>
86 lines
1.7 KiB
C
86 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2019 MediaTek Inc. All Rights Reserved.
|
|
*
|
|
* Author: Weijie Gao <weijie.gao@mediatek.com>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
#include <errno.h>
|
|
#include <log.h>
|
|
#include <malloc.h>
|
|
#include <reset-uclass.h>
|
|
#include <linux/bitops.h>
|
|
#include <linux/io.h>
|
|
|
|
struct mtmips_reset_priv {
|
|
void __iomem *base;
|
|
};
|
|
|
|
static int mtmips_reset_request(struct reset_ctl *reset_ctl)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int mtmips_reset_free(struct reset_ctl *reset_ctl)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int mtmips_reset_assert(struct reset_ctl *reset_ctl)
|
|
{
|
|
struct mtmips_reset_priv *priv = dev_get_priv(reset_ctl->dev);
|
|
|
|
setbits_32(priv->base, BIT(reset_ctl->id));
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int mtmips_reset_deassert(struct reset_ctl *reset_ctl)
|
|
{
|
|
struct mtmips_reset_priv *priv = dev_get_priv(reset_ctl->dev);
|
|
|
|
clrbits_32(priv->base, BIT(reset_ctl->id));
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct reset_ops mtmips_reset_ops = {
|
|
.request = mtmips_reset_request,
|
|
.rfree = mtmips_reset_free,
|
|
.rst_assert = mtmips_reset_assert,
|
|
.rst_deassert = mtmips_reset_deassert,
|
|
};
|
|
|
|
static int mtmips_reset_probe(struct udevice *dev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int mtmips_reset_ofdata_to_platdata(struct udevice *dev)
|
|
{
|
|
struct mtmips_reset_priv *priv = dev_get_priv(dev);
|
|
|
|
priv->base = (void __iomem *)dev_remap_addr_index(dev, 0);
|
|
if (!priv->base)
|
|
return -EINVAL;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct udevice_id mtmips_reset_ids[] = {
|
|
{ .compatible = "mediatek,mtmips-reset" },
|
|
{ }
|
|
};
|
|
|
|
U_BOOT_DRIVER(mtmips_reset) = {
|
|
.name = "mtmips-reset",
|
|
.id = UCLASS_RESET,
|
|
.of_match = mtmips_reset_ids,
|
|
.ofdata_to_platdata = mtmips_reset_ofdata_to_platdata,
|
|
.probe = mtmips_reset_probe,
|
|
.priv_auto = sizeof(struct mtmips_reset_priv),
|
|
.ops = &mtmips_reset_ops,
|
|
};
|