/** * struct mtk_padding - Basic information of the Padding * @clk: Clock of the module * @reg: Virtual address of the Padding for CPU to access * @cmdq_reg: CMDQ setting of the Padding * * Every Padding should have different clock source, register base, and * CMDQ settings, we stored these differences all together.
*/ struct mtk_padding { struct clk *clk; void __iomem *reg; struct cmdq_client_reg cmdq_reg;
};
int mtk_padding_clk_enable(struct device *dev)
{ struct mtk_padding *padding = dev_get_drvdata(dev);
/* * Notice that even the padding is in bypass mode, * all the settings must be cleared to 0 or * undefined behaviors could happen
*/
writel(0, padding->reg + PADDING_PIC_SIZE_REG);
writel(0, padding->reg + PADDING_H_REG);
writel(0, padding->reg + PADDING_V_REG);
writel(0, padding->reg + PADDING_COLOR_REG);
}
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM;
priv->clk = devm_clk_get(dev, NULL); if (IS_ERR(priv->clk)) return dev_err_probe(dev, PTR_ERR(priv->clk), "failed to get clk\n");
priv->reg = devm_platform_get_and_ioremap_resource(pdev, 0, &res); if (IS_ERR(priv->reg)) return dev_err_probe(dev, PTR_ERR(priv->reg), "failed to do ioremap\n");
#if IS_REACHABLE(CONFIG_MTK_CMDQ)
ret = cmdq_dev_get_client_reg(dev, &priv->cmdq_reg, 0); if (ret) return dev_err_probe(dev, ret, "failed to get gce client reg\n"); #endif
platform_set_drvdata(pdev, priv);
ret = devm_pm_runtime_enable(dev); if (ret) return ret;
ret = component_add(dev, &mtk_padding_component_ops); if (ret) {
pm_runtime_disable(dev); return dev_err_probe(dev, ret, "failed to add component\n");
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.