mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-13 16:14:26 +08:00
soc: mediatek: mmsys: Create struct mtk_mmsys to store context data
Apart from the driver data, in order to extend the driver to support more and more SoCs, we will need to store other configuration data. So, create a mtk_mmsys struct to encapsulate all that information. Signed-off-by: CK Hu <ck.hu@mediatek.com> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Reviewed-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> Link: https://lore.kernel.org/r/20210317181711.795245-2-enric.balletbo@collabora.com Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
This commit is contained in:
parent
0412120153
commit
ce15e7faa2
@ -101,6 +101,11 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
|
||||
.clk_driver = "clk-mt8183-mm",
|
||||
};
|
||||
|
||||
struct mtk_mmsys {
|
||||
void __iomem *regs;
|
||||
const struct mtk_mmsys_driver_data *data;
|
||||
};
|
||||
|
||||
static unsigned int mtk_mmsys_ddp_mout_en(enum mtk_ddp_comp_id cur,
|
||||
enum mtk_ddp_comp_id next,
|
||||
unsigned int *addr)
|
||||
@ -259,21 +264,21 @@ void mtk_mmsys_ddp_connect(struct device *dev,
|
||||
enum mtk_ddp_comp_id cur,
|
||||
enum mtk_ddp_comp_id next)
|
||||
{
|
||||
void __iomem *config_regs = dev_get_drvdata(dev);
|
||||
struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
|
||||
unsigned int addr, value, reg;
|
||||
|
||||
value = mtk_mmsys_ddp_mout_en(cur, next, &addr);
|
||||
if (value) {
|
||||
reg = readl_relaxed(config_regs + addr) | value;
|
||||
writel_relaxed(reg, config_regs + addr);
|
||||
reg = readl_relaxed(mmsys->regs + addr) | value;
|
||||
writel_relaxed(reg, mmsys->regs + addr);
|
||||
}
|
||||
|
||||
mtk_mmsys_ddp_sout_sel(config_regs, cur, next);
|
||||
mtk_mmsys_ddp_sout_sel(mmsys->regs, cur, next);
|
||||
|
||||
value = mtk_mmsys_ddp_sel_in(cur, next, &addr);
|
||||
if (value) {
|
||||
reg = readl_relaxed(config_regs + addr) | value;
|
||||
writel_relaxed(reg, config_regs + addr);
|
||||
reg = readl_relaxed(mmsys->regs + addr) | value;
|
||||
writel_relaxed(reg, mmsys->regs + addr);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
|
||||
@ -282,44 +287,46 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
|
||||
enum mtk_ddp_comp_id cur,
|
||||
enum mtk_ddp_comp_id next)
|
||||
{
|
||||
void __iomem *config_regs = dev_get_drvdata(dev);
|
||||
struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
|
||||
unsigned int addr, value, reg;
|
||||
|
||||
value = mtk_mmsys_ddp_mout_en(cur, next, &addr);
|
||||
if (value) {
|
||||
reg = readl_relaxed(config_regs + addr) & ~value;
|
||||
writel_relaxed(reg, config_regs + addr);
|
||||
reg = readl_relaxed(mmsys->regs + addr) & ~value;
|
||||
writel_relaxed(reg, mmsys->regs + addr);
|
||||
}
|
||||
|
||||
value = mtk_mmsys_ddp_sel_in(cur, next, &addr);
|
||||
if (value) {
|
||||
reg = readl_relaxed(config_regs + addr) & ~value;
|
||||
writel_relaxed(reg, config_regs + addr);
|
||||
reg = readl_relaxed(mmsys->regs + addr) & ~value;
|
||||
writel_relaxed(reg, mmsys->regs + addr);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
|
||||
|
||||
static int mtk_mmsys_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct mtk_mmsys_driver_data *data;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct platform_device *clks;
|
||||
struct platform_device *drm;
|
||||
void __iomem *config_regs;
|
||||
struct mtk_mmsys *mmsys;
|
||||
int ret;
|
||||
|
||||
config_regs = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(config_regs)) {
|
||||
ret = PTR_ERR(config_regs);
|
||||
mmsys = devm_kzalloc(dev, sizeof(*mmsys), GFP_KERNEL);
|
||||
if (!mmsys)
|
||||
return -ENOMEM;
|
||||
|
||||
mmsys->regs = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(mmsys->regs)) {
|
||||
ret = PTR_ERR(mmsys->regs);
|
||||
dev_err(dev, "Failed to ioremap mmsys registers: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, config_regs);
|
||||
mmsys->data = of_device_get_match_data(&pdev->dev);
|
||||
platform_set_drvdata(pdev, mmsys);
|
||||
|
||||
data = of_device_get_match_data(&pdev->dev);
|
||||
|
||||
clks = platform_device_register_data(&pdev->dev, data->clk_driver,
|
||||
clks = platform_device_register_data(&pdev->dev, mmsys->data->clk_driver,
|
||||
PLATFORM_DEVID_AUTO, NULL, 0);
|
||||
if (IS_ERR(clks))
|
||||
return PTR_ERR(clks);
|
||||
|
Loading…
Reference in New Issue
Block a user