dm: Add a No-op uclass
This uclass is intended for devices that do not need any features from the uclass, including binding children. This will typically be used by devices that are used to bind child devices but do not use dm_scan_fdt_dev() to do it. That is for example the case of several USB wrappers that have 2 child devices (1 for device and 1 for host) but bind only one at a any given time. Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e445d46651
commit
07e33711fe
@ -400,6 +400,18 @@
|
||||
sandbox,silent; /* Don't emit sounds while testing */
|
||||
};
|
||||
|
||||
nop-test_0 {
|
||||
compatible = "sandbox,nop_sandbox1";
|
||||
nop-test_1 {
|
||||
compatible = "sandbox,nop_sandbox2";
|
||||
bind = "True";
|
||||
};
|
||||
nop-test_2 {
|
||||
compatible = "sandbox,nop_sandbox2";
|
||||
bind = "False";
|
||||
};
|
||||
};
|
||||
|
||||
misc-test {
|
||||
compatible = "sandbox,misc_sandbox";
|
||||
};
|
||||
|
@ -757,3 +757,8 @@ int uclass_pre_remove_device(struct udevice *dev)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
UCLASS_DRIVER(nop) = {
|
||||
.id = UCLASS_NOP,
|
||||
.name = "nop",
|
||||
};
|
||||
|
@ -62,6 +62,7 @@ enum uclass_id {
|
||||
UCLASS_MMC, /* SD / MMC card or chip */
|
||||
UCLASS_MOD_EXP, /* RSA Mod Exp device */
|
||||
UCLASS_MTD, /* Memory Technology Device (MTD) device */
|
||||
UCLASS_NOP, /* No-op devices */
|
||||
UCLASS_NORTHBRIDGE, /* Intel Northbridge / SDRAM controller */
|
||||
UCLASS_NVME, /* NVM Express device */
|
||||
UCLASS_PANEL, /* Display panel, such as an LCD */
|
||||
|
@ -3,6 +3,7 @@
|
||||
# Copyright (c) 2013 Google, Inc
|
||||
|
||||
obj-$(CONFIG_UT_DM) += bus.o
|
||||
obj-$(CONFIG_UT_DM) += nop.o
|
||||
obj-$(CONFIG_UT_DM) += test-driver.o
|
||||
obj-$(CONFIG_UT_DM) += test-fdt.o
|
||||
obj-$(CONFIG_UT_DM) += test-main.o
|
||||
|
73
test/dm/nop.c
Normal file
73
test/dm/nop.c
Normal file
@ -0,0 +1,73 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Test for the NOP uclass
|
||||
*
|
||||
* (C) Copyright 2019 - Texas Instruments Incorporated - http://www.ti.com/
|
||||
* Jean-Jacques Hiblot <jjhiblot@ti.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <dm/ofnode.h>
|
||||
#include <dm/lists.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/test.h>
|
||||
#include <misc.h>
|
||||
#include <test/ut.h>
|
||||
|
||||
static int noptest_bind(struct udevice *parent)
|
||||
{
|
||||
ofnode ofnode = dev_read_first_subnode(parent);
|
||||
|
||||
while (ofnode_valid(ofnode)) {
|
||||
struct udevice *dev;
|
||||
const char *bind_flag = ofnode_read_string(ofnode, "bind");
|
||||
|
||||
if (bind_flag && (strcmp(bind_flag, "True") == 0))
|
||||
lists_bind_fdt(parent, ofnode, &dev, false);
|
||||
ofnode = dev_read_next_subnode(ofnode);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct udevice_id noptest1_ids[] = {
|
||||
{
|
||||
.compatible = "sandbox,nop_sandbox1",
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(noptest_drv1) = {
|
||||
.name = "noptest1_drv",
|
||||
.of_match = noptest1_ids,
|
||||
.id = UCLASS_NOP,
|
||||
.bind = noptest_bind,
|
||||
};
|
||||
|
||||
static const struct udevice_id noptest2_ids[] = {
|
||||
{
|
||||
.compatible = "sandbox,nop_sandbox2",
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(noptest_drv2) = {
|
||||
.name = "noptest2_drv",
|
||||
.of_match = noptest2_ids,
|
||||
.id = UCLASS_NOP,
|
||||
};
|
||||
|
||||
static int dm_test_nop(struct unit_test_state *uts)
|
||||
{
|
||||
struct udevice *dev;
|
||||
|
||||
ut_assertok(uclass_get_device_by_name(UCLASS_NOP, "nop-test_0", &dev));
|
||||
ut_assertok(uclass_get_device_by_name(UCLASS_NOP, "nop-test_1", &dev));
|
||||
ut_asserteq(-ENODEV,
|
||||
uclass_get_device_by_name(UCLASS_NOP, "nop-test_2", &dev));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DM_TEST(dm_test_nop, DM_TESTF_FLAT_TREE | DM_TESTF_SCAN_FDT);
|
Loading…
Reference in New Issue
Block a user