aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h
diff options
context:
space:
mode:
authorLewis Huang <Lewis.Huang@amd.com>2019-08-07 18:05:49 +0800
committerAlex Deucher <alexander.deucher@amd.com>2019-09-13 17:54:46 -0500
commit4fd99f67f3c639b3c70365902fe2224cfb8d681f (patch)
treef34fba88fdc8649f17ecf7045d17376345756fef /drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h
parentdrm/amd/display: Fix DML tests (diff)
downloadlinux-dev-4fd99f67f3c639b3c70365902fe2224cfb8d681f.tar.xz
linux-dev-4fd99f67f3c639b3c70365902fe2224cfb8d681f.zip
drm/amd/display: refine i2c over aux
[Why] When user mode use i2c over aux through ADL or DDI, the function dal_ddc_service_query_ddc_data will be called. There are two issues. 1. When read/write length > 16byte, current always return false because the DEFAULT_AUX_MAX_DATA_SIZE != length. 2. When usermode only need to read data through i2c, driver will write mot = true at the same address and cause i2c sink confused. Therefore the following read command will get garbage. [How] 1. Add function dal_dcc_submit_aux_command to handle length > 16 byte. 2. Check read size and write size when query ddc data. Signed-off-by: Lewis Huang <Lewis.Huang@amd.com> Reviewed-by: Charlene Liu <Charlene.Liu@amd.com> Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h')
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h3
1 files changed, 3 insertions, 0 deletions
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 b1fab251c09b..7d35d03a2d43 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
@@ -95,6 +95,9 @@ bool dal_ddc_service_query_ddc_data(
uint8_t *read_buf,
uint32_t read_size);
+bool dal_ddc_submit_aux_command(struct ddc_service *ddc,
+ struct aux_payload *payload);
+
int dc_link_aux_transfer_raw(struct ddc_service *ddc,
struct aux_payload *payload,
enum aux_channel_operation_result *operation_result);