Commit c85e6e54 authored by David Francis's avatar David Francis Committed by Alex Deucher
Browse files

drm/amd/display: Create new i2c resource



[Why]
I2C code did not match dc resource model and was generally
unpleasant

[How]
Move code into new svelte dce_i2c files, replacing various i2c
objects with two structs: dce_i2c_sw and dce_i2c_hw.  Fully split
sw and hw code paths.  Remove all redundant declarations.  Use
address lists to distinguish between versions.  Change dce80 code
to newer register access macros.

Signed-off-by: default avatarDavid Francis <David.Francis@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d6257ab5
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -71,8 +71,6 @@

#include "modules/inc/mod_freesync.h"

#include "i2caux_interface.h"

/* basic init/fini API */
static int amdgpu_dm_init(struct amdgpu_device *adev);
static void amdgpu_dm_fini(struct amdgpu_device *adev);
@@ -3610,9 +3608,9 @@ static int amdgpu_dm_i2c_xfer(struct i2c_adapter *i2c_adap,
		cmd.payloads[i].data = msgs[i].buf;
	}

	if (dal_i2caux_submit_i2c_command(
			ddc_service->ctx->i2caux,
			ddc_service->ddc_pin,
	if (dc_submit_i2c(
			ddc_service->ctx->dc,
			ddc_service->ddc_pin->hw_info.ddc_channel,
			&cmd))
		result = num;

@@ -3648,6 +3646,7 @@ create_i2c(struct ddc_service *ddc_service,
	snprintf(i2c->base.name, sizeof(i2c->base.name), "AMDGPU DM i2c hw bus %d", link_index);
	i2c_set_adapdata(&i2c->base, i2c);
	i2c->ddc_service = ddc_service;
	i2c->ddc_service->ddc_pin->hw_info.ddc_channel = link_index;

	return i2c;
}
+4 −6
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@
#include "bios_parser_interface.h"

#include "bios_parser_common.h"
/* TODO remove - only needed for default i2c speed */

#include "dc.h"

#define THREE_PERCENT_OF_10000 300
@@ -2671,11 +2671,9 @@ static bool i2c_read(

		cmd.payloads = payloads;
		cmd.number_of_payloads = ARRAY_SIZE(payloads);

		/* TODO route this through drm i2c_adapter */
		result = dal_i2caux_submit_i2c_command(
				ddc->ctx->i2caux,
				ddc,
		result = dc_submit_i2c(
				ddc->ctx->dc,
				ddc->hw_info.ddc_channel,
				&cmd);
	}

+5 −3
Original line number Diff line number Diff line
@@ -54,6 +54,9 @@
#include "hubp.h"

#include "dc_link_dp.h"

#include "dce/dce_i2c.h"

#define DC_LOGGER \
	dc->ctx->logger

@@ -1673,9 +1676,8 @@ bool dc_submit_i2c(

	struct dc_link *link = dc->links[link_index];
	struct ddc_service *ddc = link->ddc;

	return dal_i2caux_submit_i2c_command(
		ddc->ctx->i2caux,
	return dce_i2c_submit_command(
		dc->res_pool,
		ddc->ddc_pin,
		cmd);
}
+2 −2
Original line number Diff line number Diff line
@@ -1530,8 +1530,8 @@ static bool i2c_write(struct pipe_ctx *pipe_ctx,
	payload.write = true;
	cmd.payloads = &payload;

	if (dc_submit_i2c(pipe_ctx->stream->ctx->dc,
			pipe_ctx->stream->sink->link->link_index, &cmd))
	if (dm_helpers_submit_i2c(pipe_ctx->stream->ctx,
			pipe_ctx->stream->sink->link, &cmd))
		return true;

	return false;
+2 −2
Original line number Diff line number Diff line
@@ -28,8 +28,8 @@

DCE = dce_audio.o dce_stream_encoder.o dce_link_encoder.o dce_hwseq.o \
dce_mem_input.o dce_clock_source.o dce_scl_filters.o dce_transform.o \
dce_clocks.o dce_opp.o dce_dmcu.o dce_abm.o dce_ipp.o dce_aux.o

dce_clocks.o dce_opp.o dce_dmcu.o dce_abm.o dce_ipp.o dce_aux.o \
dce_i2c.o dce_i2c_hw.o dce_i2c_sw.o

AMD_DAL_DCE = $(addprefix $(AMDDALPATH)/dc/dce/,$(DCE))

Loading