/* clock control */ for (i = 0; i < pm->num_clocks; i++) {
pm->clocks[i] = devm_clk_get(pm->device, pm->clk_names[i]); if (IS_ERR(pm->clocks[i])) { /* additional clocks are optional */ if (i && PTR_ERR(pm->clocks[i]) == -ENOENT) {
pm->clocks[i] = NULL; continue;
}
mfc_err("Failed to get clock: %s\n",
pm->clk_names[i]); return PTR_ERR(pm->clocks[i]);
}
}
if (dev->variant->use_clock_gating)
pm->clock_gate = pm->clocks[0];
int s5p_mfc_power_on(struct s5p_mfc_dev *dev)
{ int i, ret = 0;
ret = pm_runtime_resume_and_get(dev->pm.device); if (ret < 0) return ret;
/* clock control */ for (i = 0; i < dev->pm.num_clocks; i++) {
ret = clk_prepare_enable(dev->pm.clocks[i]); if (ret < 0) {
mfc_err("clock prepare failed for clock: %s\n",
dev->pm.clk_names[i]); goto err;
}
}
/* prepare for software clock gating */
clk_disable(dev->pm.clock_gate);
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.