struct drm_dp_aux — DisplayPort AUX channel
struct drm_dp_aux { const char * name; struct i2c_adapter ddc; struct device * dev; struct mutex hw_mutex; ssize_t (* transfer) (struct drm_dp_aux *aux,struct drm_dp_aux_msg *msg); };
user-visible name of this AUX channel and the I2C-over-AUX adapter
I2C adapter that can be used for I2C-over-AUX communication
pointer to struct device that is the parent for this AUX channel
internal mutex used for locking transfers
transfers a message representing a single AUX transaction
The .dev field should be set to a pointer to the device that implements the AUX channel.
The .name field may be used to specify the name of the I2C adapter. If set to
NULL, dev_name
of .dev will be used.
Drivers provide a hardware-specific implementation of how transactions
are executed via the .transfer
function. A pointer to a drm_dp_aux_msg
structure describing the transaction is passed into this function. Upon
success, the implementation should return the number of payload bytes
that were transferred, or a negative error-code on failure. Helpers
propagate errors from the .transfer
function, with the exception of
the -EBUSY error, which causes a transaction to be retried. On a short,
helpers will return -EPROTO to make it simpler to check for failure.
An AUX channel can also be used to transport I2C messages to a sink. A
typical application of that is to access an EDID that's present in the
sink device. The .transfer
function can also be used to execute such
transactions. The drm_dp_aux_register_i2c_bus
function registers an
I2C adapter that can be passed to drm_probe_ddc
. Upon removal, drivers
should call drm_dp_aux_unregister_i2c_bus
to remove the I2C adapter.
The I2C adapter uses long transfers by default; if a partial response is
received, the adapter will drop down to the size given by the partial
response for this transaction only.
Note that the aux helper code assumes that the .transfer
function
only modifies the reply field of the drm_dp_aux_msg structure. The
retry logic and i2c helpers assume this is the case.