summaryrefslogtreecommitdiffstats
path: root/userspace/sdks/nv570/inc/ctrl/ctrl402c.h
diff options
context:
space:
mode:
Diffstat (limited to 'userspace/sdks/nv570/inc/ctrl/ctrl402c.h')
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl402c.h971
1 files changed, 971 insertions, 0 deletions
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl402c.h b/userspace/sdks/nv570/inc/ctrl/ctrl402c.h
new file mode 100644
index 0000000..3d2bb0e
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl402c.h
@@ -0,0 +1,971 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2010-2020 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl402c.finn
+//
+
+#include "ctrl/ctrlxxxx.h"
+/* NV40_I2C control commands and parameters */
+#define NV402C_CTRL_CMD(cat,idx) \
+ NVXXXX_CTRL_CMD(0x402C, NV402C_CTRL_##cat, idx)
+
+/* I2C command categories (6 bits) */
+#define NV402C_CTRL_RESERVED (0x00)
+#define NV402C_CTRL_I2C (0x01)
+
+
+/* This field specifies the maximum regular port identifier allowed. */
+#define NV402C_CTRL_NUM_I2C_PORTS 16
+/* This temporary field specifies the dynamic port identifier. */
+#define NV402C_CTRL_DYNAMIC_PORT NV_U8_MAX
+
+/*
+ * NV402C_CTRL_CMD_NULL
+ *
+ * This command does nothing.
+ * This command does not take any parameters.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV402C_CTRL_CMD_NULL (0x402c0000) /* finn: Evaluated from "(FINN_NV40_I2C_RESERVED_INTERFACE_ID << 8) | 0x0" */
+
+
+
+/*
+ * NV402C_CTRL_I2C_GET_PORT_INFO_IMPLEMENTED
+ * The port exists on this hardware.
+ * NV402C_CTRL_I2C_GET_PORT_INFO_DCB_DECLARED
+ * The port has an entry in the DCB.
+ * NV402C_CTRL_I2C_GET_PORT_INFO_DDC_CHANNEL
+ * The port is used to read EDIDs via DDC.
+ * NV402C_CTRL_I2C_GET_PORT_INFO_CRTC_MAPPED
+ * The port is accessible via the CRTC register space.
+ * NV402C_CTRL_I2C_GET_PORT_INFO_VALID
+ * The port is validated using I2C device.
+ */
+#define NV402C_CTRL_I2C_GET_PORT_INFO_IMPLEMENTED 0:0
+#define NV402C_CTRL_I2C_GET_PORT_INFO_IMPLEMENTED_NO 0x00
+#define NV402C_CTRL_I2C_GET_PORT_INFO_IMPLEMENTED_YES 0x01
+#define NV402C_CTRL_I2C_GET_PORT_INFO_DCB_DECLARED 1:1
+#define NV402C_CTRL_I2C_GET_PORT_INFO_DCB_DECLARED_NO 0x00
+#define NV402C_CTRL_I2C_GET_PORT_INFO_DCB_DECLARED_YES 0x01
+#define NV402C_CTRL_I2C_GET_PORT_INFO_DDC_CHANNEL 2:2
+#define NV402C_CTRL_I2C_GET_PORT_INFO_DDC_CHANNEL_ABSENT 0x00
+#define NV402C_CTRL_I2C_GET_PORT_INFO_DDC_CHANNEL_PRESENT 0x01
+#define NV402C_CTRL_I2C_GET_PORT_INFO_CRTC_MAPPED 3:3
+#define NV402C_CTRL_I2C_GET_PORT_INFO_CRTC_MAPPED_NO 0x00
+#define NV402C_CTRL_I2C_GET_PORT_INFO_CRTC_MAPPED_YES 0x01
+#define NV402C_CTRL_I2C_GET_PORT_INFO_VALID 4:4
+#define NV402C_CTRL_I2C_GET_PORT_INFO_VALID_NO 0x00
+#define NV402C_CTRL_I2C_GET_PORT_INFO_VALID_YES 0x01
+#define NV402C_CTRL_I2C_GET_PORT_INFO_ALL 4:0
+#define NV402C_CTRL_I2C_GET_PORT_INFO_ALL_DEFAULT 0x00
+
+/*
+ * NV402C_CTRL_CMD_I2C_GET_PORT_INFO
+ *
+ * Returns information for the first eight I2C ports.
+ *
+ * info
+ * This parameter is an output from the command and is ignored as an
+ * input. Each element contains the flags described previously named
+ * NV402C_CTRL_I2C_GET_PORT_INFO*. Note that the index into the info
+ * array is one less than the port identifier that would be returned from
+ * NV0073_CTRL_CMD_SPECIFIC_GET_I2C_PORTID; the port numbers here are
+ * 0-indexed as opposed to 1-indexed.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+
+#define NV402C_CTRL_CMD_I2C_GET_PORT_INFO (0x402c0101) /* finn: Evaluated from "(FINN_NV40_I2C_I2C_INTERFACE_ID << 8) | NV402C_CTRL_I2C_GET_PORT_INFO_PARAMS_MESSAGE_ID" */
+
+
+
+#define NV402C_CTRL_I2C_GET_PORT_INFO_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV402C_CTRL_I2C_GET_PORT_INFO_PARAMS {
+ NvU8 info[NV402C_CTRL_NUM_I2C_PORTS];
+} NV402C_CTRL_I2C_GET_PORT_INFO_PARAMS;
+#define NV402C_CTRL_I2C_INDEX_LENGTH_MAX 4
+#define NV402C_CTRL_I2C_MESSAGE_LENGTH_MAX 4096
+
+//! Minimum and maximum valid read/write message length for block process protocol.
+#define NV402C_CTRL_I2C_BLOCK_PROCESS_PROTOCOL_MIN 3
+#define NV402C_CTRL_I2C_BLOCK_PROCESS_PROTOCOL_MAX 32
+
+/*
+ * NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE
+ * A client uses this field to indicate the I2C addressing mode to be
+ * used.
+ * Possible values are:
+ * NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE_7BIT
+ * The default, this value specifies the master to operate in the
+ * basic 7-bit addressing mode, which is available on all
+ * implementations.
+ * NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE_10BIT
+ * This I2C mode allows for 10 bits of addressing space and is
+ * reverse compatible with 7-bit addressing.
+ */
+#define NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE 0:0
+#define NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE_7BIT (0x00000000)
+#define NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE_10BIT (0x00000001)
+#define NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE_DEFAULT NV402C_CTRL_I2C_FLAGS_ADDRESS_MODE_7BIT
+/*
+ * NV402C_CTRL_I2C_FLAGS_SPEED_MODE
+ * A client uses this field to indicate the target speed at which the
+ * I2C master should attempt to drive the bus. The master may throttle
+ * its own speed for various reasons, and devices may slow the bus
+ * using clock-streching. Neither of these possibilities are
+ * considered failures.
+ */
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE 4:1
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_100KHZ (0x00000000)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_200KHZ (0x00000001)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_400KHZ (0x00000002)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_33KHZ (0x00000003)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_10KHZ (0x00000004)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_3KHZ (0x00000005)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_DEFAULT (0x00000006)
+#define NV402C_CTRL_I2C_FLAGS_SPEED_MODE_300KHZ (0x00000007)
+
+
+/*
+ * NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE
+ * A client uses this field to specify a transaction mode.
+ * Possible values are:
+ * NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE_NORMAL
+ * The default, this value indicates to use the normal I2C transaction
+ * mode which will involve read/write operations depending on client's
+ * needs.
+ * NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE_PING
+ * This value specifies that the device only needs to be pinged. No need
+ * of performing a complete read/write transaction. This will send a
+ * single byte to the device to be pinged. On receiving an ACK, we will
+ * get a confirmation on the device's availability.
+ */
+#define NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE 11:10
+#define NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE_NORMAL (0x00000000)
+#define NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE_PING (0x00000001)
+#define NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE_DEFAULT NV402C_CTRL_I2C_FLAGS_TRANSACTION_MODE_NORMAL
+/*!
+ * NV402C_CTRL_I2C_FLAGS_RESERVED
+ * A client must leave this field as 0, as it is reserved for future use.
+ */
+#define NV402C_CTRL_I2C_FLAGS_RESERVED 31:12
+
+/*!
+ * The following defines specify WAR flags that can be specified during
+ * I2C Quick Read or Write command (Refer NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_QUICK_RW).
+ *
+ * _NONE
+ * No workaround is needed.
+ *
+ * _TEST_PORT
+ * Use this flag to have the client sent a request to test a port instead
+ * of performing any transaction on it. Transaction type has to be
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_QUICK_RW.
+ */
+#define NV402C_CTRL_I2C_SMBUS_QUICK_RW_WAR_FLAGS 0:0
+#define NV402C_CTRL_I2C_SMBUS_QUICK_RW_WAR_FLAGS_NONE 0x00000000
+#define NV402C_CTRL_I2C_SMBUS_QUICK_RW_WAR_FLAGS_TEST_PORT 0x00000001
+
+/*!
+ * The following defines specify WAR flags that can be specified during
+ * I2C Register Read or Write buffer command
+ * (Refer NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BUFFER_RW)
+ *
+ * _NONE
+ * No workaround is needed.
+ *
+ * _SI1930
+ * SI1930 microcontroller register read or write requested by a client.
+ * Transaction type has to be NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BUFFER_RW.
+ *
+ * _PX3540
+ * Register read from PX3540 or PX3544 device. Transaction type has to be
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BUFFER_RW and bWrite must be TRUE to
+ * indicate READ operation
+ */
+#define NV402C_CTRL_I2C_BUFFER_RW_WAR_FLAGS 1:0
+#define NV402C_CTRL_I2C_BUFFER_RW_WAR_FLAGS_NONE 0x00000000
+#define NV402C_CTRL_I2C_BUFFER_RW_WAR_FLAGS_SI1930 0x00000001
+#define NV402C_CTRL_I2C_BUFFER_RW_WAR_FLAGS_PX3540 0x00000002
+
+/*!
+ * The following defines specify WAR flags that can be specified during
+ * I2C buffer Read or Write to Multibyte Register
+ * (Refer NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW)
+ *
+ * _NONE
+ * No workaround is needed.
+ *
+ * _NO_AUTO_INC
+ * This value specifies that the device does not support auto-increment.
+ * Most devices allow you to write multiple bytes after specifying a
+ * register address, and the subsequent bytes will go to incremented
+ * addresses. Without auto-increment, we write a buffer of data as a
+ * sequence of address-register-value triplets separated by starts.
+ */
+#define NV402C_CTRL_I2C_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW_WAR_FLAGS 0:0
+#define NV402C_CTRL_I2C_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW_WAR_FLAGS_NONE 0x00000000
+#define NV402C_CTRL_I2C_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW_WAR_FLAGS_NO_AUTO_INC 0x00000001
+
+/*
+ * NV402C_CTRL_CMD_I2C_SYNC
+ *
+ * Perform a basic I2C transaction synchronously.
+ *
+ * portId
+ * This field must be specified by the client to indicate the logical
+ * port/bus for which the transaction is requested. The port identifier
+ * is one less than the value returned by
+ * NV0073_CTRL_CMD_SPECIFIC_GET_I2C_PORTID unless that value was 0 (the
+ * 'dynamic' port). For the 'dynamic' port, this should be 0xFF. Note
+ * that future versions of the API may obsolete use of the 'dynamic' port;
+ * please contact the RM if you begin using this portion of the API so we
+ * can help you migrate when the time comes.
+ *
+ * bIsWrite
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ *
+ * flags
+ * This parameter specifies optional flags used to control certain modal
+ * features such as target speed and addressing mode. The currently
+ * defined fields are described previously; see NV402C_I2C_FLAGS_*.
+ *
+ * address
+ * The address of the I2C slave. The address should be shifted left by
+ * one. For example, the I2C address 0x50, often used for reading EDIDs,
+ * would be stored here as 0xA0. This matches the position within the
+ * byte sent by the master, as the last bit is reserved to specify the
+ * read or write direction.
+ *
+ * indexLength
+ * This required parameter specifies how many bytes to write as part of the
+ * first index. If zero is specified, then no index will be sent.
+ *
+ * index
+ * This parameter, required of the client if index is one or more,
+ * specifies the index to be written. The buffer should be arranged such
+ * that index[0] will be the first byte sent.
+ *
+ * messageLength
+ * This parameter, required of the client, specifies the number of bytes to
+ * read or write from the slave after the index is written.
+ *
+ * pMessage
+ * This parameter, required of the client, specifies the data to be written
+ * to the slave. The buffer should be arranged such that pMessage[0] will
+ * be the first byte read or written. If the transaction is a read, then
+ * it will follow the combined format described in the I2C specification.
+ * If the transaction is a write, the message will immediately follow the
+ * index without a restart.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_STATE_IN_USE
+ * NV_ERR_GENERIC, if the I2C transaction fails.
+ */
+#define NV402C_CTRL_I2C_INDEXED_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV402C_CTRL_I2C_INDEXED_PARAMS {
+ NvU8 portId;
+ NvU8 bIsWrite;
+ NvU16 address;
+ NvU32 flags;
+
+ NvU32 indexLength;
+ NvU8 index[NV402C_CTRL_I2C_INDEX_LENGTH_MAX];
+
+ NvU32 messageLength;
+ NV_DECLARE_ALIGNED(NvP64 pMessage, 8);
+} NV402C_CTRL_I2C_INDEXED_PARAMS;
+
+#define NV402C_CTRL_CMD_I2C_INDEXED (0x402c0102) /* finn: Evaluated from "(FINN_NV40_I2C_I2C_INTERFACE_ID << 8) | NV402C_CTRL_I2C_INDEXED_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV402C_CTRL_CMD_I2C_GET_PORT_SPEED
+ *
+ * Returns information for the I2C ports.
+ *
+ * portSpeed
+ * This parameter is an output from the command and is ignored as an
+ * input. Each element contains the current I2C speed of the port.
+ * Note that the index into the info array is one less than the
+ * port identifier that would be returned from
+ * NV0073_CTRL_CMD_SPECIFIC_GET_I2C_PORTID; the port numbers here are
+ * 0-indexed as opposed to 1-indexed.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV402C_CTRL_I2C_GET_PORT_SPEED_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV402C_CTRL_I2C_GET_PORT_SPEED_PARAMS {
+ NvU32 portSpeed[NV402C_CTRL_NUM_I2C_PORTS];
+} NV402C_CTRL_I2C_GET_PORT_SPEED_PARAMS;
+
+#define NV402C_CTRL_CMD_I2C_GET_PORT_SPEED (0x402c0103) /* finn: Evaluated from "(FINN_NV40_I2C_I2C_INTERFACE_ID << 8) | NV402C_CTRL_I2C_GET_PORT_SPEED_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV402C_CTRL_I2C_DEVICE_INFO
+ *
+ * This structure describes the basic I2C Device information.
+ *
+ * type
+ * This field return the type of device NV_DCB4X_I2C_DEVICE_TYPE_<xyz>
+ * i2cAddress
+ * This field contains the 7 bit/10 bit address of the I2C device.
+ * i2cLogicalPort
+ * This field contains the Logical port of the I2C device.
+ */
+typedef struct NV402C_CTRL_I2C_DEVICE_INFO {
+ NvU8 type;
+ NvU16 i2cAddress;
+ NvU8 i2cLogicalPort;
+ NvU8 i2cDevIdx;
+} NV402C_CTRL_I2C_DEVICE_INFO;
+
+/* Maximum number of I2C devices in DCB */
+#define NV402C_CTRL_I2C_MAX_DEVICES 32
+
+/*
+ * NV402C_CTRL_CMD_I2C_TABLE_GET_DEV_INFO
+ *
+ * RM Control to get I2C device info from the DCB I2C Devices Table.
+ *
+ * i2cDevCount
+ * The value of this parameter will give the number of
+ * I2C devices found in DCB.
+ *
+ * i2cDevInfo
+ * For each device found in DCB the control call will write the info
+ * in this parameter.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_STATE
+ */
+#define NV402C_CTRL_I2C_TABLE_GET_DEV_INFO_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV402C_CTRL_I2C_TABLE_GET_DEV_INFO_PARAMS {
+ NvU8 i2cDevCount;
+ NV402C_CTRL_I2C_DEVICE_INFO i2cDevInfo[NV402C_CTRL_I2C_MAX_DEVICES];
+} NV402C_CTRL_I2C_TABLE_GET_DEV_INFO_PARAMS;
+
+#define NV402C_CTRL_CMD_I2C_TABLE_GET_DEV_INFO (0x402c0104) /* finn: Evaluated from "(FINN_NV40_I2C_I2C_INTERFACE_ID << 8) | NV402C_CTRL_I2C_TABLE_GET_DEV_INFO_PARAMS_MESSAGE_ID" */
+
+/*!
+ * The IDs of each type of I2C command available.
+ */
+typedef enum NV402C_CTRL_I2C_TRANSACTION_TYPE {
+ /*!
+ * This transaction type is used to perform the Quick SMBus Read/write command
+ * on a slave device. No data is sent or received, just used to verify the
+ * presence of the device.
+ * Refer SMBus spec 2.0 (section 5.5.1 Quick Command)
+ * SMBus Quick Write : S Addr|Wr [A] P
+ * SMBus Quick Read : S Addr|Rd [A] P
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_QUICK_RW = 0,
+ /*!
+ * This transaction type is used to perform the I2C byte read/write from/to
+ * a slave device. As per the spec last byte should be NA (Not Acknolwedged)
+ * by slave.
+ * Refer I2CBus spec 3.0 (section 9 Fig 11 and Fig 12) or Refer SMBus spec
+ * 2.0 (section 5.5.2 Send Byte and 5.5.3 Receive Byte).
+ * I2C Byte Write : S Addr|Wr [A] Data [NA] P
+ * I2C Byte Read : S Addr|Rd [A] Data NA P
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BYTE_RW = 1,
+ /*!
+ * This transaction type is used to perform the I2C block (buffer)
+ * read/write from/to a slave device. As per the spec last byte should be NA
+ * (Not Acknolwedged) by slave.
+ * Refer I2CBus spec 3.0 (section 9 Fig 11 and Fig 12)
+ * I2C Byte Write : S Addr|Wr [A] Data1 [A]...Data(N-1) [A] DataN [NA] P
+ * I2C Byte Read : S Addr|Rd [A] Data1 A...Data(N-1) A DataN NA P
+ *
+ * Distinction between I2C_BLOCK and SMBUS_BLOCK protocol:
+ * In I2C Block write it is the slave device (and in I2C Block read it's
+ * the master device) that determines the number of bytes to transfer by
+ * asserting the NAK at last bit before stop. This differs from the SMBus
+ * block mode write command in which the master determines the block
+ * write transfer size. In I2c Block read there is no limit to maximum size
+ * of data that could be transferred whereas in SMBus block it is restricted
+ * to 255 bytes (0xFF).
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BLOCK_RW = 2,
+ /*!
+ * This transaction type is used to perform the I2C Buffer read/write
+ * from/to a register of a slave device. It does not send bytecount as
+ * part of data buffer.
+ * Not a part of SMBus spec.
+ * I2C Buffer Write : S Addr|Wr [A] cmd [A] Data1 [A]...DataN[A] P
+ * I2C Buffer Read : S Addr|Wr [A] cmd [A] Sr Addr|Rd [A] Data1 A...
+ * DataN-1 A DataN A P
+ *
+ * Distinction between SMBUS_BLOCK and I2C_BUFFER protocol:
+ * In SMBUS_BLOCK Read/write the first byte of data buffer contains the
+ * count size (The number of bytes to be transferred) and it is restricted
+ * to 255 bytes whereas in I2C_BUFFER, count size is not sent during the
+ * transfer and there is no restriction in terms of size.
+ *
+ * Distinction between I2C_BLOCK and I2C_BUFFER protocol:
+ * I2C_BUFFER takes the register address as argument whereas I2C_BLOCK does
+ * not have any register or command provision.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BUFFER_RW = 3,
+ /*!
+ * This transaction type is used to perform the I2C byte read/write from/to
+ * a slave device
+ * Refer SMBus spec 2.0 (section 5.5.4 Write Byte and 5.5.5 Read Byte)
+ * SMBus Byte Write : S Addr|Wr [A] cmd [A] Data [A] P
+ * SMBus Byte Read : S Addr|Wr [A] cmd [A] Sr Addr|Rd [A] Data A P
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BYTE_RW = 4,
+ /*!
+ * This transaction type is used to perform the SMBus byte read/write
+ * from/to a register of a slave device
+ * Refer SMBus spec 2.0 (section 5.5.4 Write Word and 5.5.5 Read Word)
+ * SMBus Word Write : S Addr|Wr [A] cmd [A] DataLow [A] DataHigh [A] P
+ * SMBus Word Read : S Addr|Wr [A] cmd [A] Sr Addr|Rd [A] DataLow A
+ * DataHigh A P
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_WORD_RW = 5,
+ /*!
+ * This transaction type is used to perform the SMBus Block read/write
+ * from/to a register of a slave device
+ * Refer SMBus spec 2.0 (section 5.5.7 Block Write/Read)
+ * SMBus Block Write : S Addr|Wr [A] cmd [A] ByteCount [A] Data1 [A]...
+ * DataN-1 [A] DataN[A] P
+ * SMBus Block Read : S Addr|Wr [A] cmd [A] Sr Addr|Rd [A] ByteCount A
+ * Data1 A...DataN-1 A DataN A P
+ *
+ * Distinction between I2C_BLOCK and SMBUS_BLOCK protocol:
+ * In I2C Block write it is the slave device (and in I2C Block read it's
+ * the master device) that determines the number of bytes to transfer by
+ * asserting the NAK at last bit before stop. This differs from the SMBus
+ * block mode write/Read command in which the master determines the block
+ * write transfer size. In I2c Block read/Write there is no limit to maximum
+ * size of data that could be transferred whereas in SMBus block it is
+ * restricted to 255 bytes (0xFF).
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BLOCK_RW = 6,
+ /*!
+ * This transaction type is used to perform the SMBus process call. It sends
+ * data and waits for the slave to return a value dependent on that data.
+ * The protocol is simply a SMBus write Word followed by a SMBus Read Word
+ * without the Read-Word command field and the Write-Word STOP bit.
+ * Note that there is no STOP condition before the repeated START condition,
+ * and that a NACK signifies the end of the read transfer.
+ *
+ * Refer SMBus spec 2.0 (section 5.5.6 Process Call)
+ * SMBus Process Call : S Addr|Wr [A] cmd [A] DataLow [A] DataHigh [A]
+ * Sr Addr|Rd [A] DataLow [A] DataHigh [NA] P
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_PROCESS_CALL = 7,
+ /*!
+ * This transaction type is used to perform the SMBus Block Write Block Read
+ * process call.
+ * The block write-block read process call is a two-part message. The call
+ * begins with a slave address and a write condition. After the command code
+ * the host issues a write byte count (M) that describes how many more bytes
+ * will be written in the first part of the message.
+ * If a master has 6 bytes to send, the byte count field will have the value
+ * 6 (0000 0110b), followed by the 6 bytes of data. The write byte count (M)
+ * cannot be zero.
+ * The second part of the message is a block of read data beginning with a
+ * repeated start condition followed by the slave address and a Read bit.
+ * The next byte is the read byte count (N), which may differ from the write
+ * byte count (M). The read byte count (N) cannot be zero. The combined data
+ * payload must not exceed 32 bytes.
+ * The byte length restrictions of this process call are summarized as
+ * follows:
+ * M >= 1 byte
+ * N >= 1 byte
+ * M + N <= 32 bytes
+ * Note that there is no STOP condition before the repeated START condition,
+ * and that a NACK signifies the end of the read transfer.
+ *
+ * Refer SMBus spec 2.0 (section 5.5.8 Block Write Block Read Process Call)
+ * SMBus Process Call : S Addr|Wr [A] cmd [A] ByteCount=M [A] Data1 [A]...
+ * DataN-1 [A] DataM[A] Sr Addr|Rd [A] ByteCount=N [A]
+ * Data1 [A]...DataN [NA] P
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BLOCK_PROCESS_CALL = 8,
+ /*!
+ * This transaction type is used to perform SMBus buffer read/write
+ * from/to multiple registers of a slave device known as Auto Increment.
+ * It is not a part of any standard I2C/SMBus spec but a feature of many
+ * SMBus devices like EEPROM.
+ * It is also used for reading a block of bytes from a designated register
+ * that is specified through the two Comm bytes.of a slave device or writing
+ * a block of bytes from a designated register of a slave device (Note : The
+ * command byte in this case could be 0, 2 or 4 Bytes)
+ * SMBus Multi-Byte Register Block Write : S Addr|Wr [A] cmd1 A cmd 2 [A]...
+ * cmdN [A] data1 [A] Data2 [A].....DataN [A] P
+ * SMBus Multi-Byte Register Block Read : S Addr|Rd [A] cmd1 A cmd 2 [A]...
+ * cmdN [A] data1 [A] Sr Addr [A] Data1 A Data2 A...DataN A P
+ *
+ * This transaction type could be also used for those devices which supports
+ * AUTO_INC. Even though it is frequently related to I2C/SMBus, automatic
+ * incrementation is not part of any I2C standard but rather a common
+ * feature found in many I2C devices. What it means is that the device
+ * maintains in internal pointer which is automatically incremented upon
+ * data read or write activities and which can be manually set to a fixed
+ * value. This comes in handy when storing larger amounts of data for
+ * instance in an ordinary I2C RAM or EEPROM.
+ * SMBus AUTO_INC Write : S Addr|Wr [A] cmd1 A Data1 [A] Data2 [A]...
+ * DataN [A] P
+ * SMBus AUTO_INC Read : S Addr|Rd [A] cmd1 A data1 [A] Sr Addr [A] Data1 A
+ * Data2 A...DataN A P
+ * If the device does not support AUTO_INC set warFlags of
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW to
+ * NV402C_CTRL_I2C_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW_WAR_FLAGS_NO_AUTO_INC.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW = 9,
+ /*!
+ * This transaction type is used to perform the EDID read via DDC.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE_READ_EDID_DDC = 10,
+} NV402C_CTRL_I2C_TRANSACTION_TYPE;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_QUICK_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_QUICK_RW.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_QUICK_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * Transaction specific flags
+ * (see NV402C_CTRL_I2C_SMBUS_QUICK_RW_WAR_FLAGS_*).
+ */
+ NvU32 warFlags;
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_QUICK_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BYTE_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BYTE_RW.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BYTE_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * The main message data.
+ */
+ NvU8 message;
+} NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BYTE_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BLOCK_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the transaction type is NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BLOCK_RW.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BLOCK_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * This parameter specifies the number of bytes to read or
+ * write from the slave after the register address is written.
+ */
+ NvU32 messageLength;
+ /*!
+ * The main message data.
+ */
+ NV_DECLARE_ALIGNED(NvP64 pMessage, 8);
+} NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BLOCK_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BYTE_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BYTE_RW.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BYTE_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * The address of the register.
+ */
+ NvU8 registerAddress;
+ /*!
+ * The main message data.
+ */
+ NvU8 message;
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BYTE_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_WORD_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_WORD_RW.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_WORD_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * The address of the register.
+ */
+ NvU8 registerAddress;
+ /*!
+ * The main message data.
+ */
+ NvU16 message;
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_WORD_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BUFFER_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BUFFER_RW.
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BUFFER_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * Transaction specific flags to be set (see
+ * NV_NV402C_CTRL_I2C_BUFFER_RW_WAR_FLAGS_*)
+ */
+ NvU32 warFlags;
+ /*!
+ * This parameter specifies how many bytes to write as part of the
+ * register address. If zero is specified, then no index will be sent.
+ */
+ NvU8 registerAddress;
+ /*!
+ * This parameter specifies the number of bytes to read or
+ * write from the slave after the register address is written.
+ */
+ NvU32 messageLength;
+ /*!
+ * The main message data.
+ * C form: NvU8 message[NV402C_CTRL_I2C_MESSAGE_LENGTH_MAX]
+ */
+ NV_DECLARE_ALIGNED(NvP64 pMessage, 8);
+} NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BUFFER_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BLOCK_RW.
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * This parameter specifies how many bytes to write as part of the
+ * register address. If zero is specified, then no index will be sent.
+ */
+ NvU8 registerAddress;
+ /*!
+ * This parameter specifies the number of bytes to read or
+ * write from the slave after the register address is written.
+ */
+ NvU32 messageLength;
+ /*!
+ * The main message data.
+ * C form: NvU8 message[NV402C_CTRL_I2C_MESSAGE_LENGTH_MAX]
+ */
+ NV_DECLARE_ALIGNED(NvP64 pMessage, 8);
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_PROCESS_CALL
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_PROCESS_CALL.
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_PROCESS_CALL {
+ /*!
+ * This parameter specifies how many bytes to write as part of the
+ * register address. If zero is specified, then no index will be sent.
+ */
+ NvU8 registerAddress;
+ /*!
+ * The message data to be written to the slave.
+ */
+ NvU16 writeMessage;
+ /*!
+ * The message data to be read from the slave.
+ */
+ NvU16 readMessage;
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_PROCESS_CALL;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_PROCESS_CALL
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BLOCK_PROCESS_CALL.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_PROCESS_CALL {
+ /*!
+ * This parameter specifies how many bytes to write as part of the
+ * register address. If zero is specified, then no index will be sent.
+ */
+ NvU8 registerAddress;
+ /*!
+ * This parameter specifies the number of bytes to write the the slave
+ * after the writeByteCount is sent to the slave.
+ */
+ NvU32 writeMessageLength;
+ /*!
+ * The message buffer to be written to the slave.
+ * C form: NvU8 writeMessage[NV402C_CTRL_I2C_BLOCK_PROCESS_PROTOCOL_MAX]
+ */
+ NvU8 writeMessage[NV402C_CTRL_I2C_BLOCK_PROCESS_PROTOCOL_MAX];
+ /*!
+ * This parameter specifies the number of bytes to read from the slave
+ * after the readByteCount is sent to the slave.
+ */
+ NvU32 readMessageLength;
+ /*!
+ * The message buffer to be read from the slave.
+ * C form: NvU8 readMessage[NV402C_CTRL_I2C_BLOCK_PROCESS_PROTOCOL_MAX]
+ */
+ NvU8 readMessage[NV402C_CTRL_I2C_BLOCK_PROCESS_PROTOCOL_MAX];
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_PROCESS_CALL;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW.
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW {
+ /*!
+ * This field must be specified by the client to indicate whether the
+ * command is a write (TRUE) or a read (FALSE).
+ */
+ NvBool bWrite;
+ /*!
+ * Transaction specific flags (see
+ * NV402C_CTRL_I2C_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW_WAR_FLAGS_*)
+ */
+ NvU32 warFlags;
+ /*!
+ * This parameter specifies how many bytes to write as part of the
+ * register address. If zero is specified, then no index will be sent.
+ */
+ NvU32 indexLength;
+ /*!
+ * Optional indexing data; aka register address.
+ * C form: NvU8 index[NV402C_CTRL_I2C_INDEX_LENGTH_MAX]
+ */
+ NvU8 index[NV402C_CTRL_I2C_INDEX_LENGTH_MAX];
+ /*!
+ * This parameter specifies the number of bytes to read or
+ * write from the slave after the register address is written.
+ */
+ NvU32 messageLength;
+ /*!
+ * The main message data.
+ * C form: NvU8 message[NV402C_CTRL_I2C_MESSAGE_LENGTH_MAX]
+ */
+ NV_DECLARE_ALIGNED(NvP64 pMessage, 8);
+} NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA_READ_EDID_DDC
+ *
+ * Specifies the structure of data filled by the client for I2C transaction
+ * when the.transaction type is NV402C_CTRL_I2C_TRANSACTION_TYPE_READ_EDID_DDC.
+ *
+ */
+typedef struct NV402C_CTRL_I2C_TRANSACTION_DATA_READ_EDID_DDC {
+ /*!
+ * The segment number of the EDID block which is to be read.
+ */
+ NvU8 segmentNumber;
+ /*!
+ * The address of the register.
+ */
+ NvU8 registerAddress;
+ /*!
+ * This parameter specifies the number of bytes to read or
+ * write from the slave after the register address is written.
+ */
+ NvU32 messageLength;
+ /*!
+ * The main message data.
+ * C form: NvU8 message[NV402C_CTRL_I2C_MESSAGE_LENGTH_MAX]
+ */
+ NV_DECLARE_ALIGNED(NvP64 pMessage, 8);
+} NV402C_CTRL_I2C_TRANSACTION_DATA_READ_EDID_DDC;
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_DATA
+ *
+ * This union encapsulates the transaction data corresponding to the
+ * transaction type enlisted above.
+ */
+typedef union NV402C_CTRL_I2C_TRANSACTION_DATA {
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_QUICK_RW.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_QUICK_RW smbusQuickData;
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BYTE_RW.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BYTE_RW i2cByteData;
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BLOCK_RW.
+ */
+ NV_DECLARE_ALIGNED(NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BLOCK_RW i2cBlockData, 8);
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_I2C_BUFFER_RW.
+ */
+ NV_DECLARE_ALIGNED(NV402C_CTRL_I2C_TRANSACTION_DATA_I2C_BUFFER_RW i2cBufferData, 8);
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BYTE_RW.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BYTE_RW smbusByteData;
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_WORD_RW.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_WORD_RW smbusWordData;
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BLOCK_RW.
+ */
+ NV_DECLARE_ALIGNED(NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_RW smbusBlockData, 8);
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_PROCESS_CALL.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_PROCESS_CALL smbusProcessData;
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_BLOCK_PROCESS_CALL.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_BLOCK_PROCESS_CALL smbusBlockProcessData;
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW.
+ */
+ NV_DECLARE_ALIGNED(NV402C_CTRL_I2C_TRANSACTION_DATA_SMBUS_MULTIBYTE_REGISTER_BLOCK_RW smbusMultibyteRegisterData, 8);
+ /*!
+ * This transaction data is to be filled when transaction type is
+ * NV402C_CTRL_I2C_TRANSACTION_TYPE_READ_EDID_DDC.
+ */
+ NV_DECLARE_ALIGNED(NV402C_CTRL_I2C_TRANSACTION_DATA_READ_EDID_DDC edidData, 8);
+} NV402C_CTRL_I2C_TRANSACTION_DATA;
+
+
+/*!
+ * NV402C_CTRL_I2C_TRANSACTION_PARAMS
+ *
+ * The params data structure for NV402C_CTRL_CMD_I2C_TRANSACTION.
+ */
+#define NV402C_CTRL_I2C_TRANSACTION_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV402C_CTRL_I2C_TRANSACTION_PARAMS {
+ /*!
+ * The logical port ID.
+ */
+ NvU8 portId;
+ /*!
+ * This parameter specifies optional flags used to control certain modal
+ * features such as target speed and addressing mode. The currently
+ * defined fields are described previously; see NV402C_CTRL_I2C_FLAGS_*
+ */
+ NvU32 flags;
+ /*!
+ * The address of the I2C slave.
+ */
+ NvU16 deviceAddress;
+ /*!
+ * The transaction type.
+ */
+ NV402C_CTRL_I2C_TRANSACTION_TYPE transType;
+ /*!
+ * The transaction data corresponding transaction type.
+ */
+ NV_DECLARE_ALIGNED(NV402C_CTRL_I2C_TRANSACTION_DATA transData, 8);
+} NV402C_CTRL_I2C_TRANSACTION_PARAMS;
+
+#define NV402C_CTRL_CMD_I2C_TRANSACTION (0x402c0105) /* finn: Evaluated from "(FINN_NV40_I2C_I2C_INTERFACE_ID << 8) | NV402C_CTRL_I2C_TRANSACTION_PARAMS_MESSAGE_ID" */
+
+
+/* _ctrl402c_h_ */
+