enum reg_type {
TYPE_REG_OWN, /* module own register space */
TYPE_REG_GPR, /* register in GPR space */
TYPE_REG_SM, /* System Manager controls the register */
};
/** *structfsl_mqs_soc_data-socspecificdata * *@type:controlregisterspacetype *@sm_index:indexfromdefinitioninsystemmanager *@ctrl_off:controlregisteroffset *@en_mask:enablebitmask *@en_shift:enablebitshift *@rst_mask:resetbitmask *@rst_shift:resetbitshift *@osr_mask:oversamplebitmask *@osr_shift:oversamplebitshift *@div_mask:clockdividermask *@div_shift:clockdividerbitshift
*/ struct fsl_mqs_soc_data { enum reg_type type; int sm_index; int ctrl_off; int en_mask; int en_shift; int rst_mask; int rst_shift; int osr_mask; int osr_shift; int div_mask; int div_shift;
};
mqs_priv = devm_kzalloc(&pdev->dev, sizeof(*mqs_priv), GFP_KERNEL); if (!mqs_priv) return -ENOMEM;
/* On i.MX6sx the MQS control register is in GPR domain *Butini.MX8QM/i.MX8QXPthecontrolregisterismoved *toitsowndomain.
*/
mqs_priv->soc = of_device_get_match_data(&pdev->dev);
if (mqs_priv->soc->type == TYPE_REG_GPR) {
gpr_np = of_parse_phandle(np, "gpr", 0); if (!gpr_np) {
dev_err(&pdev->dev, "failed to get gpr node by phandle\n"); return -EINVAL;
}
mqs_priv->regmap = syscon_node_to_regmap(gpr_np);
of_node_put(gpr_np); if (IS_ERR(mqs_priv->regmap)) {
dev_err(&pdev->dev, "failed to get gpr regmap\n"); return PTR_ERR(mqs_priv->regmap);
}
} elseif (mqs_priv->soc->type == TYPE_REG_SM) {
mqs_priv->regmap = devm_regmap_init(&pdev->dev,
NULL,
mqs_priv,
&fsl_mqs_sm_regmap); if (IS_ERR(mqs_priv->regmap)) {
dev_err(&pdev->dev, "failed to init regmap: %ld\n",
PTR_ERR(mqs_priv->regmap)); return PTR_ERR(mqs_priv->regmap);
}
} else {
regs = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(regs)) return PTR_ERR(regs);
mqs_priv->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "core",
regs,
&fsl_mqs_regmap_config); if (IS_ERR(mqs_priv->regmap)) {
dev_err(&pdev->dev, "failed to init regmap: %ld\n",
PTR_ERR(mqs_priv->regmap)); return PTR_ERR(mqs_priv->regmap);
}
mqs_priv->ipg = devm_clk_get(&pdev->dev, "core"); if (IS_ERR(mqs_priv->ipg)) {
dev_err(&pdev->dev, "failed to get the clock: %ld\n",
PTR_ERR(mqs_priv->ipg)); return PTR_ERR(mqs_priv->ipg);
}
}
mqs_priv->mclk = devm_clk_get(&pdev->dev, "mclk"); if (IS_ERR(mqs_priv->mclk)) {
dev_err(&pdev->dev, "failed to get the clock: %ld\n",
PTR_ERR(mqs_priv->mclk)); return PTR_ERR(mqs_priv->mclk);
}
MODULE_AUTHOR("Shengjiu Wang <Shengjiu.Wang@nxp.com>");
MODULE_DESCRIPTION("MQS codec driver");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:fsl-mqs");
Messung V0.5 in Prozent
¤ 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.0.219Bemerkung:
(vorverarbeitet am 2026-10-14)
¤
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.