diff options
| -rw-r--r-- | drivers/gpu/drm/drm_dp_helper.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 214a4c649d56..291734e87fca 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c | |||
| @@ -500,6 +500,15 @@ static int drm_dp_i2c_retry_count(const struct drm_dp_aux_msg *msg, | |||
| 500 | } | 500 | } |
| 501 | 501 | ||
| 502 | /* | 502 | /* |
| 503 | * FIXME currently assumes 10 kHz as some real world devices seem | ||
| 504 | * to require it. We should query/set the speed via DPCD if supported. | ||
| 505 | */ | ||
| 506 | static int dp_aux_i2c_speed_khz __read_mostly = 10; | ||
| 507 | module_param_unsafe(dp_aux_i2c_speed_khz, int, 0644); | ||
| 508 | MODULE_PARM_DESC(dp_aux_i2c_speed_khz, | ||
| 509 | "Assumed speed of the i2c bus in kHz, (1-400, default 10)"); | ||
| 510 | |||
| 511 | /* | ||
| 503 | * Transfer a single I2C-over-AUX message and handle various error conditions, | 512 | * Transfer a single I2C-over-AUX message and handle various error conditions, |
| 504 | * retrying the transaction as appropriate. It is assumed that the | 513 | * retrying the transaction as appropriate. It is assumed that the |
| 505 | * aux->transfer function does not modify anything in the msg other than the | 514 | * aux->transfer function does not modify anything in the msg other than the |
| @@ -517,10 +526,8 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) | |||
| 517 | * before giving up the AUX transaction. | 526 | * before giving up the AUX transaction. |
| 518 | * | 527 | * |
| 519 | * We also try to account for the i2c bus speed. | 528 | * We also try to account for the i2c bus speed. |
| 520 | * FIXME currently assumes 10 kHz as some real world devices seem | ||
| 521 | * to require it. We should query/set the speed via DPCD if supported. | ||
| 522 | */ | 529 | */ |
| 523 | int max_retries = max(7, drm_dp_i2c_retry_count(msg, 10)); | 530 | int max_retries = max(7, drm_dp_i2c_retry_count(msg, dp_aux_i2c_speed_khz)); |
| 524 | 531 | ||
| 525 | for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) { | 532 | for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) { |
| 526 | mutex_lock(&aux->hw_mutex); | 533 | mutex_lock(&aux->hw_mutex); |
