| .. _OPAL_I2C_REQUEST: |
| |
| OPAL_I2C_REQUEST |
| ================ |
| |
| .. code-block:: c |
| |
| #define OPAL_I2C_REQUEST 109 |
| |
| /* OPAL I2C request */ |
| struct opal_i2c_request { |
| uint8_t type; |
| #define OPAL_I2C_RAW_READ 0 |
| #define OPAL_I2C_RAW_WRITE 1 |
| #define OPAL_I2C_SM_READ 2 |
| #define OPAL_I2C_SM_WRITE 3 |
| uint8_t flags; |
| #define OPAL_I2C_ADDR_10 0x01 /* Not supported yet */ |
| uint8_t subaddr_sz; /* Max 4 */ |
| uint8_t reserved; |
| __be16 addr; /* 7 or 10 bit address */ |
| __be16 reserved2; |
| __be32 subaddr; /* Sub-address if any */ |
| __be32 size; /* Data size */ |
| __be64 buffer_ra; /* Buffer real address */ |
| }; |
| |
| int opal_i2c_request(uint64_t async_token, uint32_t bus_id, |
| struct opal_i2c_request *oreq); |
| |
| Initiate I2C request using i2c master that OPAL controls. |
| |
| Return Codes |
| ------------ |
| |
| Most return codes will come through as part of async completion. |
| |
| :ref:`OPAL_PARAMETER` |
| Invalid request pointer, or bus ID. |
| :ref:`OPAL_UNSUPPORTED` |
| Unsupported operation. e.g. 10 bit addresses not yet supported. |
| :ref:`OPAL_NO_MEM` |
| Not enough free memory in OPAL to initiate request. |
| :ref:`OPAL_ASYNC_COMPLETION` |
| Operation will complete asynchronously. |
| :ref:`OPAL_I2C_TIMEOUT` |
| I2C operation initiated successfully, but timed out. |
| :ref:`OPAL_I2C_INVALID_CMD` |
| Invalid i2c Command. |
| :ref:`OPAL_I2C_LBUS_PARITY` |
| I2C LBUS Parity error |
| :ref:`OPAL_I2C_BKEND_OVERRUN` |
| I2C Backend overrun. |
| :ref:`OPAL_I2C_BKEND_ACCESS` |
| I2C Backend Access error. |
| :ref:`OPAL_I2C_ARBT_LOST` |
| I2C Bus Arbitration lost. |
| :ref:`OPAL_I2C_NACK_RCVD` |
| I2C NACK received. |
| :ref:`OPAL_I2C_STOP_ERR` |
| I2C STOP error. |
| :ref:`OPAL_SUCCESS` |
| I2C operation completed successfully. Typically only as part of |
| async completion. |