drm/amd/display: Add I2C escape to support query device exist.
[How] 1. Search OEM I2C info from BIOS and compare with input parameter. 2. If BIOS doesn't record it, just try to read one byte. Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> Acked-by: Agustin Gutierrez <agustin.gutierrez@amd.com> Signed-off-by: JinZe.Xu <JinZe.Xu@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
436afdfa35
commit
a0248d543b
@ -3363,6 +3363,19 @@ bool dc_is_dmcu_initialized(struct dc *dc)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dc_is_oem_i2c_device_present(
|
||||
struct dc *dc,
|
||||
size_t slave_address)
|
||||
{
|
||||
if (dc->res_pool->oem_device)
|
||||
return dce_i2c_oem_device_present(
|
||||
dc->res_pool,
|
||||
dc->res_pool->oem_device,
|
||||
slave_address);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dc_submit_i2c(
|
||||
struct dc *dc,
|
||||
uint32_t link_index,
|
||||
|
@ -466,6 +466,11 @@ const struct dc_link_settings *dc_link_get_link_cap(
|
||||
void dc_link_overwrite_extended_receiver_cap(
|
||||
struct dc_link *link);
|
||||
|
||||
bool dc_is_oem_i2c_device_present(
|
||||
struct dc *dc,
|
||||
size_t slave_address
|
||||
);
|
||||
|
||||
bool dc_submit_i2c(
|
||||
struct dc *dc,
|
||||
uint32_t link_index,
|
||||
|
@ -25,6 +25,32 @@
|
||||
#include "dce_i2c.h"
|
||||
#include "reg_helper.h"
|
||||
|
||||
bool dce_i2c_oem_device_present(
|
||||
struct resource_pool *pool,
|
||||
struct ddc_service *ddc,
|
||||
size_t slave_address
|
||||
)
|
||||
{
|
||||
struct dc *dc = ddc->ctx->dc;
|
||||
struct dc_bios *dcb = dc->ctx->dc_bios;
|
||||
struct graphics_object_id id = {0};
|
||||
struct graphics_object_i2c_info i2c_info;
|
||||
|
||||
if (!dc->ctx->dc_bios->fw_info.oem_i2c_present)
|
||||
return false;
|
||||
|
||||
id.id = dc->ctx->dc_bios->fw_info.oem_i2c_obj_id;
|
||||
id.enum_id = 0;
|
||||
id.type = OBJECT_TYPE_GENERIC;
|
||||
if (dcb->funcs->get_i2c_info(dcb, id, &i2c_info) != BP_RESULT_OK)
|
||||
return false;
|
||||
|
||||
if (i2c_info.i2c_slave_address != slave_address)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dce_i2c_submit_command(
|
||||
struct resource_pool *pool,
|
||||
struct ddc *ddc,
|
||||
|
@ -30,6 +30,12 @@
|
||||
#include "dce_i2c_hw.h"
|
||||
#include "dce_i2c_sw.h"
|
||||
|
||||
bool dce_i2c_oem_device_present(
|
||||
struct resource_pool *pool,
|
||||
struct ddc_service *ddc,
|
||||
size_t slave_address
|
||||
);
|
||||
|
||||
bool dce_i2c_submit_command(
|
||||
struct resource_pool *pool,
|
||||
struct ddc *ddc,
|
||||
|
Loading…
Reference in New Issue
Block a user