static int spi_child_post_bind(struct udevice *dev) { struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev); if (!dev_of_valid(dev)) return 0; return spi_slave_ofdata_to_platdata(dev, plat); }
static int i2c_child_post_bind(struct udevice *dev) { #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) struct dm_i2c_chip *plat = dev_get_parent_platdata(dev); if (!dev_of_valid(dev)) return 0; return i2c_chip_ofdata_to_platdata(dev, plat); #else return 0; #endif }
/** * pinconfig_post_bind() - post binding for PINCONFIG uclass * Recursively bind its children as pinconfig devices. * * @dev: pinconfig device * @return: 0 on success, or negative error code on failure */ static int pinconfig_post_bind(struct udevice *dev) { bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC); const char *name; ofnode node; int ret; if (!dev_of_valid(dev)) return 0; dev_for_each_subnode(node, dev) { if (pre_reloc_only && !ofnode_pre_reloc(node)) continue; /* * If this node has "compatible" property, this is not * a pin configuration node, but a normal device. skip. */ ofnode_get_property(node, "compatible", &ret); if (ret >= 0) continue; /* If this node has "gpio-controller" property, skip */ if (ofnode_read_bool(node, "gpio-controller")) continue; if (ret != -FDT_ERR_NOTFOUND) return ret; name = ofnode_get_name(node); if (!name) return -EINVAL; ret = device_bind_driver_to_node(dev, "pinconfig", name, node, NULL); if (ret) return ret; } return 0; }