diff options
Diffstat (limited to 'drivers/i3c/sandbox_i3c.c')
-rw-r--r-- | drivers/i3c/sandbox_i3c.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/drivers/i3c/sandbox_i3c.c b/drivers/i3c/sandbox_i3c.c new file mode 100644 index 00000000000..e452e982566 --- /dev/null +++ b/drivers/i3c/sandbox_i3c.c @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2025 Altera Corporation <www.altera.com> + */ + +#include <dm.h> +#include <errno.h> +#include <i3c.h> +#include <linux/i3c/master.h> + +struct sandbox_i3c_priv { + struct i3c_priv_xfer i3c_xfers; +}; + +static int sandbox_i3c_priv_read(struct udevice *dev, u32 dev_number, + u8 *buf, u32 buf_size) +{ + struct sandbox_i3c_priv *priv = dev_get_priv(dev); + struct i3c_priv_xfer i3c_xfers; + + i3c_xfers = priv->i3c_xfers; + i3c_xfers.data.in = buf; + i3c_xfers.len = buf_size; + + return 0; +} + +static int sandbox_i3c_priv_write(struct udevice *dev, u32 dev_number, + u8 *buf, u32 buf_size) +{ + struct sandbox_i3c_priv *priv = dev_get_priv(dev); + struct i3c_priv_xfer i3c_xfers; + + i3c_xfers = priv->i3c_xfers; + i3c_xfers.data.out = buf; + i3c_xfers.len = buf_size; + + return 0; +} + +static const struct dm_i3c_ops sandbox_i3c_ops = { + .read = sandbox_i3c_priv_read, + .write = sandbox_i3c_priv_write, +}; + +static const struct udevice_id sandbox_i3c_ids[] = { + { .compatible = "sandbox,i3c" }, + { } +}; + +U_BOOT_DRIVER(i3c_sandbox) = { + .name = "i3c_sandbox", + .id = UCLASS_I3C, + .of_match = sandbox_i3c_ids, + .ops = &sandbox_i3c_ops, +}; |