summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/i2c/sandbox_i2c.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/i2c/sandbox_i2c.c b/drivers/i2c/sandbox_i2c.c
index dd1c7e59e4..2c84c41643 100644
--- a/drivers/i2c/sandbox_i2c.c
+++ b/drivers/i2c/sandbox_i2c.c
@@ -26,6 +26,7 @@ static int get_emul(struct udevice *dev, struct udevice **devp,
struct dm_i2c_ops **opsp)
{
struct dm_i2c_chip *plat;
+ struct udevice *child;
int ret;
*devp = NULL;
@@ -37,9 +38,22 @@ static int get_emul(struct udevice *dev, struct udevice **devp,
if (ret)
return ret;
- ret = device_get_child(dev, 0, &plat->emul);
- if (ret)
- return ret;
+ for (device_find_first_child(dev, &child); child;
+ device_find_next_child(&child)) {
+ if (device_get_uclass_id(child) != UCLASS_I2C_EMUL)
+ continue;
+
+ ret = device_probe(child);
+ if (ret)
+ return ret;
+
+ break;
+ }
+
+ if (child)
+ plat->emul = child;
+ else
+ return -ENODEV;
}
*devp = plat->emul;
*opsp = i2c_get_ops(plat->emul);
OpenPOWER on IntegriCloud