On Fri, Jul 12, 2024 at 05:32:34PM GMT, Liu Ying wrote: > i.MX8qxp Display Controller pixel engine consists of all processing > units that operate in the AXI bus clock domain. Add drivers for > ConstFrame, ExtDst, FetchLayer, FetchWarp and LayerBlend units, as > well as a pixel engine driver, so that two displays with primary > planes can be supported. The pixel engine driver as a master binds > those unit drivers as components. While at it, the pixel engine > driver is a component to be bound with the upcoming DRM driver. Same question / comment: create subnodes directly, without going through the subdevices. A lot of small functions that would benefit being inlined. > +static int dc_cf_bind(struct device *dev, struct device *master, void *data) > +{ > + struct platform_device *pdev = to_platform_device(dev); > + struct dc_drm_device *dc_drm = data; > + struct dc_pe *pe = dc_drm->pe; > + struct dc_cf_priv *priv; > + int id; > + > + priv = drmm_kzalloc(&dc_drm->base, sizeof(*priv), GFP_KERNEL); > + if (!priv) > + return -ENOMEM; > + > + priv->reg_cfg = devm_platform_ioremap_resource_byname(pdev, "cfg"); > + if (IS_ERR(priv->reg_cfg)) > + return PTR_ERR(priv->reg_cfg); > + > + id = of_alias_get_id(dev->of_node, "dc0-constframe"); Is it documented? Acked? > + if (id < 0) { > + dev_err(dev, "failed to get alias id: %d\n", id); > + return id; > + } > + -- With best wishes Dmitry