diff options
author | Harry Wentland <harry.wentland@amd.com> | 2018-04-24 10:49:20 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-05-09 16:15:59 -0400 |
commit | 018d82e5f02ef3583411bcaa4e00c69786f46f19 (patch) | |
tree | d023451e2c3006625f2c79c85ac032e4fd5fd281 | |
parent | 6e65fb862064663ad3a08f964af1e8f3f2abf688 (diff) |
drm/amd/display: Don't return ddc result and read_bytes in same return value
The two ranges overlap.
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h | 5 |
3 files changed, 22 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c index ace9ad578ca0..4304d9e408b8 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | |||
@@ -83,21 +83,22 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, | |||
83 | enum i2c_mot_mode mot = (msg->request & DP_AUX_I2C_MOT) ? | 83 | enum i2c_mot_mode mot = (msg->request & DP_AUX_I2C_MOT) ? |
84 | I2C_MOT_TRUE : I2C_MOT_FALSE; | 84 | I2C_MOT_TRUE : I2C_MOT_FALSE; |
85 | enum ddc_result res; | 85 | enum ddc_result res; |
86 | ssize_t read_bytes; | 86 | uint32_t read_bytes = msg->size; |
87 | 87 | ||
88 | if (WARN_ON(msg->size > 16)) | 88 | if (WARN_ON(msg->size > 16)) |
89 | return -E2BIG; | 89 | return -E2BIG; |
90 | 90 | ||
91 | switch (msg->request & ~DP_AUX_I2C_MOT) { | 91 | switch (msg->request & ~DP_AUX_I2C_MOT) { |
92 | case DP_AUX_NATIVE_READ: | 92 | case DP_AUX_NATIVE_READ: |
93 | read_bytes = dal_ddc_service_read_dpcd_data( | 93 | res = dal_ddc_service_read_dpcd_data( |
94 | TO_DM_AUX(aux)->ddc_service, | 94 | TO_DM_AUX(aux)->ddc_service, |
95 | false, | 95 | false, |
96 | I2C_MOT_UNDEF, | 96 | I2C_MOT_UNDEF, |
97 | msg->address, | 97 | msg->address, |
98 | msg->buffer, | 98 | msg->buffer, |
99 | msg->size); | 99 | msg->size, |
100 | return read_bytes; | 100 | &read_bytes); |
101 | break; | ||
101 | case DP_AUX_NATIVE_WRITE: | 102 | case DP_AUX_NATIVE_WRITE: |
102 | res = dal_ddc_service_write_dpcd_data( | 103 | res = dal_ddc_service_write_dpcd_data( |
103 | TO_DM_AUX(aux)->ddc_service, | 104 | TO_DM_AUX(aux)->ddc_service, |
@@ -108,14 +109,15 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, | |||
108 | msg->size); | 109 | msg->size); |
109 | break; | 110 | break; |
110 | case DP_AUX_I2C_READ: | 111 | case DP_AUX_I2C_READ: |
111 | read_bytes = dal_ddc_service_read_dpcd_data( | 112 | res = dal_ddc_service_read_dpcd_data( |
112 | TO_DM_AUX(aux)->ddc_service, | 113 | TO_DM_AUX(aux)->ddc_service, |
113 | true, | 114 | true, |
114 | mot, | 115 | mot, |
115 | msg->address, | 116 | msg->address, |
116 | msg->buffer, | 117 | msg->buffer, |
117 | msg->size); | 118 | msg->size, |
118 | return read_bytes; | 119 | &read_bytes); |
120 | break; | ||
119 | case DP_AUX_I2C_WRITE: | 121 | case DP_AUX_I2C_WRITE: |
120 | res = dal_ddc_service_write_dpcd_data( | 122 | res = dal_ddc_service_write_dpcd_data( |
121 | TO_DM_AUX(aux)->ddc_service, | 123 | TO_DM_AUX(aux)->ddc_service, |
@@ -137,7 +139,9 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, | |||
137 | r == DDC_RESULT_SUCESSFULL); | 139 | r == DDC_RESULT_SUCESSFULL); |
138 | #endif | 140 | #endif |
139 | 141 | ||
140 | return msg->size; | 142 | if (res != DDC_RESULT_SUCESSFULL) |
143 | return -EIO; | ||
144 | return read_bytes; | ||
141 | } | 145 | } |
142 | 146 | ||
143 | static enum drm_connector_status | 147 | static enum drm_connector_status |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c index 49c2face1e7a..ae48d603ebd6 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c | |||
@@ -629,13 +629,14 @@ bool dal_ddc_service_query_ddc_data( | |||
629 | return ret; | 629 | return ret; |
630 | } | 630 | } |
631 | 631 | ||
632 | ssize_t dal_ddc_service_read_dpcd_data( | 632 | enum ddc_result dal_ddc_service_read_dpcd_data( |
633 | struct ddc_service *ddc, | 633 | struct ddc_service *ddc, |
634 | bool i2c, | 634 | bool i2c, |
635 | enum i2c_mot_mode mot, | 635 | enum i2c_mot_mode mot, |
636 | uint32_t address, | 636 | uint32_t address, |
637 | uint8_t *data, | 637 | uint8_t *data, |
638 | uint32_t len) | 638 | uint32_t len, |
639 | uint32_t *read) | ||
639 | { | 640 | { |
640 | struct aux_payload read_payload = { | 641 | struct aux_payload read_payload = { |
641 | .i2c_over_aux = i2c, | 642 | .i2c_over_aux = i2c, |
@@ -652,6 +653,8 @@ ssize_t dal_ddc_service_read_dpcd_data( | |||
652 | .mot = mot | 653 | .mot = mot |
653 | }; | 654 | }; |
654 | 655 | ||
656 | *read = 0; | ||
657 | |||
655 | if (len > DEFAULT_AUX_MAX_DATA_SIZE) { | 658 | if (len > DEFAULT_AUX_MAX_DATA_SIZE) { |
656 | BREAK_TO_DEBUGGER(); | 659 | BREAK_TO_DEBUGGER(); |
657 | return DDC_RESULT_FAILED_INVALID_OPERATION; | 660 | return DDC_RESULT_FAILED_INVALID_OPERATION; |
@@ -661,7 +664,8 @@ ssize_t dal_ddc_service_read_dpcd_data( | |||
661 | ddc->ctx->i2caux, | 664 | ddc->ctx->i2caux, |
662 | ddc->ddc_pin, | 665 | ddc->ddc_pin, |
663 | &command)) { | 666 | &command)) { |
664 | return (ssize_t)command.payloads->length; | 667 | *read = command.payloads->length; |
668 | return DDC_RESULT_SUCESSFULL; | ||
665 | } | 669 | } |
666 | 670 | ||
667 | return DDC_RESULT_FAILED_OPERATION; | 671 | return DDC_RESULT_FAILED_OPERATION; |
diff --git a/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h b/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h index 090b7a8dd67b..30b3a08b91be 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h +++ b/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h | |||
@@ -102,13 +102,14 @@ bool dal_ddc_service_query_ddc_data( | |||
102 | uint8_t *read_buf, | 102 | uint8_t *read_buf, |
103 | uint32_t read_size); | 103 | uint32_t read_size); |
104 | 104 | ||
105 | ssize_t dal_ddc_service_read_dpcd_data( | 105 | enum ddc_result dal_ddc_service_read_dpcd_data( |
106 | struct ddc_service *ddc, | 106 | struct ddc_service *ddc, |
107 | bool i2c, | 107 | bool i2c, |
108 | enum i2c_mot_mode mot, | 108 | enum i2c_mot_mode mot, |
109 | uint32_t address, | 109 | uint32_t address, |
110 | uint8_t *data, | 110 | uint8_t *data, |
111 | uint32_t len); | 111 | uint32_t len, |
112 | uint32_t *read); | ||
112 | 113 | ||
113 | enum ddc_result dal_ddc_service_write_dpcd_data( | 114 | enum ddc_result dal_ddc_service_write_dpcd_data( |
114 | struct ddc_service *ddc, | 115 | struct ddc_service *ddc, |