dce_i2c_hw
struct dce_i2c_hw *dce_i2c_hw;
dce_i2c_hw = acquire_i2c_hw_engine(pool, ddc);
if (!dce_i2c_hw)
return dce_i2c_submit_command_hw(pool, ddc, cmd, dce_i2c_hw);
const struct dce_i2c_hw *dce_i2c_hw)
dce_i2c_hw->reference_frequency / pre_scale :
dce_i2c_hw->default_speed;
struct dce_i2c_hw *dce_i2c_hw,
DC_I2C_INDEX, dce_i2c_hw->buffer_used_write,
struct dce_i2c_hw *dce_i2c_hw,
last_transaction = ((dce_i2c_hw->transaction_count == 3) ||
switch (dce_i2c_hw->transaction_count) {
if (dce_i2c_hw->transaction_count == 0) {
dce_i2c_hw->buffer_used_write = 0;
dce_i2c_hw->buffer_used_write++;
dce_i2c_hw->buffer_used_write++;
++dce_i2c_hw->transaction_count;
dce_i2c_hw->buffer_used_bytes += length + 1;
static inline void reset_hw_engine(struct dce_i2c_hw *dce_i2c_hw)
struct dce_i2c_hw *dce_i2c_hw,
if (dce_i2c_hw->masks->DC_I2C_DDC1_START_STOP_TIMING_CNTL)
FN(DC_I2C_DDC1_SPEED, DC_I2C_DDC1_PRESCALE), dce_i2c_hw->reference_frequency / speed,
FN(DC_I2C_DDC1_SPEED, DC_I2C_DDC1_PRESCALE), dce_i2c_hw->reference_frequency / speed,
struct dce_i2c_hw *dce_i2c_hw)
if (dce_i2c_hw->setup_limit != 0)
i2c_setup_limit = dce_i2c_hw->setup_limit;
DC_I2C_DDC_SELECT, dce_i2c_hw->engine_id);
if (dce_i2c_hw->send_reset_length == 0) {
static bool is_hw_busy(struct dce_i2c_hw *dce_i2c_hw)
dce_i2c_hw->ctx
reset_hw_engine(dce_i2c_hw);
struct dce_i2c_hw *dce_i2c_hw)
set_speed(dce_i2c_hw, dce_i2c_hw->original_speed);
dce_i2c_hw->regs->reg
if (!dce_i2c_hw->engine_keep_power_up_count)
struct dce_i2c_hw *acquire_i2c_hw_engine(
struct dce_i2c_hw *dce_i2c_hw = NULL;
dce_i2c_hw = pool->hw_i2cs[line];
if (!dce_i2c_hw)
dce_i2c_hw->shifts->field_name, dce_i2c_hw->masks->field_name
dce_i2c_hw->ddc = ddc;
current_speed = get_speed(dce_i2c_hw);
dce_i2c_hw->original_speed = current_speed;
if (!setup_engine(dce_i2c_hw)) {
struct dce_i2c_hw *dce_i2c_hw)
release_engine(dce_i2c_hw);
return dce_i2c_hw;
struct dce_i2c_hw *dce_i2c_hw,
dce_i2c_hw, NULL);
struct dce_i2c_hw *dce_i2c_hw,
if (!process_transaction(dce_i2c_hw, request))
if (is_hw_busy(dce_i2c_hw)) {
execute_transaction(dce_i2c_hw);
const struct dce_i2c_hw *dce_i2c_hw,
uint32_t speed = get_speed(dce_i2c_hw);
(dce_i2c_hw->buffer_used_bytes << 3) +
(dce_i2c_hw->transaction_count << 1);
struct dce_i2c_hw *dce_i2c_hw,
get_hw_buffer_available_size(dce_i2c_hw)) {
dce_i2c_hw, payload->length + 1);
dce_i2c_hw, &request);
dce_i2c_hw,
process_channel_reply(dce_i2c_hw, payload);
DC_I2C_TRANSACTION_COUNT, dce_i2c_hw->transaction_count - 1);
struct dce_i2c_hw *dce_i2c_hw)
set_speed(dce_i2c_hw, cmd->speed);
dce_i2c_hw, payload, mot)) {
release_engine(dce_i2c_hw);
dal_ddc_close(dce_i2c_hw->ddc);
dce_i2c_hw->ddc = NULL;
struct dce_i2c_hw *dce_i2c_hw,
dce_i2c_hw->ctx = ctx;
dce_i2c_hw->engine_id = engine_id;
dce_i2c_hw->reference_frequency = get_reference_clock(ctx->dc_bios) >> 1;
dce_i2c_hw->regs = regs;
dce_i2c_hw->shifts = shifts;
dce_i2c_hw->masks = masks;
dce_i2c_hw->buffer_used_bytes = 0;
dce_i2c_hw->transaction_count = 0;
dce_i2c_hw->engine_keep_power_up_count = 1;
dce_i2c_hw->original_speed = DEFAULT_I2C_HW_SPEED;
dce_i2c_hw->default_speed = DEFAULT_I2C_HW_SPEED;
dce_i2c_hw->send_reset_length = 0;
dce_i2c_hw->setup_limit = I2C_SETUP_TIME_LIMIT_DCE;
dce_i2c_hw->buffer_size = I2C_HW_BUFFER_SIZE_DCE;
struct dce_i2c_hw *dce_i2c_hw,
dce_i2c_hw_construct(dce_i2c_hw,
dce_i2c_hw->buffer_size = I2C_HW_BUFFER_SIZE_DCE100;
dce_i2c_hw->transaction_count = 0;
dce_i2c_hw->buffer_used_bytes = 0;
dce_i2c_hw->reference_frequency =
(dce_i2c_hw->reference_frequency * 2) / xtal_ref_div;
struct dce_i2c_hw *dce_i2c_hw,
dce100_i2c_hw_construct(dce_i2c_hw,
dce_i2c_hw->default_speed = DEFAULT_I2C_HW_SPEED_100KHZ;
struct dce_i2c_hw *dce_i2c_hw,
dce112_i2c_hw_construct(dce_i2c_hw,
dce_i2c_hw->setup_limit = I2C_SETUP_TIME_LIMIT_DCN;
struct dce_i2c_hw *dce_i2c_hw,
else if (value & dce_i2c_hw->masks->DC_I2C_SW_STOPPED_ON_NACK)
else if (value & dce_i2c_hw->masks->DC_I2C_SW_TIMEOUT)
else if (value & dce_i2c_hw->masks->DC_I2C_SW_ABORTED)
else if (value & dce_i2c_hw->masks->DC_I2C_SW_DONE)
const struct dce_i2c_hw *dce_i2c_hw)
return dce_i2c_hw->buffer_size -
dce_i2c_hw->buffer_used_bytes;
struct dce_i2c_hw *dce_i2c_hw,
struct dce_i2c_hw *dce_i2c_hw,
struct dce_i2c_hw *dce_i2c_hw,
struct dce_i2c_hw *dce_i2c_hw,
struct dce_i2c_hw *dce_i2c_hw);
struct dce_i2c_hw *acquire_i2c_hw_engine(
struct dce_i2c_hw *dce100_i2c_hw_create(
struct dce_i2c_hw *dce_i2c_hw =
kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
if (!dce_i2c_hw)
dce100_i2c_hw_construct(dce_i2c_hw, ctx, inst,
return dce_i2c_hw;
struct dce_i2c_hw *dce110_i2c_hw_create(
struct dce_i2c_hw *dce_i2c_hw =
kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
if (!dce_i2c_hw)
dce100_i2c_hw_construct(dce_i2c_hw, ctx, inst,
return dce_i2c_hw;
struct dce_i2c_hw *dce112_i2c_hw_create(
struct dce_i2c_hw *dce_i2c_hw =
kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
if (!dce_i2c_hw)
dce112_i2c_hw_construct(dce_i2c_hw, ctx, inst,
return dce_i2c_hw;
struct dce_i2c_hw *dce120_i2c_hw_create(
struct dce_i2c_hw *dce_i2c_hw =
kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
if (!dce_i2c_hw)
dce112_i2c_hw_construct(dce_i2c_hw, ctx, inst,
return dce_i2c_hw;
struct dce_i2c_hw *dce80_i2c_hw_create(
struct dce_i2c_hw *dce_i2c_hw =
kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
if (!dce_i2c_hw)
dce_i2c_hw_construct(dce_i2c_hw, ctx, inst,
return dce_i2c_hw;
struct dce_i2c_hw *dcn10_i2c_hw_create(
struct dce_i2c_hw *dce_i2c_hw =
kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
if (!dce_i2c_hw)
dcn1_i2c_hw_construct(dce_i2c_hw, ctx, inst,
return dce_i2c_hw;
struct dce_i2c_hw *hw_i2cs[MAX_PIPES];