1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (C) 2025 Altera Corporation <www.altera.com>
4 */
5
6 #include <dm.h>
7 #include <errno.h>
8 #include <i3c.h>
9 #include <linux/i3c/master.h>
10
11 struct sandbox_i3c_priv {
12 struct i3c_priv_xfer i3c_xfers;
13 };
14
sandbox_i3c_priv_read(struct udevice * dev,u32 dev_number,u8 * buf,u32 buf_size)15 static int sandbox_i3c_priv_read(struct udevice *dev, u32 dev_number,
16 u8 *buf, u32 buf_size)
17 {
18 struct sandbox_i3c_priv *priv = dev_get_priv(dev);
19 struct i3c_priv_xfer i3c_xfers;
20
21 i3c_xfers = priv->i3c_xfers;
22 i3c_xfers.data.in = buf;
23 i3c_xfers.len = buf_size;
24
25 return 0;
26 }
27
sandbox_i3c_priv_write(struct udevice * dev,u32 dev_number,u8 * buf,u32 buf_size)28 static int sandbox_i3c_priv_write(struct udevice *dev, u32 dev_number,
29 u8 *buf, u32 buf_size)
30 {
31 struct sandbox_i3c_priv *priv = dev_get_priv(dev);
32 struct i3c_priv_xfer i3c_xfers;
33
34 i3c_xfers = priv->i3c_xfers;
35 i3c_xfers.data.out = buf;
36 i3c_xfers.len = buf_size;
37
38 return 0;
39 }
40
41 static const struct dm_i3c_ops sandbox_i3c_ops = {
42 .read = sandbox_i3c_priv_read,
43 .write = sandbox_i3c_priv_write,
44 };
45
46 static const struct udevice_id sandbox_i3c_ids[] = {
47 { .compatible = "sandbox,i3c" },
48 { }
49 };
50
51 U_BOOT_DRIVER(i3c_sandbox) = {
52 .name = "i3c_sandbox",
53 .id = UCLASS_I3C,
54 .of_match = sandbox_i3c_ids,
55 .ops = &sandbox_i3c_ops,
56 };
57