if (id < MDP_INFRA_MMSYS || id >= MDP_INFRA_MAX) {
dev_err(&pdev->dev, "Illegal infra id %d\n", id); return NULL;
}
mdp_data = of_device_get_match_data(&pdev->dev); if (!mdp_data) {
dev_err(&pdev->dev, "have no driver data to find node\n"); return NULL;
}
compat = mdp_data->mdp_probe_infra[id].compatible; if (strlen(compat) == 0) return NULL;
if (from)
f = from->dev.of_node;
node = of_find_compatible_node(f, NULL, compat); if (WARN_ON(!node)) {
dev_err(&pdev->dev, "find node from id %d failed\n", id); return NULL;
}
mdp_pdev = of_find_device_by_node(node);
of_node_put(node); if (WARN_ON(!mdp_pdev)) {
dev_err(&pdev->dev, "find pdev from id %d failed\n", id); return NULL;
}
return mdp_pdev;
}
int mdp_vpu_get_locked(struct mdp_dev *mdp)
{ int ret = 0;
if (mdp->vpu_count++ == 0) {
ret = rproc_boot(mdp->rproc_handle); if (ret) {
dev_err(&mdp->pdev->dev, "vpu_load_firmware failed %d\n", ret); goto err_load_vpu;
}
ret = mdp_vpu_register(mdp); if (ret) {
dev_err(&mdp->pdev->dev, "mdp_vpu register failed %d\n", ret); goto err_reg_vpu;
}
ret = mdp_vpu_dev_init(&mdp->vpu, mdp->scp, &mdp->vpu_lock); if (ret) {
dev_err(&mdp->pdev->dev, "mdp_vpu device init failed %d\n", ret); goto err_init_vpu;
}
} return 0;
for (i = 0; i < MDP_MM_SUBSYS_MAX; i++) { constchar *compat; enum mdp_infra_id sub_id = id + i;
switch (id) { case MDP_INFRA_MMSYS:
dev = &mdp->mm_subsys[i].mmsys; break; case MDP_INFRA_MUTEX:
dev = &mdp->mm_subsys[i].mutex; break; default:
dev_err(&mdp->pdev->dev, "Unknown infra id %d", id); return -EINVAL;
}
/* * Not every chip has multiple multimedia subsystems, so * the config may be null.
*/
compat = mdp->mdp_data->mdp_probe_infra[sub_id].compatible; if (strlen(compat) == 0) continue;
mm_pdev = __get_pdev_by_id(mdp->pdev, mm_pdev, sub_id); if (WARN_ON(!mm_pdev)) return -ENODEV;
for (i = 0; i < mdp->mdp_data->pp_used; i++) {
mdp->cmdq_clt[i] = cmdq_mbox_create(dev, i); if (IS_ERR(mdp->cmdq_clt[i])) {
ret = PTR_ERR(mdp->cmdq_clt[i]); goto err_mbox_destroy;
}
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.