1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (C) 2025 Altera Corporation <www.altera.com> 4 */ 5 6 #include <linux/i3c/master.h> 7 8 /** 9 * struct dm_i3c_ops - Driver operations for the I3C uclass 10 * 11 * This structure defines the set of operations that a driver must implement 12 * for interacting with an I3C controller in U-Boot. 13 * 14 */ 15 struct dm_i3c_ops { 16 /** 17 * @i3c_xfers: Transfer messages in I3C 18 * 19 * @dev: I3C controller device instance. 20 * @xfers: List of I3C private SDR transfer messages. 21 * @nxfers: The number of messages to transfer. 22 * 23 * Return: 0 on success, negative error code on failure. 24 */ 25 int (*i3c_xfers)(struct i3c_dev_desc *dev, 26 struct i3c_priv_xfer *xfers, 27 u32 nxfers); 28 29 /** 30 * @read: Perform I3C read transaction. 31 * 32 * @dev: Chip to read from 33 * @dev_number: The target device number from the driver model. 34 * @buf: Place to put data 35 * @num_bytes: Number of bytes to read. 36 * 37 * Return: 0 on success, negative error code on failure. 38 */ 39 int (*read)(struct udevice *dev, u32 dev_number, 40 u8 *buf, u32 num_bytes); 41 42 /** 43 * @write: Perform I3C write transaction. 44 * 45 * @dev: Chip to write to 46 * @dev_number: The target device number from the driver model. 47 * @buf: Buffer containing data to write 48 * @num_bytes: Number of bytes to write. 49 * 50 * Return: 0 on success, negative error code on failure. 51 */ 52 int (*write)(struct udevice *dev, u32 dev_number, 53 u8 *buf, u32 num_bytes); 54 }; 55 56 /** 57 * i3c_get_ops - Retrieve the I3C operation functions for a device 58 * @dev: The I3C controller device. 59 * 60 * This macro returns the set of operation functions (`dm_i3c_ops`) implemented 61 * by the driver associated with the specified device. These operations define 62 * how the driver performs I3C communication tasks such as reading, writing, 63 * and message transfers. 64 * 65 * Return: The I3C operation structure for the device. 66 */ 67 #define i3c_get_ops(dev) ((struct dm_i3c_ops *)(dev)->driver->ops) 68 69 /** 70 * dm_i3c_write - Perform I3C write transaction 71 * 72 * @dev: Chip to write to 73 * @dev_number: The target device number from the driver model. 74 * @buf: Buffer containing data to write 75 * @num_bytes: Number of bytes to write. 76 * 77 * Return: 0 on success, negative error code on failure. 78 */ 79 int dm_i3c_write(struct udevice *dev, u32 dev_number, 80 u8 *buf, u32 num_bytes); 81 82 /** 83 * dm_i3c_read - Perform I3C read transaction 84 * 85 * @dev: Chip to read from 86 * @dev_number: The target device number from the driver model. 87 * @buf: Place to put data 88 * @num_bytes: Number of bytes to read. 89 * 90 * Return: 0 on success, negative error code on failure. 91 */ 92 int dm_i3c_read(struct udevice *dev, u32 dev_number, 93 u8 *buf, u32 num_bytes); 94