1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
4 * Pratyush Yadav <p.yadav@ti.com>
9 #include <mux-internal.h>
12 #include <asm/global_data.h>
14 struct mux_emul_priv {
18 static int mux_emul_set(struct mux_control *mux, int state)
20 struct mux_emul_priv *priv = dev_get_priv(mux->dev);
26 static int mux_emul_probe(struct udevice *dev)
28 struct mux_chip *mux_chip = dev_get_uclass_priv(dev);
29 struct mux_control *mux;
33 ret = mux_alloc_controllers(dev, 1);
37 mux = &mux_chip->mux[0];
39 ret = dev_read_u32(dev, "idle-state", &idle_state);
43 mux->idle_state = idle_state;
44 mux->states = 0x100000;
49 static const struct mux_control_ops mux_emul_ops = {
53 static const struct udevice_id mux_emul_of_match[] = {
54 { .compatible = "mux-emul" },
58 U_BOOT_DRIVER(emul_mux) = {
61 .of_match = mux_emul_of_match,
63 .probe = mux_emul_probe,
64 .priv_auto = sizeof(struct mux_emul_priv),
67 static int dm_test_mux_emul_default_state(struct unit_test_state *uts)
70 struct mux_control *mux;
71 struct mux_emul_priv *priv;
73 ut_assertok(uclass_get_device_by_name(UCLASS_TEST_FDT, "a-test",
75 ut_assertok(mux_control_get(dev, "mux4", &mux));
77 priv = dev_get_priv(mux->dev);
79 ut_asserteq(0xabcd, priv->state);
83 DM_TEST(dm_test_mux_emul_default_state, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
85 static int dm_test_mux_emul_select_deselect(struct unit_test_state *uts)
88 struct mux_control *mux;
89 struct mux_emul_priv *priv;
91 gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD);
92 ut_assertok(uclass_get_device_by_name(UCLASS_TEST_FDT, "a-test",
94 ut_assertok(mux_control_get(dev, "mux4", &mux));
96 priv = dev_get_priv(mux->dev);
98 ut_assertok(mux_control_select(mux, 0x1234));
99 ut_asserteq(priv->state, 0x1234);
101 ut_assertok(mux_control_deselect(mux));
102 ut_asserteq(priv->state, 0xabcd);
106 DM_TEST(dm_test_mux_emul_select_deselect, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);