/* * We use the notifier function for switching to a temporary safe configuration * (mux and divider), while the A7 PLL is reconfigured.
*/ staticint a7cc_notifier_cb(struct notifier_block *nb, unsignedlong event, void *data)
{ int ret = 0; struct clk_regmap_mux_div *md = container_of(nb, struct clk_regmap_mux_div,
clk_nb); if (event == PRE_RATE_CHANGE) /* set the mux and divider to safe frequency (400mhz) */
ret = mux_div_set_src_div(md, 1, 2);
a7cc->pclk = devm_clk_get(parent, "pll"); if (IS_ERR(a7cc->pclk)) return dev_err_probe(dev, PTR_ERR(a7cc->pclk), "Failed to get PLL clk\n");
a7cc->clk_nb.notifier_call = a7cc_notifier_cb;
ret = clk_notifier_register(a7cc->pclk, &a7cc->clk_nb); if (ret) return dev_err_probe(dev, ret, "Failed to register clock notifier\n");
ret = devm_clk_register_regmap(dev, &a7cc->clkr); if (ret) {
dev_err_probe(dev, ret, "Failed to register regmap clock\n"); goto err;
}
ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
&a7cc->clkr.hw); if (ret) {
dev_err_probe(dev, ret, "Failed to add clock provider\n"); goto err;
}
platform_set_drvdata(pdev, a7cc);
/* * Attach the power domain to cpudev. Since there is no dedicated driver * for CPUs and the SDX55 platform lacks hardware specific CPUFreq * driver, there seems to be no better place to do this. So do it here!
*/
cpu_dev = get_cpu_device(0);
ret = dev_pm_domain_attach(cpu_dev, PD_FLAG_ATTACH_POWER_ON); if (ret) {
dev_err_probe(dev, ret, "can't get PM domain: %d\n", ret); goto err;
}
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.