drm/dp: Add dp_aux_i2c_speed_khz module param to set the assume i2c bus speed
To help with debugging i2c-over-aux issues, add a module parameter than can be used to tweak the assumed i2c bus speed, and thus the maximum number of retries we will do for each aux message. Cc: Simon Farnsworth <simon.farnsworth@onelan.com> Cc: moosotc@gmail.com Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Simon Farnsworth <simon.farnsworth@onelan.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
4efa83c8c7
commit
f36203be60
1 changed files with 10 additions and 3 deletions
|
@ -499,6 +499,15 @@ static int drm_dp_i2c_retry_count(const struct drm_dp_aux_msg *msg,
|
|||
return DIV_ROUND_UP(i2c_time_us, aux_time_us + AUX_RETRY_INTERVAL);
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME currently assumes 10 kHz as some real world devices seem
|
||||
* to require it. We should query/set the speed via DPCD if supported.
|
||||
*/
|
||||
static int dp_aux_i2c_speed_khz __read_mostly = 10;
|
||||
module_param_unsafe(dp_aux_i2c_speed_khz, int, 0644);
|
||||
MODULE_PARM_DESC(dp_aux_i2c_speed_khz,
|
||||
"Assumed speed of the i2c bus in kHz, (1-400, default 10)");
|
||||
|
||||
/*
|
||||
* Transfer a single I2C-over-AUX message and handle various error conditions,
|
||||
* retrying the transaction as appropriate. It is assumed that the
|
||||
|
@ -517,10 +526,8 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
|
|||
* before giving up the AUX transaction.
|
||||
*
|
||||
* We also try to account for the i2c bus speed.
|
||||
* FIXME currently assumes 10 kHz as some real world devices seem
|
||||
* to require it. We should query/set the speed via DPCD if supported.
|
||||
*/
|
||||
int max_retries = max(7, drm_dp_i2c_retry_count(msg, 10));
|
||||
int max_retries = max(7, drm_dp_i2c_retry_count(msg, dp_aux_i2c_speed_khz));
|
||||
|
||||
for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) {
|
||||
mutex_lock(&aux->hw_mutex);
|
||||
|
|
Loading…
Reference in a new issue