diff options
author | Jean-Jacques Hiblot <jjhiblot@ti.com> | 2018-12-07 16:50:39 +0300 |
---|---|---|
committer | Heiko Schocher <hs@denx.de> | 2018-12-10 08:05:32 +0300 |
commit | 3542ff29e4542b8cb0ac3ae861247e9bd487f22f (patch) | |
tree | c367a4fefd555225d5be719f2cd12e564b4592ad /drivers/core/uclass.c | |
parent | f32a8007ef0fcc1a8f27e0cb444f6861163b03f6 (diff) | |
download | u-boot-3542ff29e4542b8cb0ac3ae861247e9bd487f22f.tar.xz |
dm: device: Allow using uclass_find_device_by_seq() without OF_CONTROL
If OF_CONTROL is not enabled and DM_SEQ_ALIAS is enabled, we must
assign an alias (requested sequence number) to devices that belongs to a
class with the DM_UC_FLAG_SEQ_ALIAS flag. Otherwise
uclass_find_device_by_seq() cannot be used to get/probe a device. In
particular i2c_get_chip_for_busnum() cannot be used.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'drivers/core/uclass.c')
-rw-r--r-- | drivers/core/uclass.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index 9766aeabd1..a622f07941 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -269,6 +269,30 @@ int uclass_find_device_by_name(enum uclass_id id, const char *name, return -ENODEV; } +#if !CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_PLATDATA) +int uclass_find_next_free_req_seq(enum uclass_id id) +{ + struct uclass *uc; + struct udevice *dev; + int ret; + int max = -1; + + ret = uclass_get(id, &uc); + if (ret) + return ret; + + list_for_each_entry(dev, &uc->dev_head, uclass_node) { + if ((dev->req_seq != -1) && (dev->req_seq > max)) + max = dev->req_seq; + } + + if (max == -1) + return 0; + + return max + 1; +} +#endif + int uclass_find_device_by_seq(enum uclass_id id, int seq_or_req_seq, bool find_req_seq, struct udevice **devp) { |